【问题标题】:Email attachment sent as encoded text作为编码文本发送的电子邮件附件
【发布时间】:2021-02-04 19:00:07
【问题描述】:

我正在发送带有一个或多个附件的电子邮件,我使用 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 没有特别说明进行任何其他更改,只是将文件添加到邮件对象。知道这里发生了什么吗?

【问题讨论】:

    标签: ruby-on-rails gmail-api google-api-ruby-client mail-gem


    【解决方案1】:

    我认为在您的情况下,电子邮件正文和附件文件需要以multipart/alternative 发送。那么当使用“Mail gem”时,下面的修改如何呢?

    修改脚本:

    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)
    

    参考资料:

    【讨论】:

    • 田池感谢您的回复。这样做我仍然无法发送附件,但是在我这样做之后电子邮件中没有编码文本。所以,我只收到了主题和电子邮件multipart/alternative 的东西,没有任何形式的附件。
    • here is the response 我收到的带有 2 个图像附件的已发送消息。
    • @Prime 感谢您的回复。我带来的不便表示歉意。不幸的是,我无法复制您的情况。因为在我的环境中,我可以确认脚本有效。我为此道歉。所以为了正确理解你目前的情况,你能提供你的脚本来复制你的问题吗?借此,我想确认一下。顺便说一句,由于您的脚本,我已经在我的答案中对修改后的脚本进行了测试。如果您能合作解决您的问题,我很高兴。
    • @Prime 感谢您的回复。根据您最初的问题,我的示例脚本假设文件是​​mail.add_file(params["file"].tempfile.path) # path e.g "/tmp/RackMultipart-some-name-text.png"。我深表歉意,我的提案脚本不能用于您的所有情况。这是因为我的技术不好。我想学习更多。那么您可以使用/tmp/RackMultipart-some-name-text.png 之类的路径来测试脚本吗?因为在我的环境中,当使用路径时,不会发生错误,并且可以将文件附加到电子邮件中。顺便说一句,在你的脚本中,你能删除mail.body = email_body吗?
    • @Prime 感谢您再次回复和测试。我很高兴你的问题得到了解决。也谢谢你。
    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 2016-04-29
    • 2013-03-19
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    相关资源
    最近更新 更多