1

我在 Rails 3.2.13 中遇到 ActionMailer、AWS SES 和附件(非内联)问题。在 Gmail 中查看电子邮件时,它的显示没有任何问题。在 Apple Mail 或 Sparrow 中查看时,附件丢失,正文显示,反之亦然。

电子邮件的标题如下:

Return-Path: 0000013e79305031-08aae59a-f7a0-41c9-8bd9-076c46caf100-000000@amazonses.com
Date: Mon, 6 May 2013 09:33:29 +0000
From: Test Account <test@test.com>
To: test@localhost.com
Message-ID: <0000013e79305031-46caf100-000000@email.amazonses.com>
Subject: TEST
Mime-Version: 1.0
Content-Type: multipart/alternative;
  boundary="--==_mimepart_518778e85f16a_56844ceff0898ed";
  charset=UTF-8
Content-Transfer-Encoding: 7bit
X-SES-Outgoing: 129.255.144.108

如果显示正文,则可以在源代码末尾找到附件:

----==_mimepart_518778e85f16a_56844ceff0898ed
Date: Mon, 06 May 2013 09:33:28 +0000
Mime-Version: 1.0
Content-Type: application/pdf;
 charset=UTF-8;
 filename="Test.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="Test.pdf"
Content-ID: <518778e829b75_56844ceff089553@ip-10-36-149-153.mail>
...

我在 Stack Overflow 上发现了类似的错误(使用 ActionMailer 发送多部分邮件时出现问题),但建议的解决方案不起作用——尤其是底部的解决方案非常有趣,因为它专注于没有内联附件的解决方案(https://stackoverflow. com/a/16334096/1016269)。我从 AWS 收到一个错误,虽然说没有设置开始边界 - 我试图明确设置它,但到目前为止还没有运气。

这是我用于发送电子邮件的原始代码:

def test_email
    attachments["Test.pdf"] = File.read(Rails.root.join("data", "test.pdf"))
    mail(to: recipient, subject: "Test Email")
end

这是基于我发布的链接中建议的解决方案的代码:

def test_email
    mixed = mail(to: recipient, subject: "Test Email")

    mixed.add_part(
        Mail::Part.new do
            content_type 'multipart/alternative'
            # THE ODD BIT vv
            mixed.parts.reverse!.delete_if {|p| add_part p }
        end
    )

    mixed.content_type 'multipart/mixed'
    mixed.header['content-type'].parameters[:boundary] = mixed.body.boundary

    attachments["Test.pdf"] = File.read(Rails.root.join("data", "test.pdf"))
 end

回应是:

AWS::SES::ResponseError: InvalidParameterValue - Missing start boundary

任何想法可能导致此问题?

非常感谢

4

0 回答 0