如何让 email.utils.formataddr 显示带有 twisted.mail.smtp.sendmail 的发件人姓名?

How can I get email.utils.formataddr to show a sender name with twisted.mail.smtp.sendmail?

当我使用标准 smtplib.SMTP.sendmail 函数时,我可以使用 email.utils.formataddr(senderName, local-part@domain) 作为 from_addr 来调用它,以在电子邮件客户端。

当我使用 twisted.mail.smtp.sendmail 执行相同操作时,我没有显示 senderName,而是得到了本地部分。

到目前为止,我只在 Gmail 中对此进行了测试,但由于这是我公司使用的,所以它是我要求的一部分。

我已经尝试通过 twisted.mail.smtp.sendmail 发送格式化地址并收到解析错误。

我用过 twisted.mail.smtp.quoteaddr,但发现只是将格式化的名称和地址剥离回地址。虽然没有解析错误。

        #print('populate the message')
        msg = MIMEMultipart('alternative')
        msg["Subject"] = 'A Subject'
        msg["From"] = email.utils.formataddr(('Sender Name', 'noreply@example.com'))
        msg["Reply-to"] = 'noreply@example.com'
        msg["To"] = 'recipient@example.com'
        content = MIMEText("Hey, what's up?" ,"html")
        msg.attach(content)
        msg_timeout = round(float(30))

        # create the sender and send it
        result = twisted.mail.smtp.sendmail("mail-sc", msg["From"], msg["To"].split(","), msg,
                     port=25, requireAuthentication=False)

收到此错误失败:twisted.mail._except.AddressError: 在 ('"Sender Name"', [' ', '<','noreply', '@','sender', '.','com', '>'])

"email addresses" 有不止一种标准和语法。 SMTP 使用的地址的标准和语法是(当前)RFC 5321。这是您传递给 twisted.mail.smtp.sendmail 的地址类型。 MIME 使用的地址的标准和语法是(当前)RFC 5322。这是您为发件人、收件人、抄送等放入 MIME 消息中的地址类型。

RFC 5321 地址没有发件人姓名组成部分。 RFC 5322 地址可以。我希望 email.utils.formataddr 返回有效的 RFC 5322 地址,将其放入 msg["From"] 是正确的。但是,您必须将 RFC 5321 地址传递给 twisted.mail.smtp.sendmail。粗略地说,这些格式为 noreply@example.com.