Acumatica SMTP 服务器出现 AWS SES 错误

Acumatica SMTP Server with AWS SES error

我正尝试在 Acumatica 中通过电子邮件发送 PDF 报告。如果我使用 Google 作为我的 SMTP 服务器,报告发送正常。但是,当我从 AWS 使用 SES 时,出现以下错误:

554 Transaction failed: Expected ';', got "\"

在与 AWS 交谈后,他们认为所附 PDF 的 Mime 类型导致了问题。我想检查一下是否有人能看出电子邮件信息有什么问题。我敢打赌问题出在客户端 (Acumatica) 而不是 SES。

其他使用 SES 的电子邮件客户端必须在客户端进行修复才能使用 SES。

以下是我从 google SMTP 服务器提取的原始邮件:

Return-Path: <adam.b@mywebsite.com>
Received: from PX.Common.Mail.SmtpSender (ec2-54-175-151-178.compute-1.amazonaws.com. [54.175.151.178])
        by smtp.gmail.com with ESMTPSA id e7sm178452qtb.9.2016.08.18.11.31.10
        for <adam.b@mywebsite.com>
        (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128);
        Thu, 18 Aug 2016 11:31:10 -0700 (PDT)
From: "AdamGmail" <adam.b@mywebsite.com>
To: adam.b@mywebsite.com
Reply-To: "AdamGmail" <adam.b@mywebsite.com>
Subject: test
Content-Type: multipart/mixed;boundary=1fcdf676_05de_4357_930f_9171591a4d05
Message-ID: <b5679888-b0ce-467f-a69b-e65592fd4d60_acumatica@smtp.gmail.com>
Date: Thu, 18 Aug 2016 13:31:09 -0500


--1fcdf676_05de_4357_930f_9171591a4d05
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: base64

