2015-12-24 4 views
0

В Python я пытаюсь отправить сообщение через SMTPlib. Однако сообщение всегда отправляет все сообщение в заголовок from, и я не знаю, как его исправить. Раньше это не делалось, но теперь это всегда делается. Вот мой код:Python SMTPlib: отправка сообщения из заголовка

import smtplib 
from email.MIMEMultipart import MIMEMultipart 
from email.MIMEText import MIMEText 

def verify(email, verify_url): 
    msg = MIMEMultipart() 
    msg['From'] = '[email protected]\n' 
    msg['To'] = email + '\n' 
    msg['Subject'] = 'PyHub verification' + '\n' 
    body = """ Someone sent a PyHub verification email to this address! Here is the link: 
    www.xxxx.co/verify/{1} 
    Not you? Ignore this email. 
    """.format(email, verify_url) 
    msg.attach(MIMEText(body, 'plain')) 
    server = smtplib.SMTP('smtp.gmail.com', 587) 
    server.starttls() 
    server.login('[email protected]', 'xxxxxx') 
    print msg.as_string() 
    server.sendmail(msg['From'], [email], body) 
    server.close() 

Есть ли что-то не так с этим, и есть ли способ исправить его?

ответ

0

Эта линия является вопрос:

server.sendmail(msg['From'], [email], body) 

Вы можете это исправить с:

server.sendmail(msg['From'], [email], msg.as_string()) 

Вы посылали в body вместо всего сообщения; протокол SMTP ожидает, что сообщение начнется с заголовков ... следовательно, вы видите body, где должны быть заголовки.

Вам также необходимо удалить символы новой строки. За rfc2822 линейные кормлению символы нежелательны в одиночку:

Сообщение состоит из полей заголовка (в совокупности называемых «заголовок сообщения»), а затем, при необходимости, с помощью тела. Заголовок представляет собой последовательность строк символов со специальным синтаксисом, как определено в . Этот стандарт представляет собой последовательность строк . Тело представляет собой просто последовательность символов, которые следует за заголовком и отделен от заголовка пустой строкой (то есть, строка с ничем, предшествующим CRLF).

Пожалуйста, попробуйте следующее:

msg = MIMEMultipart() 
email = '[email protected]' 
verify_url = 'http://verify.example.com' 
msg['From'] = '[email protected]' 
msg['To'] = email 
msg['Subject'] = 'PyHub verification' 
body = """ Someone sent a PyHub verification email to this address! Here is the link: 
www.xxxx.co/verify/{1} 
Not you? Ignore this email. 
""".format(email, verify_url) 
msg.attach(MIMEText(body, 'plain')) 
print msg.as_string() 
+0

Даже когда я отправить его с 'msg.as_string()' вместо 'body' было бы получить те же результаты. –

+0

также необходимо удалить символы '\ n'. – dnozay

+0

Это тоже не помогает. –

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