首页 > 解决方案 > 如何通过 GMAIL-API for python 发送多部分 HTML 和 PLAIN 格式的电子邮件

问题描述

我有一个与如何通过 gmail-api for python 发送 HTML 格式的电子邮件中的最后一个答案相关的问题,但不幸的是,答案对我不起作用。如果我附加了“plain”和“html”部分,它只接受我发出的最后一个“attach”调用。也就是说,如果我在 'html' 之后附加为 'plain',它只会作为 'plain' 发送(在具有 HTML 渲染的设备/应用程序上看起来没有吸引力)。但是如果我在 'plain' 之后附加 'html',它只发送“html”格式(在没有 HTML 渲染的设备/应用程序上看起来很糟糕)。与发布该问题的人不同,我确实需要这两个部分,因为接收我的电子邮件的一些设备/应用程序不呈现 HTML 并且需要纯文本部分。

如果我使用 'smtplib' 而不是 GMAIL-API,这不是问题,但我想使用 gmail api 来提高我的应用程序的安全性。

这是我的代码:

   message = MIMEMultipart('alternative')

   message['to'] = to_email
   message['from'] = from_email
   message['subject'] = subject

   body_plain = MIMEText(email_body,'plain')
   message.attach(body_plain)
   
   body_html_format="<u><b>html:<br>"+email_body+"</b></u>"
   body_html = MIMEText(body_html_format,'html')
   message.attach(body_html)  # PROBLEM: Will only send as HTML since this was added LAST.

   raw_string = base64.urlsafe_b64encode(message.as_bytes()).decode()

   request = service.users().messages().send(userId='my.email@gmail.com',body={'raw':raw_string})
   message = request.execute()

谢谢和问候, 道格

标签: pythonhtmlgmail-apimultipart

解决方案


推荐阅读