簡體   English   中英

在通過電子郵件/ smtplib發送的郵件中結合純文本和HTML

[英]Combining plain text and HTML in a mail sent with email/smtplib

使用此處給出的示例,我編寫了一些代碼來發送大部分為純文本的電子郵件,並在頁腳中帶有超鏈接:

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頁腳,但是電子郵件完全缺少應在其之前的純文本。 我哪里出問題了?

您誤解了多部分消息的工作方式。

客戶端不以任何方式“連接”純文本和HTML部分。 這兩個部分都應包含整個消息。 HTML客戶端將顯示HTML部分。 無法顯示HTML的文本客戶端將顯示文本部分,而忽略HTML部分。

因此,您也需要將消息包含到HTML部分中,可能會轉義或以HTML格式格式化。

當然,最好也將您的URL包含在純文本部分中,只是不要將其包裝在<a>標記中。 大多數客戶端都非常擅長檢測純文本電子郵件中的URL並突出顯示它們,這樣,收件人就不會因為使用純文本電子郵件客戶端而丟失任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM