使用Python和Gmail在同一线程中发送多封邮件
我有一个正在运行的程序。当这个程序得到结果时,它会用这个函数给我发邮件:
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
这个问题虽然很老,但我觉得有必要回答一下,因为其实有办法可以实现提问者想要的效果。你可以通过给你的邮件添加一些头部信息来做到这一点,然后在发送另一封邮件时引用这些信息。例如:
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: ”。因为你没有展示生成邮件的代码,所以我无法告诉你该怎么做。