我使用python的smtplip发送emials。除非我在地址消息中使用非ASCI字符,否则一切正常工作。
我正在使用python 3.5。
即使使用非ASCI To和Subject:
,这也能正常工作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显示名称引起的不应该是necesery。
答案 0 :(得分:2)
如果你想使用send_message,你仍然可以通过将from地址传递给send_message函数来绕过讨厌的utf8检查。
with smtplib.SMTP('localhost') as s:
s.send_message(msg,'foo.bar@example.cz')
答案 1 :(得分:0)
我假设您尝试使用smtplib.send_message
。看起来它太聪明了,想要控制服务器是否能正确处理utf8,即使在用例中也没有必要。
你只需要恢复到好的smtplib.sendmail
:
serv = smtplib.SMTP(mailhost)
serv.sendmail(msg['From'], msg['To'], msg.as_string())
答案 2 :(得分:0)
我首先发送了一个' ehlo()'来欺骗send_message库,然后手动修改了这些功能:
s = smtplib.SMTP(server)
s.ehlo()
s.esmtp_features["smtputf8"] = ""
s.send_message(msg)
我还更改了邮件政策,因为我遇到了其他问题:
msg = MIMEMultipart(policy=SMTPUTF8)
希望这有帮助! (仅当您的服务器与UTF8兼容但未通过ehlo回答时才会起作用)