Отступая от кода в функции (что нормально), вы также сделали отступ строки необработанного сообщения.Но начальный пробел подразумевает свертывание (конкатенацию) строк заголовка, как описано в разделах 2.2.3 и 3.2.3 RFC 2822 - Формат интернет-сообщения :
Каждый заголовокЛогически поле представляет собой одну строку символов, содержащую имя поля, двоеточие и тело поля.Для удобства, однако, и для того, чтобы справиться с ограничениями в 998/78 символов на строку, часть тела поля поля заголовка может быть разбита на многострочное представление;это называется «сворачивание».
В форме функции вашего вызова sendmail
все строки начинаются с пробела и поэтому «развернуты» (объединены), и вы пытаетесь отправить
From: monty@python.com To: jon@mycompany.com Subject: Hello! This message was sent with Python's smtplib.
Кроме того, что предполагает наш ум, smtplib
больше не будет понимать заголовки To:
и Subject:
, потому что эти имена распознаются только в начале строки.Вместо этого smtplib
примет очень длинный адрес электронной почты отправителя:
monty@python.com To: jon@mycompany.com Subject: Hello! This message was sent with Python's smtplib.
Это не сработает, и поэтому ваше исключение.
Решение простое: просто сохраните message
Строка, как это было раньше.Это может быть сделано с помощью функции (как предложил Zeeshan) или сразу в исходном коде:
import smtplib
def sendMail(FROM,TO,SUBJECT,TEXT,SERVER):
"""this is some test documentation in the function"""
message = """\
From: %s
To: %s
Subject: %s
%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
# Send the mail
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
Теперь развертывание не происходит, и вы отправляете
From: monty@python.com
To: jon@mycompany.com
Subject: Hello!
This message was sent with Python's smtplib.
, вот чтоработает и что было сделано вашим старым кодом.
Обратите внимание, что я также сохранял пустую строку между заголовками и телом для размещения раздела 3.5 RFC (который требуется) и поместилвключить вне функции в соответствии с руководством по стилю Python PEP-0008 (что необязательно).