2

嗨,我刚刚发现我无法使用 smtplib 从 GAE 发送电子邮件,但我需要指定自定义 mime 类型,如下所示:

part = MIMEBase('application', "vnd.openxmlformats-officedocument.wordprocessingml.document")
part.set_payload( doc )
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"' % "ackReceived.docx")
msg.attach(part)

如果我尝试以记录的方式使用 api,它会发送带有“application/msword”的附件,这会导致我的 docx 损坏。

我可以使用谷歌的邮件 API 手动指定 MIME 类型吗?

编辑:当我的 docx 是通过邮件 api 发送时,我面临的问题的更多信息:

smtplib 像这样发送附件:

Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="ackReceived.docx"

UEsDBBQABgAIAAAAIQCCVgdJnwEAAMgIAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbMWWS0/DMBCE
70j8h8hXlLhwQAg17YHHEZAo4mzsTWMRP2Qvj/571k1bIaiaiDbiEilZz3wzsSJnPP00TfYOIWpn
S3ZajFgGVjql7bxkT7Pb/IJlEYVVonEWSraAyKaT46PxbOEhZqS2sWQ1or/kPMoajIiF82BpUrlg...

Google 邮件 api 发送相同的文件,如下所示:

Content-Type: application/msword
MIME-Version: 1.0
Content-Disposition: attachment; filename="ackReceived.docx"

PK�����!�‚VIŸ��È�����[Content_Types].xmlÅ–KOÃ0„ïHü‡ÈW”¸p@5íÇ(âlìMc?d/þ{ÖM[!¨šˆ6â)YÏ|3±"g<ý4Mö!jgKvZŒXV:¥í¼dO³Ûü‚e…U¢qJ¶€È¦“ã£ñlá!f¤¶±d5¢¿ä<ÊŒˆ…ó`iR¹`Òm˜s/䫘?ιtÁbŽÉƒMÆ×P‰·³›OzÜ&!9Ë®Úu    U2á}£¥@ó4å[uÞÎè´IÜô|»"@w Þ­úÑ'_u)H¹\kíãÉ*Ó=½Ì d"à0dÇ?\P\9ùfQ쮶…çªJKØè“›NBŒ´K¦)6#´íÌqÑ@<|ŠÖ·'þYc}SU ±Oó¤-~i»i€Hñ†¨»rîŒð/ƒ¥øfÞ¤r­Ã!ö~cݬ(ÃÚ¹3B
BA8=|‚Ö¸'ÿìßøi³éß÷äп7Ÿxâ¥!¬¬;C ”Ð^÷߉¥Í.$­|ÎG:yÃj¯¼¤Î©°‡€z÷—¶!’õÞý Ö...
4

1 回答 1

1

简而言之,您不能使用 Google AppEngine 电子邮件指定自定义 mime 类型。

为了通过 Google AppEngine 通过 Google 发送电子邮件,您需要使用提供的 Mail API。您可以application/msword在此处了解 .docx 使用内容类型的原因:https ://cloud.google.com/appengine/docs/standard/python/mail/mail-with-headers-attachments 。您可能希望向问题跟踪器提交问题以解决此问题。

可能值得关注第三方电子邮件提供商,例如Amazon 的 SESSendGrid。我个人一直在使用 Amazon 的 SES 来解决 GAE 的 Mail API 中许多缺乏功能和限制的问题(尽管 Google 一直在改进这个 API)。

您可以使用boto 库与 AWS SES 通信并发送RAW 电子邮件消息。(查看此问题以获取有关如何创建电子邮件的示例,可能需要为您的目的进行一些小的修改)

于 2013-04-03T21:39:49.870 回答