PEhUTUw+PGhlYWQ+PHN0eWxlPi8qIFJURSBzdHlsZSBiZWdpbiAqLy5yaWNoIG9sLCAucmljaCB1
bCB7IG1hcmdpbi10b3A6IDBweDsgbWFyZ2luLWJvdHRvbTogMHB4O30NCi5yaWNoIC5pbWdicmRy
IHsNCglib3JkZXI6IHNvbGlkIDFweDsNCn0NCi5yaWNoSWNvbiB7DQoJZGlzcGxheTogaW5saW5l
LWJsb2NrOw0KCWJhY2tncm91bmQtaW1hZ2U6IHVybChJbWFnZXMvc3ByaXRlX21haW41LnBuZyk7
DQoJYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCgl3aWR0aDogMTVweDsNCn0NCi5yaWNo
QXR0YWNoIHsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMnB4IC0xMjJweDsNCn0NCi5yaWNoSW1n
IHsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMnB4IC0xMTIwcHg7DQp9DQoucmljaFNjcmVlbiB7
DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0cHggLTEwMzJweDsNCn0NCi5yaWNoQXJ0aWNsZSB7
DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0cHggLTEwNTRweDsNCn0NCg0KLyogQ29ycmVjdCBi
b3ggKi8NCi5yaWNoIC5HcmF5Qm94IHsNCglib3JkZXI6IHNvbGlkIDFweCAjQ0NDQ0NDOw0KCWJh
Y2tncm91bmQtY29sb3I6ICNGOUY5Rjk7DQoJcGFkZGluZzogNHB4Ow0KCS8qbWFyZ2luOiA0cHg7
Ki8NCgl3aWR0aDogOTglOw0KfQ0KLnJpY2ggLmhpbnRjZWxsDQp7DQoJaGVpZ2h0OiAzNnB4Ow0K
CXdpZHRoOiAzMnB4Ow0KCXZlcnRpY2FsLWFsaWduOiBtaWRkbGU7DQp9DQoNCi5yaWNoIC53YXJu
Y2VsbA0Kew0KCWhlaWdodDogMzZweDsNCgl3aWR0aDogMzJweDsNCgl2ZXJ0aWNhbC1hbGlnbjog
bWlkZGxlOw0KfQ0KDQoucmljaCAuYm94Y29udGVudHsgd2lkdGg6IDEwMCUgfQ0KLnJpY2ggcHJl
IHsgZm9udC1zaXplOjEuM2VtIH0NCg0KLnJpY2ggaWZyYW1lew0KCWJvcmRlcjogbm9uZTsNCn0N
Ci5yaWNoIGlmcmFtZS5pZnJhbWVCb3JkZXIsIC5yaWNoIGltZy5pZnJhbWVCb3JkZXIgew0KCWJv
cmRlcjogc29saWQgYmxhY2sgMXB4Ow0KfQ0KDQoucnRldGFibGUgPiB0Ym9keSA+IHRyID4gdGQs
IC5ydGV0YWJsZSA+IHRyID4gdGQgeyB3aGl0ZS1zcGFjZTogbm93cmFwIH0NCi5ydGV0YWJsZSA+
IHRib2R5ID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCwgLnJ0ZXRhYmxlID4gdHI6Zmlyc3QtY2hpbGQg
PiB0ZCB7IGJhY2tncm91bmQtY29sb3I6IHNpbHZlciB9DQoNCg0KLnJpY2ggcHJlLnNvdXJjZS1o
aWdobGlnaHRlZCB7YmFja2dyb3VuZC1jb2xvcjogI0YwRjBGRjt9DQoucmljaCBwcmUuc291cmNl
LWhpZ2hsaWdodGVkIC5udSwgLnJpY2ggLnNvdXJjZXRhYmxlIC5udSB7IGNvbG9yOiBicm93bjsg
fQ0KLnJpY2ggcHJlLnNvdXJjZS1oaWdobGlnaHRlZCAua3csIC5yaWNoIC5zb3VyY2V0YWJsZSAu
a3cgeyBjb2xvcjogYmx1ZTsgfQ0KLnJpY2ggcHJlLnNvdXJjZS1oaWdobGlnaHRlZCAuY210LCAu
cmljaCAuc291cmNldGFibGUgLmNtdCB7IGNvbG9yOiBncmVlbjsgfQ0KLnJpY2ggcHJlLnNvdXJj
ZS1oaWdobGlnaHRlZCAuc2wsIC5yaWNoIC5zb3VyY2V0YWJsZSAuc2wgeyBjb2xvcjogYnJvd247
IH0NCi5yaWNoIHByZS5zb3VyY2UtaGlnaGxpZ2h0ZWQgLmJyLCAucmljaCAuc291cmNldGFibGUg
LmJyIHtjb2xvcjogZGFya2dyZWVuOyB9DQoNCi5yaWNoIHByZS5zb3VyY2UtaGlnaGxpZ2h0ZWQg
LmFkZCwgLnJpY2ggLnNvdXJjZXRhYmxlIC5hZGQgeyBiYWNrZ3JvdW5kOiBwYWxlZ3JlZW47IH0N
Ci5yaWNoIHByZS5zb3VyY2UtaGlnaGxpZ2h0ZWQgLmRlbCwgLnJpY2ggLnNvdXJjZXRhYmxlIC5k
ZWwgeyBiYWNrZ3JvdW5kOiBwaW5rOyB9DQoNCi5yaWNoIHRhYmxlLCAucmljaCB0ciwgLnJpY2gg
dGQsIC5yaWNoIGltZywgLnJpY2ggaWZyYW1lIHsNCgljdXJzb3I6IGRlZmF1bHQ7DQp9DQoubGF5
b3V0IC5ydGVjZWxsIHsNCgl2ZXJ0aWNhbC1hbGlnbjogdG9wOw0KCWZvbnQtc2l6ZTogc21hbGw7
DQp9DQoucnRldGFibGUgPiB0Ym9keSA+IHRyID4gdGQsIC5ydGV0YWJsZSA+IHRyID4gdGQgeyB2
ZXJ0aWNhbC1hbGlnbjogdG9wOyB9DQoNCi5yaWNoIHB7DQoJbWFyZ2luOjBweCA1cHggMHB4IDBw
eDsNCn0NCi5yaWNoIC5hbGlnbi1jZW50ZXJ7DQoJdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KLnJp
Y2ggLmFsaWduLXJpZ2h0ew0KCXRleHQtYWxpZ246IHJpZ2h0Ow0KfQ0KLnJpY2ggLmFsaWduLWxl
ZnR7DQoJdGV4dC1hbGlnbjogbGVmdDsNCn0NCi5yaWNoIGxpW3N0eWxlKj0ndGV4dC1hbGlnbjog
Y2VudGVyJ10sIC5yaWNoIGxpW3N0eWxlKj0ndGV4dC1hbGlnbjogcmlnaHQnXSB7DQpsaXN0LXN0
eWxlLXBvc2l0aW9uOiBpbnNpZGU7DQp9DQoNCi5ydGV0YWJsZSB7IGVtcHR5LWNlbGxzOiBzaG93
OyBib3JkZXI6IHNvbGlkIDFweCBibGFjazsgYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyB9DQou
cnRldGFibGUgPiB0Ym9keSA+IHRyID4gdGQsIC5ydGV0YWJsZSA+IHRyID4gdGQgeyBib3JkZXI6
IHNvbGlkIDFweCBibGFjazsgaGVpZ2h0OiAxLjVlbTsgbWluLXdpZHRoOiAyMHB4OyAgcGFkZGlu
ZzogMHB4IDVweCB9DQoucmljaCB0YWJsZSB7Zm9udC1mYW1pbHk6IGFyaWFsOyBmb250LXNpemU6
IHNtYWxsfQ0KLnJpY2ggYmxvY2txdW90ZS5zaGlmdCB7DQoJbWFyZ2luLXJpZ2h0OiAwcHg7bWFy
Z2luLXRvcDogMHB4OyBtYXJnaW4tYm90dG9tOiAwcHg7DQp9DQoucmljaCBpbWdbZGF0YS1leHBh
bmRdIHsNCglkaXNwbGF5OiBibG9jazsNCn0NCi5yaWNoIHAsIC5yaWNoIHAucmljaHAgIHtmb250
LWZhbWlseTogYXJpYWw7IGZvbnQtc2l6ZTogc21hbGx9DQoucmljaCBibG9ja3F1b3RlLnNoaWZ0
IGgxLCAucmljaCBibG9ja3F1b3RlLnNoaWZ0IGgyLCAucmljaCBibG9ja3F1b3RlLnNoaWZ0IGgz
LCAucmljaCBibG9ja3F1b3RlLnNoaWZ0IGg0LCAucmljaCBibG9ja3F1b3RlLnNoaWZ0IGg1LCAu
cmljaCBibG9ja3F1b3RlLnNoaWZ0IGg2IHsNCiAgICBtYXJnaW4tdG9wOiAwcHg7DQp9DQoucmlj
aCwgLnJpY2ggKiB7DQogICAgd29yZC13cmFwOiBicmVhay13b3JkOw0KfQ0KDQoNCg0KLnNvdXJj
ZXRhYmxlIHtiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEZGOyBmb250LWZhbWlseTogbW9ub3NwYWNl
OyB3aWR0aDogMTAwJX0NCi5zb3VyY2V0YWJsZSB0ciB7DQoJbWFyZ2luOiAwcHg7DQoJcGFkZGlu
ZzogMHB4Ow0KfQ0KLnNvdXJjZXRhYmxlIHRkIHsNCgltYXJnaW46IDBweDsNCglwYWRkaW5nOiAw
cHg7DQoJd2hpdGUtc3BhY2U6IG5vd3JhcDsNCn0NCi5zb3VyY2V0YWJsZSA+IHRib2R5ID4gdHIg
PiB0ZDpmaXJzdC1jaGlsZCwgLnNvdXJjZXRhYmxlID4gdHIgPiB0ZDpmaXJzdC1jaGlsZA0Kew0K
CXdpZHRoOjFweDsNCn0NCg0KLmZpbGVsaXN0IHsNCgkvKmRpc3BsYXk6aW5saW5lLWJsb2NrOyov
IHBhZGRpbmc6IDVweDsNCn0NCg0KLnJpY2ggLnRvYyB7DQoJLypkaXNwbGF5OmlubGluZS1ibG9j
azsqLyBwYWRkaW5nOiA1cHg7DQp9DQoucmljaCAudG9jIC5oZWFkZXIsLnJpY2ggIC53aWtpbGlz
dCAuaGVhZGVyLC5yaWNoICAuZmlsZWxpc3QgLmhlYWRlciB7DQoJZm9udC1zaXplOiAxLjdlbTsN
Cn0NCi5yaWNoIC50b2MgbGksLnJpY2ggIC5maWxlbGlzdCBsaSB7DQoJbWFyZ2luOiA1cHggMHB4
Ow0KfQ0KLnJpY2ggLndpa2lsaXN0IGRpdiB7DQoJbWFyZ2luOiAxMHB4Ow0KfQ0KDQoucmljaCAu
bGF5b3V0IHttaW4taGVpZ2h0OiAyLjVlbTsgZGlzcGxheTp0YWJsZTsgd2lkdGg6MTAwJTsgYm9y
ZGVyLXNwYWNpbmc6NXB4OyB0YWJsZS1sYXlvdXQ6Zml4ZWQ7IGVtcHR5LWNlbGxzOiBzaG93O30N
Ci5yaWNoIC5sYXlvdXQgLnJ0ZWNlbGwge2Rpc3BsYXk6dGFibGUtY2VsbDsgaGVpZ2h0OiAyLjVl
bX0NCi5yaWNoIC5sYXlvdXQgLnJ0ZXNpZGUge3dpZHRoOiAyNSV9DQoNCi8qDQoucnRldGFibGUg
ew0KCWJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsNCn0NCi5ydGV0YWJsZSA+IHRib2R5ID4gdHIg
PiB0ZCwgLnJ0ZXRhYmxlID4gdHIgPiB0ZCB7DQoJYm9yZGVyOiAxcHggc29saWQgI2RkZDsNCglw
YWRkaW5nOiA3cHggMTBweDsNCgl2ZXJ0aWNhbC1hbGlnbjogdG9wOw0KCXRleHQtYWxpZ246IGxl
ZnQ7DQp9Ki8NCi5yaWNoIGJsb2NrcXVvdGUucmVhbGJxIHsNCglib3JkZXItbGVmdC1jb2xvcjog
bGlnaHRibHVlOw0KCWJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7DQoJYm9yZGVyLWxlZnQtc3R5bGU6
IHNvbGlkOw0KCW1hcmdpbi10b3A6IDBweDsNCgltYXJnaW4tYm90dG9tOiAwcHg7DQoJcGFkZGlu
Zy1sZWZ0OiA1cHg7DQp9DQoucmljaCBib2R5IHtmb250LWZhbWlseTogYXJpYWw7IGZvbnQtc2l6
ZTogc21hbGx9DQoNCi5yaWNoIC5HcmF5Qm94IHsNCgltYXJnaW4tbGVmdDogOHB4Ow0KfQ0KDQou
cmljaCAuc291cmNldGFibGUgeyBmb250LXNpemU6MS4zZW07fQ0KDQoNCi8qIFJURSBzdHlsZSBl
bmQgKi88L3N0eWxlPjwvaGVhZD48Ym9keSBzcGVsbGNoZWNrPSJ0cnVlIiAgY2xhc3M9InJpY2gi
IHN0eWxlPSJtYXJnaW46IDBweDsgcGFkZGluZzogMHB4OyBmb250LWZhbWlseTogYXJpYWw7IGZv
bnQtc2l6ZTogc21hbGw7Ij4KdGVzdDwvYm9keT48L0hUTUw+
--1fcdf676_05de_4357_930f_9171591a4d05
Content-Type: application/pdf;name=duparapcheck - (8_18_2016).pdf
Content-Transfer-Encoding: base64
Content-ID: <0cf14c8a-ded0-4fba-a161-50d1d4a9df61>

