将动态生成的文件作为电子邮件

时间:2014-05-05 03:38:44

标签: ruby-on-rails ruby email csv

我目前正在允许用户选择某些参数,并根据这些参数生成csv文件并将其作为下载推送给用户。例如

send_data <generated csv data>, :disposition => 'attachment' :type => 'text/csv'

有时因为数据太大而无法计算,我不想让用户等待文件作为下载推送。我想将此文件作为附件发送到电子邮件中。

我可以正常发送电子邮件。我可以将已存在的文件作为附件发送。我不想保存这个文件。我想直接通过电子邮件发送给用户。

我该怎么做?

2 个答案:

答案 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

请参阅attachmentsinline attachments