Python Smptlib电子邮件(错误的主题和消息字段)

时间:2016-07-23 13:15:06

标签: python email smtplib

每当我发送一封包含此功能的电子邮件时,它都不会将主题和消息添加到正确的字段中,而是将其添加到“from:”或其他内容中。 Here's the image of it. 知道如何解决这个问题吗?谢谢你的回答

import smtplib

## NON-ANONYMOUS EMAIL
def email():
    # Parts of an email
    SERVER = 'smtp.gmail.com'
    PORT = 587
    USER = 'something@gmail.com'
    PASS = 'something'
    FROM = USER
    TO = ['something@riseup.net']
    #SUBJECT = 'Test'
    MESSAGE = 'Test message.'

    # Connects all parts of email together
    message = "From: %s\r\n To: %s\r\n %s" % (FROM, ", ".join(TO), MESSAGE)

    # Sends an email
    email = smtplib.SMTP()
    email.connect(SERVER,PORT)
    email.starttls()
    email.login(USER,PASS)
    email.sendmail(FROM, TO, message)
    email.quit()

email()

2 个答案:

答案 0 :(得分:1)

\r\n之后你不能有空格。通过缩进来继续使用电子邮件标题行,因此您的代码会创建一个非常长的From:标题,其中包含您尝试放入不同字段的所有数据。

无论如何,手动粘贴纯文本片段是构建电子邮件消息的一种非常粗糙且容易出错的方式。您很快就会发现无论如何都需要Python email模块的各种功能(旧邮件只是7位单一部分ASCII;您可能需要一个或多个附件,内容编码,字符集支持,多部分消息或许多其他MIME功能之一)。这也巧合地提供了更好的文档,以便如何纠正创建一个简单的电子邮件消息。

答案 1 :(得分:0)

继@tripleee建议使用email模块后,这是使用当前代码的基本示例:

import smtplib
from email.mime.text import MIMEText

## NON-ANONYMOUS EMAIL
def email():
    # Parts of an email
    SERVER = 'smtp.gmail.com'
    PORT = 587
    USER = 'something@gmail.com'
    PASS = 'something'
    FROM = USER
    TO = ['something@riseup.net']
    SUBJECT = 'Test'

    # Create the email
    message = MIMEText('Test message.')
    message['From'] = FROM
    message['To'] = ",".join(TO)
    message['Subject'] = SUBJECT

    # Sends an email
    email = smtplib.SMTP()
    email.connect(SERVER,PORT)
    email.starttls()
    email.login(USER,PASS)
    email.sendmail(FROM, TO, message.as_string())
    email.quit()

请注意,使用(例如message['Subject'])来定义电子邮件的各个部分要容易得多,而不是尝试构建字符串或“将部分粘合在一起”作为三元组放置。< / p>

您可以访问的不同字段(From,To,Subject等)在RFC 2822 - Internet Message Format中定义。

这些文档不易阅读,因此以下是您可以使用的某些字段键的列表:ToFromCcBccReply-ToSenderSubject

  

\ r \ n后面不能有空格。通过缩进来继续电子邮件标题行,因此您的代码正在创建一个非常长的From:标题,其中包含您尝试放入不同字段的所有数据。

正如triplee和RFC-2822文档所说,如果您想手动构建电子邮件字符串,请查看该文档中与此示例类似的字段定义:

  

from =“From:”mailbox-list CRLF

在构建如下所示的电子邮件字符串时,您可以将其转换为Python代码:

"From: something@riseup.net \r\n"