如何使用Python转发电子邮件

时间:2011-12-17 01:56:04

标签: python smtp gmail forward gmail-imap

首先,请允许我说,我已经知道Forwarding an email with python smtplib已经问过这个问题。

我发布与该问题密切相关的事情的原因是我尝试使用这个问题的答案,我尝试过改变一些事情,我已经搜索过谷歌并且坚持不懈地对此进行了大约5个小时的讨论,并且我愿意花更多的时间在这个

- 我只是觉得你们中的一个人可能会得到答案:)

我的问题如下,我试图将一封电子邮件从我的Gmail转发到另一个Gmail,并且尽可能多地运行python脚本来尝试这个简单的任务,我仍然无法弄明白。

以下是我正在运行的代码(这是我在其他表单中发布的修改版本):

import smtplib, imaplib, email, string

imap_host = "imap.gmail.com"
imap_port = 993
smtp_host = "smtp.gmail.com"
smtp_port = 587
user = "John.Michael.Dorian.4"
passwd = "mypassword"
msgid = 1
from_addr = "John.Michael.Dorian.4@gmail.com"
to_addr = "myotheremail@gmail.com"


# open IMAP connection and fetch message with id msgid
# store message data in email_data
client = imaplib.IMAP4_SSL(imap_host, imap_port)
client.login(user, passwd)
client.select()
typ, data = client.search(None, 'ALL')
for mail in data[0].split():
    typ, data = client.fetch(msgid, "(RFC822)")
    email_data = data[0][1]
client.close()
client.logout()


# create a Message instance from the email data
message = email.message_from_string(email_data)

# replace headers (could do other processing here)
message.replace_header("From", from_addr)
message.replace_header("To", to_addr)
print message.as_string()

# open authenticated SMTP connection and send message with
# specified envelope from and to addresses
smtp = smtplib.SMTP(smtp_host, smtp_port)
smtp.set_debuglevel(1)
smtp.ehlo()
smtp.starttls()
smtp.ehlo()
smtp.login(user, passwd)
smtp.sendmail(from_addr, to_addr, message.as_string()) 
smtp.quit()

来自SMTP调试的返回表示一切正常,我知道它正在发送,因为我尝试更换

  

smtp.sendmail(from_addr,to_addr,message.as_string())

使用

  

smtp.sendmail(from_addr,to_addr,'test')

它工作正常。它打印message.as_string()很好,我不知道如何让它转发电子邮件!

它不必与SMTP或IMAP或任何此代码(虽然它会很好),但我真的想弄清楚如何做到这一点。

我知道这是可能的,因为我昨天设法做到了,我正在处理的计算机(当然是运行Windows)崩溃了,文件也没了。

对于那些想知道我为什么不设置谷歌自动转发所有内容的人,这是因为我想要一个最终会移动大量邮件的脚本。

谢谢大家!

1 个答案:

答案 0 :(得分:0)

原始电子邮件的Received:标头很可能导致gmail丢弃该邮件。在转发之前尝试删除所有这些。

如果没有解决问题,请打印标题并对其进行编码,以删除新编写的消息中通常不存在的所有标题。

然而,为什么要这样前进?从一个IMAP帐户中提取并直接将其推送到另一个IMAP帐户会更容易。

实际上,您可以使用Mozilla Thunderbird添加两个帐户,只需将邮件从一个拖放到另一个。