在 Gmail API 中发送 utf-8 显示名称时出现问题

问题描述 投票:0回答:1

所以我有一个通过 Gmail API 发送电子邮件的功能:

def send_email(payload, messagesubject, sendtoaddresses, key_file_path: str, subject: str):
    messagedraft = MIMEText(payload, "plain")
    mailservice = build_mail_service(key_file_path, subject)
    messagedraft["From"] = f"Display name <{subject}>"
    messagedraft["Subject"] = messagesubject
    for address in sendtoaddresses.split(","):
        if "To" in messagedraft:
            del messagedraft["To"]
        messagedraft["To"] = address
        message = {"raw": urlsafe_b64encode(messagedraft.as_bytes()).decode()}
        mailservice.users().messages().send(userId="me", body=message).execute()

除了如果“发件人”字段中的“显示名称”有一个 utf-8 字符,它会被省略并且只有电子邮件地址显示在标题中这一事实之外,一切都运行良好。

我尝试了在互联网和 stackoverflow 上找到的各种编码设置,但没有任何解决办法。唯一有效的是当我将 utf-8 字符更改为 ascii

我试图理解为什么会出现这个问题以及如何解决此问题。

python gmail-api email-headers
1个回答
0
投票

在检查 Tripleee 链接的文档时在 Gmail API 中发送 utf-8 显示名称时出现问题我被一个新想法所震惊,并用

MIMEText
类替换了
EmailMessage
类。 以下是对我有用的解决方案,以供将来参考。

def send_email(payload, messagesubject, sendtoaddresses, key_file_path: str, subject: str):
    messagedraft = EmailMessage()
    messagedraft.set_payload(payload)
    mailservice = build_mail_service(key_file_path, subject)
    messagedraft.add_header("From", f"Display name <{subject}>")
    messagedraft.add_header("Subject", messagesubject)
    messagedraft.add_header("To", "")
    for address in sendtoaddresses.split(","):
        messagedraft.replace_header("To", address)
        message = {"raw": urlsafe_b64encode(messagedraft.as_bytes()).decode()}
        mailservice.users().messages().send(userId="me", body=message).execute()
© www.soinside.com 2019 - 2024. All rights reserved.