使用here给出的示例,我written some code发送一个大部分纯文本电子邮件,其中包含页脚中的超链接:
def send_mail(subject, removed_ids, added_ids):
parser = ConfigParser()
parser.read('config.ini')
from_address = parser.get('smtp', 'from')
to_address = parser.get('smtp', 'to')
subject = subject
host = parser.get('smtp', 'host')
port = parser.get('smtp', 'port')
password = parser.get('smtp', 'password')
msg = MIMEMultipart('alternative')
msg['From'] = from_address
msg['To'] = to_address
msg['Subject'] = subject
body = 'The following Instruction IDs have been removed:\n'
for id in removed_ids:
body = body + id + '\n'
for id in added_ids:
body = body + id + '\n'
body = body + '\n'
body = body + 'The following Instruction IDs have been added:\n'
msg.attach(MIMEText(body, 'plain'))
msg.attach(MIMEText(EMAIL_BODY_FOOTER_HYPERLINK_TO, 'html'))
server = smtplib.SMTP(host, port)
server.starttls()
server.login(from_address, password)
text = msg.as_string()
server.sendmail(from_address, to_address, text)
server.quit()
在我添加HTML部分之前,纯文本看起来很好。现在添加:
msg = MIMEMultipart('alternative')
msg.attach(MIMEText(body, 'plain'))
msg.attach(MIMEText(EMAIL_BODY_FOOTER_HYPERLINK_TO, 'html'))
现在收到了HTML页脚,但该电子邮件完全缺少应该在其之前的纯文本。我哪里出错?
答案 0 :(得分:2)
您误解了多部分消息的工作原理。
明文和HTML部分不会以任何方式被客户“加入”。 两个部分都应包含整个邮件。 HTML客户端将显示HTML部分。无法显示HTML的文本客户端将显示文本部分并忽略HTML部分。
因此,您需要将您的消息也包含在HTML部分中,可能已转义或以其他方式进行HTML格式化。
当然,将您的URL包含在纯文本部分中会很好,只是不要将其包装到<a>
标记中。大多数客户都非常擅长检测明文电子邮件中的URL并突出显示它们,这样收件人就不会因为使用纯文本电子邮件客户端而丢失任何内容。