Сообщение, которое вы передаете в качестве третьего аргумента sendmail
, должно быть правильным, правильно отформатированным сообщением RFC822. Файл JSON по определению не является действительным сообщением электронной почты.
def sendMail(usr, pwd, to, body):
msg = MIMEText(body)
msg['From'] = usr
msg['To'] = to
msg['Subject'] = "Data add request"
try:
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login(usr, pwd)
server.send_message("error-report@do_not_reply.com", [to], msg)
except Exception, err:
print 'Error sending email: ', err
finally:
server.quit()
Я переключился на send_message
здесь, потому что он позаботился о незначительной мирской детали преобразования объекта email.Message
в строковый объект перед вызовом sendmail
.
Неясно, ожидаете ли вы, что тело будет текстовой частью, отображающей содержимое строки body
, или вложение JSON, содержащее body
в качестве JSON, или, возможно, оба.
Если вам нужна только одна часть тела, создание сообщения из нескольких частей, очевидно, не нужно. Если вам нужно несколько частей, то каждая из них должна быть отдельным MIMEText
или каким-либо другим типом контейнера MIME, который вы можете msg.attach()
до верхнего уровня MIMEMultipart
.