我目前正在允许用户选择某些参数,并根据这些参数生成csv文件并将其作为下载推送给用户。例如
send_data <generated csv data>, :disposition => 'attachment' :type => 'text/csv'
有时因为数据太大而无法计算,我不想让用户等待文件作为下载推送。我想将此文件作为附件发送到电子邮件中。
我可以正常发送电子邮件。我可以将已存在的文件作为附件发送。我不想保存这个文件。我想直接通过电子邮件发送给用户。
我该怎么做?
答案 0 :(得分:7)
@juanpastas - 我按照你建议的方式做到了。但是这导致文件显示为电子邮件正文中的文本。
这就是它在电子邮件中的显示方式。
Content-Type:text / csv; 字符集= UTF-8; 文件名= data.csv 内容传输编码:7位 内容 - 处理:附件; 文件名= data.csv Content-ID:xyzxyz [csv文件的内容为文本]
然后我收录了邮件正文并且它有效。
mail(to: user.email, subject: 'XYZ', body: 'XYZ')
这导致电子邮件包含我提供的正文和主题,而文件则显示为附件。
答案 1 :(得分:5)
我没有对此进行测试,但这应该可行:
class YourMailer < ActionMailer::Base
def csv_mail(user, csv_data)
attachments['a.csv'] = csv_data
mail(to: user.email)
end
end
在你的控制器中:
YourMailer.csv_mail(user, csv_data).deliver