JVBERi0xLjUKJdP0zOEKMiAwIG9iag0KPDwNCi9UeXBlL1BhZ2UNCi9QYXJlbnQgMSAwIFINCi9N
ZWRpYUJveFswIDAgNTk0Ljc1IDg0MS41XQ0KL0NvbnRlbnRzIDUgMCBSDQovUmVzb3VyY2VzIDYg
MCBSDQo+Pg0KZW5kb2JqDQo2IDAgb2JqDQo8PA0KL1Byb2NTZXQgWy9QREYvVGV4dC9JbWFnZUIv
SW1hZ2VDL0ltYWdlSV0NCi9Gb250DQo8PA0KL0ZvbnQzIDMgMCBSDQo+Pg0KPj4NCmVuZG9iag0K
NSAwIG9iag0KPDwNCi9GaWx0ZXIgWy9GbGF0ZURlY29kZV0NCi9MZW5ndGggMzA0DQo+Pg0Kc3Ry
ZWFtDQp4nJ3SzU+DMBQA8HuT/g/vqAegn6x4VDajBxO3Jh6Mh40VnY4PkcWPv952qAy9UENoKeX1
93gtBWKvgAKPQwJK0FBCVmAUUEJAf2D0jFE0q8qWQ5DYL3SOEbH9993cd2MZh0wCFcI+U+YmDNxA
idGpxojuka7VhQuYSIi5a/Uao6OzB5M9QV41kO7q7SZbtuYFFpsyMyfHoB8xmtpFrkflQmWfTULG
JOMihumoiNKIERr74q5XHvQeTnp4ZoytgIGL1FdOYk/aBgztuclDuNoVK9N41zxhnrqLGPK6WZaQ
2o33xZlSP7hgY3AX8Qt/r71dLvqfVqNOvYsYupfV6h97LXgvT9QY2UUM5elbXTXt34IfWvNzjG7v
CKzh66S+dvOU8FDZoV1YMnbwYovRAqNPDQoNCmVuZHN0cmVhbQ0KZW5kb2JqDQoxIDAgb2JqDQo8
PA0KL0NvdW50IDENCi9UeXBlL1BhZ2VzDQovS2lkcyBbMiAwIFJdDQo+Pg0KZW5kb2JqDQozIDAg
b2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL0Jhc2VGb250IC9IZWx2ZXRp
Y2ENCi9GaXJzdENoYXIgMA0KL0xhc3RDaGFyIDI1NQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2Rp
bmcNCi9Gb250RGVzY3JpcHRvciA0IDAgUg0KPj4NCmVuZG9iag0KNCAwIG9iag0KPDwNCi9UeXBl
IC9Gb250RGVzY3JpcHRvcg0KL0FzY2VudCA5MDUNCi9EZXNjZW50IC0yMTINCi9DYXBIZWlnaHQg
NzE2DQovRmxhZ3MgMzINCi9Gb250QkJveCBbIC02NjUgLTMyNSAyMDAwIDEwNDBdDQovRm9udE5h
bWUgL0hlbHZldGljYQ0KL0l0YWxpY0FuZ2xlIDANCi9TdGVtViAwDQovWEhlaWdodCA1MTkNCj4+
DQplbmRvYmoNCjcgMCBvYmoNCjw8DQovUHJvZHVjZXIoRmlyZWZseSBMZWdhbCwgSW5jLikNCi9D
cmVhdG9yKEZpcmVmbHkgTGVnYWwsIEluYy4pDQovQ3JlYXRpb25EYXRlKEQ6MDAwMTAxMDEwMDAw
MDApDQo+Pg0KZW5kb2JqDQo4IDAgb2JqDQo8PA0KL1R5cGUvQ2F0YWxvZw0KL1BhZ2VNb2RlIC9V
c2VOb25lDQovUGFnZXMgMSAwIFINCj4+DQplbmRvYmoNCnhyZWYNCjAgOQ0KMDAwMDAwMDAwMCA2
NTUzNSBmDQowMDAwMDAwNjE3IDAwMDAwIG4NCjAwMDAwMDAwMTUgMDAwMDAgbg0KMDAwMDAwMDY4
MCAwMDAwMCBuDQowMDAwMDAwODM3IDAwMDAwIG4NCjAwMDAwMDAyMjggMDAwMDAgbg0KMDAwMDAw
MDEzMSAwMDAwMCBuDQowMDAwMDAxMDM2IDAwMDAwIG4NCjAwMDAwMDExNTcgMDAwMDAgbg0KdHJh
aWxlcg0KPDwNCi9JbmZvIDcgMCBSDQovUm9vdCA4IDAgUg0KL1NpemUgOQ0KPj4NCnN0YXJ0eHJl
Zg0KMTIzMQ0KJSVFT0YNCg==
--1fcdf676_05de_4357_930f_9171591a4d05--

