2017-02-22 13 views
0

Я использую smtplip python для отправки emials. Все работает отлично, за исключением случаев, когда я использую символ не-ASCI в сообщении из адреса.Python SMTP lib требуется SMTPUTF8 для символов, отличных от 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"), 

Bud, когда я стараюсь использовать не-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-отображаемого имени это не должно быть необходимо.

ответ

0

Я предполагаю, что вы попытались использовать smtplib.send_message. Похоже, он слишком умен и хочет контролировать, правильно ли сервер будет обрабатывать utf8, даже если в вашем случае использовать его не нужно.

Вы просто должны вернуться к старому доброму smtplib.sendmail:

serv = smtplib.SMTP(mailhost) 
serv.sendmail(msg['From'], msg['To'], msg.as_string()) 
+0

Вы абсолютно правы. Большое спасибо. –

1

Если вы хотите использовать send_message вы можете обойти thoses неприятные проверки utf8, передавая от адреса в send_message функции.

with smtplib.SMTP('localhost') as s: 
    s.send_message(msg,'[email protected]') 
0

Я обманул send_message библиотеку первым посылая «EHLO()», затем модифицировали функции вручную:

s = smtplib.SMTP(server) 
s.ehlo() 
s.esmtp_features["smtputf8"] = "" 
s.send_message(msg) 

Я также изменил политику сообщения, как у меня были другие вопросы:

msg = MIMEMultipart(policy=SMTPUTF8) 

Надеюсь, это поможет! (Это будет работать, только если ваш сервер совместим с UTF8, но не отвечает на него с помощью ehlo)

Смежные вопросы