使用python和gmail在同一个线程中发送多个电子邮件

时间:2014-03-03 12:10:26

标签: python email

我正在运行一个程序。当该程序获得结果时,它会使用此功能向我发送电子邮件:

def send_email(message):

    import smtplib

    gmail_user = OMITTED
    gmail_pwd = OMITTED
    FROM = OMITTED
    TO = OMITTED #must be a list

    try:
        #server = smtplib.SMTP(SERVER) 
        server = smtplib.SMTP("smtp.gmail.com", 587) #or port 465 doesn't seem to work!
        server.ehlo()
        server.starttls()
        server.login(gmail_user, gmail_pwd)
        server.sendmail(FROM, TO, message)
        #server.quit()
        server.close()
        print 'successfully sent the mail'
    except:
        print "failed to send mail"  

免责声明:我在Stack Overflow上找到了这个代码。这不是我的。我删掉了它的一些部分,因为它们似乎没有什么特别的意义。

有时我的代码会获得很多结果,而且我会在不到20秒的时间内收到150多封不同的电子邮件。

如何修改上述功能,以便程序将所有结果发送给同一个帖子?

如果您没有得到我的想法,我希望我的收件箱看起来像这样:

sender@gmail.com(150) ...  
... (other emails from other senders)  

而不是:

sender@gmail.com ...  
sender@gmail.com ...  
sender@gmail.com ...  
sender@gmail.com ...  
sender@gmail.com ...  
...  
sender@gmail.com ...  
... (other emails from other senders)

修改

要解决这个问题,我需要做的就是重新插入我之前删除的代码部分。完整的功能就是这个:

def send_email(TEXT):

    import smtplib

    gmail_user = OMITTED
    gmail_pwd = OMITTED
    FROM = OMITTED
    TO = OMITTED #must be a list
    SUBJECT = "Big brother candidate"
    #TEXT = "Testing sending mail using gmail servers"

    # Prepare actual message
    message = """\From: %s\nTo: %s\nSubject: %s\n\n%s
    """ % (FROM, ", ".join(TO), SUBJECT, TEXT)

    try:
        #server = smtplib.SMTP(SERVER) 
        server = smtplib.SMTP("smtp.gmail.com", 587) #or port 465 doesn't seem to work!
        server.ehlo()
        server.starttls()
        server.login(gmail_user, gmail_pwd)
        server.sendmail(FROM, TO, message)
        #server.quit()
        server.close()
        print 'successfully sent the mail'
    except:
        print "failed to send mail"  

2 个答案:

答案 0 :(得分:5)

这是一个老问题,但我觉得有必要回答它,因为有办法做OP想要的。 您可以通过向邮件添加标题来实现,并在发送其他电子邮件时引用它们。例如

from email.utils import make_msgid

my_id = make_msgid()

#Build your email as you normally do, and add ID as a message header
message = MIMEMultipart()
message["Message-ID"]  = my_id 
message["Subject"] = "test"
message["From"] = from_email 
# ...etc and send your email using smtp.sendmail

# On the reply (or when sending another email), add the following headers
message["In-Reply-To"] = my_id
message["References"] = my_id

# ...send your email using smtp.sendmail

当您检查邮件客户端时,您会看到后一封电子邮件将作为对以前电子邮件的回复发布,从而创建您通常在热门电子邮件客户端(Gmail,收件箱,Outlook,Yahoo等)中看到的帖子。)

答案 1 :(得分:1)

这似乎不是关于发送电子邮件的问题,而是如何将它们组织到GMail将正确地解决它们。

有关线程如何工作的说明,请参阅this page。基本上你需要后续的电子邮件在主题行的开头包含“Re:”。由于您没有显示生成消息的代码,因此我无法说明您是如何做到这一点的。