我已收到来自 Acumatica 的更新,他们将在版本 6 中解决此问题,并会在该版本发布时通知我。

它将被标识为 AC-72336 – 通过 AWS-SES 以电子邮件形式发送文件名中带有 space 的 PDF 报告会出错。 2016 年 9 月 1 日

我在使用普通旧 Python 和 smtplib 时遇到了类似的错误:

smtplib.SMTPDataError: (554, b'Transaction failed: Expected \';\', got "/"')

我用print(message.as_string())打印出了消息的内容。原来我的 MIME 类型有误:

Content-Type: text/text/plain; charset="us-ascii"

更改我构造 MIMEText 对象的方式解决了问题:

-    message = MIMEText(message_body, 'text/plain')
+    message = MIMEText(message_body, 'plain')
     message['Subject'] = message_subject

我也遇到了同样的错误:

Failed to send mail due to the following error: ORA-29279: SMTP permanent error: 554 Transaction failed: Expected '/', got ;, Emai send exception here.

我养鸟的根本原因: 之前的代码:

If l_file_extension = 'pdf' THEN 
 write_mime_header(p_mail_conn, 'Content-Type', 'mime_type; name="' || p_filename || '"'); 
end if;

现在改成following就可以了

If l_file_extension = 'pdf' THEN
  write_mime_header(p_mail_conn, 'Content-Type', 'application/pdf; name="' || p_filename || '"');                
end if;