我已经快速编写了以下代码,以将数据发送到REST远程服务器进行调试,但是我收到的是空白电子邮件。现在确定出了什么问题。在终端机体中,字典文本或json转换文本正在打印,但在电子邮件中却什么也没得到。
# For testing
def sendMail(usr, pwd, to, body):
""" just for testing to send error via email
"""
fromaddr = usr
toaddr = to
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Data add request"
try:
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login(usr, pwd)
msg.attach(body)
r = json.dumps(body)
loaded_r = json.loads(r)
print "json: ", str(loaded_r)
server.sendmail("error-report@do_not_reply.com", to, str(loaded_r))
except Exception, err:
print 'Error sending email: ', err
finally:
server.quit()
我尝试发送server.sendmail("error-report@do_not_reply.com", to, body)
,但是也发送了没有主题的空白电子邮件。我在做什么错了?
答案 0 :(得分:1)
您作为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
的内容的文本部分,还是包含body
作为JSON的JSON附件,或者也许两者都是。
如果只需要一个身体部位,则将消息分为多个部分显然是不必要的。如果需要多个部分,则每个部分都应该是单独的MIMEText
或其他一些MIME容器类型,您可以msg.attach()
到顶级MIMEMultipart
。
答案 1 :(得分:-1)
我认为这是消息:您应该输入消息
text = loaded_r.as_string()
然后您可以发送邮件。
server.sendmail("error-report@do_not_reply.com", to, text)