You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过exchangelib创建包含mime_content的邮件回复?

如何用exchangelib创建带mime_content属性的邮件回复?

我使用exchangelib包连接EWS Exchange服务器,通过以下代码创建邮件回复:

msg = acc.inbox.all().order_by('-datetime_received')[-1]
msg.reply_all("Re: Subject", "body of email")

但通过此方式创建的回复不具备mime_content属性,而我需要该属性来将邮件保存为.eml或.msg格式。原邮件对应的msg变量是包含mime_content属性的,请问是否有办法创建带有mime_content的邮件回复?


解决方案

方法1:发送后重新获取完整回复邮件

reply_all()方法返回的对象仅包含基础属性,不会自动携带mime_content。你可以先发送回复,再通过原邮件的conversation_id从已发送文件夹中查询对应的回复邮件,这样就能拿到包含完整属性的对象:

import time

# 获取最新收件邮件
original_msg = acc.inbox.all().order_by('-datetime_received')[-1]
# 发送回复
original_msg.reply_all("Re: Subject", "body of email")
# 短暂等待Exchange同步(可选,视服务器情况调整)
time.sleep(1)
# 从已发送文件夹中查询同会话的最新回复
sent_reply = acc.sent.filter(conversation_id=original_msg.conversation_id).order_by('-datetime_sent')[0]
# 保存为eml文件
with open('reply.eml', 'wb') as f:
    f.write(sent_reply.mime_content)

方法2:手动构建MIME回复再发送

如果不想依赖后续查询,也可以基于原邮件的MIME内容手动构建回复,再通过exchangelib发送,同时直接拿到MIME内容用于保存:

import email
from email.mime.text import MIMEText
from exchangelib import Message, Mailbox

original_msg = acc.inbox.all().order_by('-datetime_received')[-1]
# 解析原邮件的MIME内容
original_mime = email.message_from_bytes(original_msg.mime_content)

# 构建回复的MIME结构
reply_mime = MIMEText("body of email", 'plain')
reply_mime['Subject'] = f"Re: {original_mime['Subject']}"
reply_mime['From'] = str(acc.me)
# 优先用原邮件的Reply-To,没有则用发件人
reply_mime['To'] = original_mime.get('Reply-To', original_mime['From'])
reply_mime['In-Reply-To'] = original_mime['Message-ID']
reply_mime['References'] = original_mime['Message-ID']

# 转换为bytes格式
reply_mime_bytes = reply_mime.as_bytes()

# 创建并发送邮件
reply_msg = Message(
    account=acc,
    subject=reply_mime['Subject'],
    body=reply_mime.get_payload(),
    to_recipients=[Mailbox(email_address=addr.strip()) for addr in reply_mime['To'].split(',')]
)
reply_msg.send()

# 直接保存为eml文件
with open('manual_reply.eml', 'wb') as f:
    f.write(reply_mime_bytes)

注意事项

  • 方法1中,Exchange服务器同步已发送邮件可能有延迟,必要时可增加等待时间或循环查询直到找到目标邮件。
  • 方法2需要处理复杂收件人格式(比如带姓名的邮箱),可根据实际情况调整解析逻辑。

内容的提问来源于stack exchange,提问作者exik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:45:27