电子邮件附件以编码文本形式发送 修改后的脚本:参考文献:

问题描述

我正在发送带有一个或多个附件的电子邮件,我使用Mail gem创建电子邮件,这是代码

mail = Mail.new
mail.to = to
mail.subject = subject
mail.body = email_body
mail.content_type = 'text/html'
# attaching a temp file on the rails server
mail.add_file(params["file"].tempfile.path) # path e.g "/tmp/RackMultipart-some-name-text.png"
message_to_send = Google::Apis::GmailV1::Message.new(raw: mail.to_s)
response = @gmail_service.send_user_message("me",message_to_send)

但是我没有发送附件文件,而是以原始文本的形式收到电子邮件,附件文件作为电子邮件正文中的Base64编码字符串出现。 Here is an example发送附件时收到的电子邮件的外观。
用于附加文件邮件gem documentation并没有特别说明要进行任何其他更改,只是将文件添加邮件对象中。对这里发生的事情有任何想法吗?

解决方法

我认为在您的情况下,电子邮件正文和附件文件必须以multipart/alternative的形式发送。那么,当使用“邮件宝石”时,如何进行以下修改?

修改后的脚本:

mail = Mail.new
mail.to = to
mail.subject = subject

# I added below script.
mail.part content_type: 'multipart/alternative' do |part|
  part.html_part = Mail::Part.new(body: email_body,content_type: 'text/html')
  part.text_part = Mail::Part.new(body: email_body)
end

mail.add_file(params["file"].tempfile.path)
message_to_send = Google::Apis::GmailV1::Message.new(raw: mail.to_s)
response = @gmail_service.send_user_message("me",message_to_send)

参考文献: