Отправка пользовательских типов Mime электронной почты Google App Engine

Привет, я только что узнал, что не могу использовать 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.

Могу ли я указать тип mime вручную, используя почтовый API Google?

Редактировать: Еще немного о проблеме, с которой я сталкиваюсь, когда мой 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...

API почты Google отправляет один и тот же файл следующим образом:

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

person Awalias    schedule 02.04.2013    source источник


Ответы (1)


Короче говоря, вы не можете указать пользовательские типы MIME, используя электронную почту Google AppEngine.

Чтобы отправить электронную почту через Google AppEngine через Google, вам необходимо использовать предоставленный Mail API. Вы можете увидеть, почему .docx использует тип контента application/msword здесь: https://cloud.google.com/appengine/docs/standard/python/mail/mail-with-headers-attachments. Возможно, вы захотите отправить проблему в систему отслеживания проблем, чтобы решить эту проблему.

Возможно, стоит обратиться к сторонним поставщикам услуг электронной почты, таким как SES Amazon или SendGrid. Я лично использовал SES от Amazon, чтобы обойти отсутствие многих функций и ограничений в Mail API GAE (хотя Google постоянно совершенствует этот API).

Вы можете использовать библиотеку boto для связи с AWS SES и отправки Сообщения электронной почты в формате RAW. (Посмотрите на этот вопрос для примера того, как создать электронную -mail, для ваших целей могут понадобиться небольшие доработки)

person someone1    schedule 03.04.2013
comment
Я немного разочарован тем, что мне приходится включать в свой проект дополнительную библиотеку/службу, но я должен сказать, что она работает довольно хорошо и точно так, как вы описали. Спасибо за помощь! - person Awalias; 09.04.2013
comment
Рад помочь, каким сервисом вы в итоге воспользовались? - person someone1; 10.04.2013
comment
Я пошел с boto, чтобы отправить необработанные электронные письма SES - person Awalias; 10.04.2013
comment
Эта ссылка уже актуальна? Где приложение/msword на странице? - person Praxiteles; 22.12.2017