微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何正确使用带有 unicode 或重音字符的 SMTP 标头?

如何解决如何正确使用带有 unicode 或重音字符的 SMTP 标头?

我最近在发送电子邮件时遇到了很多困难,因为我的标题没有正确编码。它适用于除 Gmail 之外的所有邮件服务。在这里,我分享一个适用于所有人的解决方案。

解决方法

这是一个发送电子邮件的脚本。解释在评论中。需要访问 SMTP 服务器。

# Python 3.7.2
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import base64
import smtplib


# Please fill to match your server and email addresses:
SMPT_HOST = ''
SMPT_PORT = 
SMTP_USER = ''
SMTP_PASSWORD = ''
EMAIL_FROM_NAME = 'something'  # Here you can use unicode characters
EMAIL_FROM_ADR = 'something@something'
EMAIL_SUBJECT = 'Test'
DESTINATION_NAME = 'something'  # Here you can use unicode characters
DESTINATION_ADR = 'something@something'

# I use this function to be able to use accented characters in my headers:
def encode_base64(s: str) -> str:
    encoded_text = base64.b64encode(s.encode('utf-8')).decode('ascii')
    return f'=?utf-8?b?{encoded_text}?='

    
# This function is for encoding From and To:
def format_named_address(name: str,adr: str):
    return f'{encode_base64(name)} <{adr}>'


smtp = smtplib.SMTP(SMPT_HOST,SMPT_PORT)
smtp.starttls()  # enable TLS
smtp.login(SMTP_USER,SMTP_PASSWORD)

body = 'This is test.'

# Create the container (outer) email message.
outer = MIMEMultipart()
outer['Content-Type'] = 'text/plain; charset=utf-8'
outer['Subject'] = encode_base64(EMAIL_SUBJECT)
# For From and To,the email itself should not be encoded:
outer['From'] = format_named_address(EMAIL_FROM_NAME,EMAIL_FROM_ADR)
outer['To'] = format_named_address(DESTINATION_NAME,DESTINATION_ADR)

# Now send the message
part1 = MIMEText(body,'plain','UTF-8')
outer.attach(part1)
smtp.sendmail(SMTP_USER,DESTINATION_ADR,outer.as_bytes())

smtp.quit()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。