发送多部分邮件和附件

6
我正在尝试使用Ruby 1.9.3中的'邮件'宝石发送电子邮件。它包含一个文本/ HTML和一个文本/纯文本部分,应作为备用部分嵌入,以及附件。
这是我的当前代码:
require 'mail'

mail = Mail.new
mail.delivery_method :sendmail
mail.sender = "me@example.com"
mail.to = "someguy@example.com"
mail.subject = "Multipart Test"
mail.content_type = "multipart/mixed"

html_part = Mail::Part.new do
  content_type 'text/html; charset=UTF-8'
  body "<h1>HTML</h1>"
end

text_part = Mail::Part.new do
  body "TEXT"
end

mail.part :content_type => "multipart/alternative" do |p|
  p.html_part = html_part
  p.text_part = text_part
end

mail.add_file :filename => "file.txt", :content => "FILE"

mail.deliver!

这会导致邮件有工作的备用部分,但没有附件。我正在使用Thunderbird 10.0.12进行测试。

我已经在GitHub上发布了此问题,但不幸的是,这些帖子并没有让我变聪明。https://github.com/mikel/mail/issues/118#issuecomment-12276876也许有人能够比我更好地理解最后一篇帖子;)

有人能够使此示例正常工作吗?

谢谢, krissi


你尝试过使用附件吗?例如:mail.attachments['myfile'] = ..... - fmendez
很遗憾,在这种情况下似乎也不起作用。 - krissi
2个回答

4
我成功地修复了它,方法如下:
html_part = Mail::Part.new do
  content_type  'text/html; charset=UTF-8'
  body          html
end

text_part = Mail::Part.new do
  body          text
end

mail.part :content_type => "multipart/alternative" do |p|
  p.html_part = html_part
  p.text_part = text_part
end


mail.attachments['some.xml'] = {content: Base64.encode64(theXML), transfer_encoding: :base64}
mail.attachments['some.pdf'] = thePDF

mail.content_type = mail.content_type.gsub('alternative', 'mixed')
mail.charset= 'UTF-8'
mail.content_transfer_encoding = 'quoted-printable'

这并不直观,但阅读Pony源代码有所帮助,同时将生成的.eml文件与正常工作的文件进行比较也有帮助。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接