发送自定义Mime类型Google App Engine电子邮件

时间:2013-04-02 23:15:11

标签: python google-app-engine smtp mime-types smtplib

您好我刚刚发现我无法使用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损坏。

我可以使用google的mail api手动指定mime类型吗?

修改:关于我通过邮件api发送docx时遇到的问题的更多信息:

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 mail 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÷—¶!’õÞý Ö...

1 个答案:

答案 0 :(得分:1)

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

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

可能值得查看第三方电子邮件提供商,例如Amazon's SESSendGrid。我个人一直在使用亚马逊的SES来解决GAE Mail API中缺少的功能和限制(尽管Google不断改进这个API)。

您可以使用boto library与AWS SES进行通信并发送RAW e-mail messages。 (请查看this question以获取有关如何创建电子邮件的示例,可能需要进行少量修改)