- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试编写一个脚本,自动将符合特定条件的某些电子邮件转发到另一封电子邮件。
我已经使用 imaplib 和电子邮件下载和解析消息,但我不知道如何将整封电子邮件转发到另一个地址。我需要从头开始构建新消息,还是可以修改旧消息并重新发送?
这是我目前所拥有的(客户端是一个 imaplib.IMAP4 连接,id 是一个消息 ID):
import smtplib, imaplib
smtp = smtplib.SMTP(host, smtp_port)
smtp.login(user, passw)
client = imaplib.IMAP4(host)
client.login(user, passw)
client.select('INBOX')
status, data = client.fetch(id, '(RFC822)')
email_body = data[0][1]
mail = email.message_from_string(email_body)
# ...Process message...
# This doesn't work
forward = email.message.Message()
forward.set_payload(mail.get_payload())
forward['From'] = 'source.email.address@domain.com'
forward['To'] = 'my.email.address@gmail.com'
smtp.sendmail(user, ['my.email.address@gmail.com'], forward.as_string())
关于消息的 MIME 内容,我确信我需要做一些稍微复杂的事情。肯定有一些简单的方法可以转发整个消息吗?
# This doesn't work either, it just freezes...?
mail['From'] = 'source.email.address@domain.com'
mail['To'] = 'my.email.address@gmail.com'
smtp.sendmail(user, ['my.email.address@gmail.com'], mail.as_string())
最佳答案
我认为你错的部分是如何替换消息中的标题,事实上你不需要复制消息,你可以在从原始创建后直接对其进行操作您从 IMAP 服务器获取的数据。
您确实遗漏了一些细节,所以这是我的完整解决方案,详细说明了所有细节。请注意,我将 SMTP 连接置于 STARTTLS 模式,因为我需要它,并注意我已将 IMAP 阶段和 SMTP 阶段彼此分开。也许您认为更改邮件会以某种方式在 IMAP 服务器上更改它?如果你这样做了,这应该清楚地告诉你那不会发生。
import smtplib, imaplib, email
imap_host = "mail.example.com"
smtp_host = "mail.example.com"
smtp_port = 587
user = "xyz"
passwd = "xyz"
msgid = 7
from_addr = "from.me@example.com"
to_addr = "to.you@example.com"
# open IMAP connection and fetch message with id msgid
# store message data in email_data
client = imaplib.IMAP4(imap_host)
client.login(user, passwd)
client.select('INBOX')
status, 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)
# open authenticated SMTP connection and send message with
# specified envelope from and to addresses
smtp = smtplib.SMTP(smtp_host, smtp_port)
smtp.starttls()
smtp.login(user, passwd)
smtp.sendmail(from_addr, to_addr, message.as_string())
smtp.quit()
希望这能有所帮助,即使这个答案来得太晚了。
关于python - 使用 python smtplib 转发电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2717196/
我正在使用 smtplib 的非常基本(几乎完全是 from the docs )的用法。从 Bottle FormsDict 检索主题和消息使用 request.forms.get(),然后使用此代
最近我正在研究用于 python 的 smtplib smtp 客户端库,但我找不到任何对支持它的 smtp 服务器的 PIPELINING 协议(protocol)的引用。有什么我想念的吗?可能还没
我正在使用 smtplib 相当频繁地发送邮件。我使用自己的 SMTP 服务器作为中继。问题是每次发出连接时 smtplib.SMTP(...) 整个过程都会被阻塞。我是 python(v3) 的新手
我最近写了一个脚本,如果我想监控的网站使用 smtplib 发生了变化,它会向我发送一封电子邮件。该程序有效,我收到了电子邮件,但是当我查看已发送的电子邮件时(因为我正在从同一帐户向自己发送电子邮件)
我编写了一个守护进程来监视目录中的文件,并在任何文件发生更改时发送电子邮件。我使用 bb-freeze 将其编译为 Windows .exe。我注意到让它运行几天后,它占用的内存空间越来越多。 我用了
我正在试验电子邮件 python 脚本,想知道在编写基于 python 的电子邮件脚本时,与登录网页时通过 Internet 发送凭据相比,它是否更不安全?在下面的脚本中,user 和 pass 是否
我想通过代理发送电子邮件。 我目前的实现如下: 我通过身份验证连接到 smtp 服务器。成功登录后,我会发送一封电子邮件。它工作正常,但当我查看电子邮件标题时,我可以看到我的主机名。我想改为通过代理隧
我想使用 smtplib 使用 cron 作业每天发送一次状态邮件。 邮件发送效果很好,但是发送时间和日期似乎总是我阅读邮件时的时间和日期,而不是发送邮件时的时间和日期。这可能是 6 小时后。 我还没
我无法弄清楚为什么我的 python 代码无法在同一封电子邮件中附加 HTML 表格(第 2 部分)和普通句子(第 1 部分)。我尝试注释一行 message.attach(part2) ,反之亦然。
因之前不清楚而进行了编辑。 如果我在不处于 while 循环的情况下运行下面的代码,它会完美运行。一旦我将其放入 while 循环中(我需要将其作为较大脚本的一部分),它就会由于某种原因丢失邮件的主题
每当我尝试在 Python 解释器中导入 smtplib 时,都会收到此错误: ImportError: cannot import name fix_eols 我该如何解决这个问题? 编辑:这是完整
出于某种原因,当我尝试发送电子邮件时,当我传递字符串 msg 时,没有出现消息 这是我使用的代码: import smtplib server = smtplib.SMTP('smtp.gmail.c
我有一个激活邮件发送脚本如下。 #!/usr/bin/python __author__ = 'Amyth Arora (***@gmail.com)' import smtplib import s
我有一个通过邮件服务器发送电子邮件的脚本。该脚本仅在我首先在交互式窗口中调用 import smtplib 时才有效。否则,我会收到以下错误: ImportError: No module named
我想从 python 脚本发送电子邮件。但是,当我尝试运行 server.login 时,我收到以下错误:smtplib.SMTPAuthenticationError: (535, '5.7.0 (
因此,在 Python 解释器中,我这样做(并且只这样做): >>> import smtplib >>> s=smtplib.SMTP("localhost") 这就是我得到的: Traceback
我试图构建一个可以通过 Gmail 发送电子邮件的 python 脚本。 当我尝试连接到 Gmail 服务器时,出现错误 Errno 10013。 这就是我想要做的: gmail_message =
我有以下工作代码可以从 GMail 帐户发送邮件: mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) mailServer.ehlo() mailSe
html = html_table + html_table1 import smtplib from email.mime.multipart import MIMEMultipart from e
我正在尝试将带有缩进格式的词典列表发送到我的电子邮件。目前,这是我根据我的代码收到的电子邮件: [{ 'post_id': '3524', 'text': '🥕\n.
我是一名优秀的程序员,十分优秀!