我用下面的代码成功生成并发送了一封电子邮件。
class UserMailer < ActionMailer::Base
default :from => 'user@user.com',
:date => Time.now
def new_user(user)
mail_subject = ['WELCOME TO ACME, INC', 'USER ACTIVATION']
@user = user
mail.attachments['File One.pdf'] = File.read(File.join(ATTACHMENT_DIR, 'shared', 'file_one.pdf'))
mail.attachments['File Two.pdf'] = File.read(File.join(ATTACHMENT_DIR, 'shared', 'file_two.pdf'))
mail.attachments['File Three.pdf'] = File.read(File.join(ATTACHMENT_DIR, 'shared', 'file_three.pdf'))
mail.attachments['File Four.pdf'] = File.read(File.join(ATTACHMENT_DIR, 'shared', 'file_four'))
mail( :to => user.address.email,
:subject => mail_subject.join(' ~ ').upcase )
end
end
但是,电子邮件包含三个与电子邮件正文内容相同的文本文档。我为邮件器使用的视图名为new_user.text.erb。
我怀疑对于我附加的每个pdf文档,也会生成一个纯文本文档,第一个是实际的电子邮件文档主体,其余三个是与pdf文档一起附加的。
如何在不附加这些(重复)文本文档的情况下附加这些pdf文档?还有人遇到过这种情况吗?
尝试使用附件['..]']而不是mail.attachments['..,它在这里以这种方式工作,并且没有观察到重复。
I'm on Rails 3.0.7, mail 2.2.19:
我看到的唯一其他区别是,我有一个带有mime_type和content的散列。但是我认为反过来也是一样的,它只是分配了一个mime类型,这是不够的。
attachments['event.ics'] = {:mime_type=>'text/calendar', :content => ics}
mail({
:to => email,
:subject => subject,
}) do |format|
format.text { render :inline => mail_template }
...
end
我使用的是Rails版本5.2.4.5。希望能有所帮助:
我的参考来自这里2.3.1添加附件和附件。
如果要附加多个文件。
重复调用这个方法。它将发送带有两个文件的邮件。
attachments["YourFile.csv"] = {mime_type: 'text/csv', content: csv_data}
attachments["YourFile2.csv"] = {mime_type: 'text/csv', content: csv_data}
这是我的例子,生成CSV和PDF并同时邮寄给你参考:
headers = ['Name', 'Age', 'Party', 'Vote']
csv_data = CSV.generate(headers: true) do |csv|
csv << headers
@candidates.each do |people|
csv << [people.name, people.age, people.party, people.vote_logs_count]
end
end
attachments["Report.csv"] = {mime_type: 'text/csv', content: csv_data}
attachments["Report2.pdf"] = WickedPdf.new.pdf_from_string(
render_to_string(:pdf => "pdf",:template => 'candidates/pdf.html.erb')
)
mail(
from: "SomeOne" + "@SomeHashDomain.mailgun.org",
to: 'Recipient@Domain.com',
subject: "CSV and PDF report"
)
补充说明:我使用WickedPdf Gem生成PDF