收到一封空白电子邮件
getting a blank email
我已经快速编写了下面的代码来将数据发送到 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)
但这也发送了没有主题的空白电子邮件。我做错了什么?
我认为是留言:你应该留言
text = loaded_r.as_string()
然后就可以发送邮件了。
server.sendmail("error-report@do_not_reply.com", to, text)
您作为第三个参数传递给 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
,因为它处理了在调用 sendmail
.
之前再次将 email.Message
对象转换为字符串对象的次要细节。
不清楚您希望正文是显示字符串 body
内容的文本部分,还是包含 body
和 JSON 的 JSON 附件,或者两者兼而有之。
如果你只需要一个正文部分,显然没有必要将消息分成多个部分。如果你想要多个部分,那么每个部分都应该是一个单独的 MIMEText
或一些其他 MIME 容器类型,你可以 msg.attach()
到顶级 MIMEMultipart
.
我已经快速编写了下面的代码来将数据发送到 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)
但这也发送了没有主题的空白电子邮件。我做错了什么?
我认为是留言:你应该留言
text = loaded_r.as_string()
然后就可以发送邮件了。
server.sendmail("error-report@do_not_reply.com", to, text)
您作为第三个参数传递给 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
,因为它处理了在调用 sendmail
.
email.Message
对象转换为字符串对象的次要细节。
不清楚您希望正文是显示字符串 body
内容的文本部分,还是包含 body
和 JSON 的 JSON 附件,或者两者兼而有之。
如果你只需要一个正文部分,显然没有必要将消息分成多个部分。如果你想要多个部分,那么每个部分都应该是一个单独的 MIMEText
或一些其他 MIME 容器类型,你可以 msg.attach()
到顶级 MIMEMultipart
.