如何将多个文件附加到ActionMailer邮件对象?(没有附加几个不需要的文本文件)



我用下面的代码成功生成并发送了一封电子邮件。

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

相关内容

  • 没有找到相关文章