2

为了与另一个系统交换数据,我们将数据作为电子邮件附件发送到专用地址。电子邮件是使用 ActionMailer v3.2.12 生成的。

问题是当电子邮件到达其目的地时,除了我们创建的附件之外,名为 ATT00001.c 的冗余附件是电子邮件的一部分。这会导致另一端的导入例程出现问题。

问题的很大一部分是我们几乎不知道在目的地是如何处理电子邮件的。我们也不知道正在使用什么类型的电子邮件服务器,也无权检查电子邮件到达时的实际外观。我们可以将它发送到我们自己的地址之一,那里看起来不错。

我知道这不是很多事情,但也许你们中的一个人之前已经看到这些 ATT00001 附件被添加到机器生成的电子邮件中。

config.action_mailer.smtp_settings

address: smtp.<mailprovider>.com
port: 587
domain: ourdomain.com
authentication: login
user_name: <removed>
password: <removed>
enable_starttls_auto: false

更新: 我们已经能够获得有问题的电子邮件的副本,它显示了在附件之后呈现的电子邮件正文作为它自己的附件。我们尝试设置 ActionMailerparts_order以确保附件是在电子邮件正文之后生成的,但没有帮助。

更新 2: 发送到我的 gmail 帐户并显示我得到的原始原始数据。

SENT MAIL 在接收者对正确附件的回复中发送(自动创建的会创建一个错误日志条目)

(...) cut: to from and through email header information
 Mime-Version: 1.0
Content-Type: multipart/mixed;
 charset=UTF-8
Content-Transfer-Encoding: 7bit


--
Date: Thu, 28 Feb 2013 12:15:23 +0100
Mime-Version: 1.0
Content-Type: text/plain;
 charset=UTF-8
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="thefile.mscons"
Content-ID: <512f3c4b6e875_a8f756dcc642fe@bjorns_arch.mail>

VU5BOisuPyAnVU5CK1VOT0M6Mys3MDgwMDAzNDExNzE2OjE0OlRJTUVSKzcw
... many more lines like this ...
ODAwMDUwNTEyMTc6MTQ6VElNRVIrMTMwMjI4OjEyMTUrUE9XRVNUMTMwMjI4

----

这是body nil在actionmailer中

接下来是来自收件人系统的回复,发送到我的 gmail。这是正确附件的收据(额外的附件会产生错误,刷新他们的系统)

收到邮件

(..) unintersting header stuff with addresses
Content-Disposition: attachment;
  filename="afilename.txt"
Content-Transfer-Encoding: base64
Content-Type: Application/EDIFACT; charset="iso-8859-1"
Mime-Version: 1.0
Date: Sat, 16 Feb 2013 11:07:10 +0100
From: ediel@example.com
To: ***@gmail.com
Subject: thesubject
Message-ID: <511f5a53.850a700a.2fa0.2a0eSMTPIN_ADDED_BROKEN@mx.google.com>
X-TM-AS-Product-Ver: IMSS-7.0.0.6298-6.8.0.1017-19380.002
X-TM-AS-User-Approved-Sender: Yes
X-Greylist: Sender is SPF-compliant, not delayed by
milter-greylist-4.0 (isp-app27-vm.isp.example.com [213.239.116.46]);
Sat, 16 Feb 2013 11:07:11 +0100 (CET)
X-ExampleIKT-MailScanner-Information: Please contact the ISP for more information
X-ExampleIKT-MailScanner-ID: r1GA7BqD021150
X-ExampleIKT-MailScanner: Found to be clean
X-ExampleIKT-MailScanner-From: ediel@example.com
X-Spam-Status: No

VU5BOisuPyAnVU5CK1VOT0M6Mys3MDgwMDA1MDUxMjE3OjE0OlRJTUVSKzcwODAwMDM0MTE3MTY6
.. more..
pUSU1FUisxJ1VOVCszKzEnVU5aKzErMjAxMzAyMDAyNDg1Nzcn

Content-Type 有什么可疑的地方吗?--是否从发送的电子邮件中之前的内容生成了新的(空)附件?

4

2 回答 2

1

我相信这与内联附件和 Exchange 服务器有关。某些客户端,尤其是 Apple Mail 允许您添加内联附件,即夹在电子邮件文本/正文部分之间的 MIME 附件。Exchange 服务器希望所有附件都出现在邮件的任何文本部分之后。

邮件中附件之后的所有内容都被视为附件,因此正文被塞入一个文件并按照您报告的名称命名。看到您正在使用 ActionMailer,请参阅此答案和可能的此答案,这说明您需要切换代码行的顺序,并可能使用其他一些设置。

于 2013-02-27T14:50:47.867 回答
1

我们的问题解决了,但不幸的是我不能说是什么导致了多余的附件。我们通过发送仅包含附件的非多部分电子邮件来解决此问题。该解决方案显然不适用于需要发送多部分电子邮件的人。

在 Rails 中发送带有附件的非多部分电子邮件并不简单。您不能使用附件辅助方法和空白正文,您需要将附件内容放在电子邮件正文中并手动指定处置。

class MailMan < ActionMailer::Base
  def test
    attachment_content = "my attachment"
    disposition = "attachment; filename=\"test.txt\""
    mail(body: attachment_content,  content_disposition: disposition)
  end
end
于 2013-02-28T18:36:53.610 回答