使用Python和Gmail在同一线程中发送多封电子邮件

4

我有一个正在运行的程序。当程序得到结果时,它会使用以下函数向我发送电子邮件:

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个回答

9

这虽然是一个老问题,但我仍想回答它,因为有一种方法可以做到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、Inbox、Outlook、Yahoo等)中看到的。

1
这似乎不是关于发送电子邮件的问题,而是如何组织它们以便GMail能正确地将它们分组。请参见此页面以了解线程工作原理的描述。基本上,您需要在主题行开头包含“Re:”以使后续的电子邮件能够正确分组。由于您未显示生成消息的代码,因此我无法说明如何实现。

哦!好的。我删掉了原始函数的一部分,其中定义了一个名为“message”的变量:message = """\From: %s\nTo: %s\nSubject: %s\n\n%s """ % (FROM, ", ".join(TO), SUBJECT, TEXT)这是原始代码。我认为它是无用的。感谢您的帮助。我已经使用相同的主题进行了一些测试,它可以工作;-) - user1790813

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接