收到一封空白电子邮件

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.