Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python和gmail在同一线程中发送多封电子邮件_Python_Email - Fatal编程技术网

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

使用python和gmail在同一线程中发送多封电子邮件,python,email,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

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

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"  
免责声明:我在堆栈溢出的某个地方找到了这段代码。它不是我的。我删掉了其中的一些部分,因为它们似乎没有什么特别的意义

有时我的代码会得到很多结果,在不到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"  

这似乎不是一个关于发送电子邮件的问题,而是如何将它们组织到GMail将正确处理它们


有关线程如何工作的说明,请参见。基本上,你需要在随后的邮件中在主题行的开头加上“Re:”。因为您没有显示生成消息的代码,所以我无法说明您可能如何做到这一点。

这是一个老问题,但我觉得必须回答它,因为有一种方法可以实现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等)中看到的线程。

哦!好啊我删除了将变量“message”定义为message=“”\From:%s\nTo:%s\n对象:%s\n\n%s”““%”的原始函数的一部分(From、“,”。join(TO)、SUBJECT、TEXT)。这是原始代码。我觉得没用。谢谢你的帮助。我已经用同一个主题做了一些测试,它成功了;-)