Python SMTP 库需要 SMTPUTF8 用于地址显示名称中的非 ASCII 字符
Python SMTP lib required SMTPUTF8 for non-ASCI characters in from adress display name
我正在使用 python 的 smtplip 发送电子邮件。除了我在来自地址的消息中使用非 ASCI 字符时,所有 id 都工作正常。
我正在使用 python 3.5.
即使使用非 ASCI 收件人和主题也能正常工作:
import smtplib
from email.message import EmailMessage
from email.headerregistry import Addressmsg = EmailMessage()
msg['Subject'] = "Subject with non-asci chars like á"
msg['From'] = Address("Foo Bar", "foo.bar", "example.cz")
msg['To'] = (Address("Fóó Bár", "foo.bar", "example.cz"),
当我尝试像这样使用非 ASCI 时萌芽:
msg['Subject'] = "Subject with non-asci chars like á"
msg['From'] = Address("Fóó Bár", "foo.bar", "example.cz")
msg['To'] = (Address("Fóó Bár", "foo.bar", "example.cz"),
以上均发送:
with smtplib.SMTP('localhost') as s:
s.send_message(msg)
我遇到了这个异常:
smtplib.SMTPNotSupportedError: One or more source or delivery addresses require internationalized email support, but the server does not advertise the required SMTPUTF8 capability`
我知道这是由我们的 smtp 服务器不支持 SMTPUTF8 引起的,但仅从非 ASCI 显示名称来看,这应该不是必需的。
我假设您尝试使用 smtplib.send_message
。看起来它太聪明了,想要控制服务器是否会正确处理 utf8,即使在您的用例中没有必要。
你只需要恢复到原来的状态 smtplib.sendmail
:
serv = smtplib.SMTP(mailhost)
serv.sendmail(msg['From'], msg['To'], msg.as_string())
如果您想使用 send_message,您仍然可以通过将发件人地址传递给 send_message 函数来绕过那些讨厌的 utf8 检查。
with smtplib.SMTP('localhost') as s:
s.send_message(msg,'foo.bar@example.cz')
我通过先发送 'ehlo()' 来欺骗 send_message 库,然后手动修改功能:
s = smtplib.SMTP(server)
s.ehlo()
s.esmtp_features["smtputf8"] = ""
s.send_message(msg)
我还更改了消息政策,因为我遇到了其他问题:
msg = MIMEMultipart(policy=SMTPUTF8)
希望对您有所帮助! (这仅在您的服务器与 UTF8 兼容但不使用 ehlo 应答时才有效)
我正在使用 python 的 smtplip 发送电子邮件。除了我在来自地址的消息中使用非 ASCI 字符时,所有 id 都工作正常。
我正在使用 python 3.5.
即使使用非 ASCI 收件人和主题也能正常工作:
import smtplib
from email.message import EmailMessage
from email.headerregistry import Addressmsg = EmailMessage()
msg['Subject'] = "Subject with non-asci chars like á"
msg['From'] = Address("Foo Bar", "foo.bar", "example.cz")
msg['To'] = (Address("Fóó Bár", "foo.bar", "example.cz"),
当我尝试像这样使用非 ASCI 时萌芽:
msg['Subject'] = "Subject with non-asci chars like á"
msg['From'] = Address("Fóó Bár", "foo.bar", "example.cz")
msg['To'] = (Address("Fóó Bár", "foo.bar", "example.cz"),
以上均发送:
with smtplib.SMTP('localhost') as s:
s.send_message(msg)
我遇到了这个异常:
smtplib.SMTPNotSupportedError: One or more source or delivery addresses require internationalized email support, but the server does not advertise the required SMTPUTF8 capability`
我知道这是由我们的 smtp 服务器不支持 SMTPUTF8 引起的,但仅从非 ASCI 显示名称来看,这应该不是必需的。
我假设您尝试使用 smtplib.send_message
。看起来它太聪明了,想要控制服务器是否会正确处理 utf8,即使在您的用例中没有必要。
你只需要恢复到原来的状态 smtplib.sendmail
:
serv = smtplib.SMTP(mailhost)
serv.sendmail(msg['From'], msg['To'], msg.as_string())
如果您想使用 send_message,您仍然可以通过将发件人地址传递给 send_message 函数来绕过那些讨厌的 utf8 检查。
with smtplib.SMTP('localhost') as s:
s.send_message(msg,'foo.bar@example.cz')
我通过先发送 'ehlo()' 来欺骗 send_message 库,然后手动修改功能:
s = smtplib.SMTP(server)
s.ehlo()
s.esmtp_features["smtputf8"] = ""
s.send_message(msg)
我还更改了消息政策,因为我遇到了其他问题:
msg = MIMEMultipart(policy=SMTPUTF8)
希望对您有所帮助! (这仅在您的服务器与 UTF8 兼容但不使用 ehlo 应答时才有效)