收到一封空白电子邮件

时间:2019-03-09 13:00:04

标签: python email smtplib

我已经快速编写了以下代码,以将数据发送到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),但是也发送了没有主题的空白电子邮件。我在做什么错了?

2 个答案:

答案 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)