Python 以纯文本或 html 发送电子邮件,但不能同时发送两者
Python sending email with either plain text or html, but not both
我正在尝试使用 Python 发送电子邮件。我遇到了 运行 无法在正文中发送纯文本和 html 的问题,只能发送其中之一。如果我附上这两个部分,只有 HTML 出现,如果我注释掉 HTML 部分,那么纯文本就会出现。
我不确定为什么电子邮件不能包含两者。代码如下所示:
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
username = 'email_address'
password = 'password'
def send_mail(text, subject, from_email, to_emails):
assert isinstance(to_emails, list)
msg = MIMEMultipart('alternative')
msg['From'] = from_email
msg['To'] = ', '.join(to_emails)
msg['Subject'] = subject
txt_part = MIMEText(text, 'plain')
msg.attach(txt_part)
html_part = MIMEText("<h1>This is working</h1>", 'html')
msg.attach(html_part)
msg_str = msg.as_string()
with smtplib.SMTP(host='smtp.gmail.com', port=587) as server:
server.ehlo()
server.starttls()
server.login(username, password)
server.sendmail(from_email, to_emails, msg_str)
server.quit()
我实际上相信 7.2 The Multipart Content-Type 您编码的内容是正确的,电子邮件客户端会根据其能力选择它认为“最好”的那个,通常是 HTML 版本。使用 'mixed' 会导致两个版本连续显示(假设存在该功能)。我在Microsoft Outlook中观察到文本版本成为附件。
要连续查看两者:
而不是:
msg = MIMEMultipart('alternative')
使用:
msg = MIMEMultipart('mixed')
server.ehlo()
命令是多余的。
我正在尝试使用 Python 发送电子邮件。我遇到了 运行 无法在正文中发送纯文本和 html 的问题,只能发送其中之一。如果我附上这两个部分,只有 HTML 出现,如果我注释掉 HTML 部分,那么纯文本就会出现。
我不确定为什么电子邮件不能包含两者。代码如下所示:
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
username = 'email_address'
password = 'password'
def send_mail(text, subject, from_email, to_emails):
assert isinstance(to_emails, list)
msg = MIMEMultipart('alternative')
msg['From'] = from_email
msg['To'] = ', '.join(to_emails)
msg['Subject'] = subject
txt_part = MIMEText(text, 'plain')
msg.attach(txt_part)
html_part = MIMEText("<h1>This is working</h1>", 'html')
msg.attach(html_part)
msg_str = msg.as_string()
with smtplib.SMTP(host='smtp.gmail.com', port=587) as server:
server.ehlo()
server.starttls()
server.login(username, password)
server.sendmail(from_email, to_emails, msg_str)
server.quit()
我实际上相信 7.2 The Multipart Content-Type 您编码的内容是正确的,电子邮件客户端会根据其能力选择它认为“最好”的那个,通常是 HTML 版本。使用 'mixed' 会导致两个版本连续显示(假设存在该功能)。我在Microsoft Outlook中观察到文本版本成为附件。
要连续查看两者:
而不是:
msg = MIMEMultipart('alternative')
使用:
msg = MIMEMultipart('mixed')
server.ehlo()
命令是多余的。