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

基于IMAP未读邮件对象,用SMTP库回复邮件的Reply_To错误排查

问题分析与解决方案

错误原因

你遇到的SMTPRecipientsRefused错误,核心原因是:

  • Reply-To不是SMTP发送的目标收件人字段:这个字段仅用于告知收件人「回复时应发往的地址」,但SMTP发送邮件时,必须通过To字段明确指定发送目标,否则服务器无法确定邮件接收方。
  • 错误日志里的{'None': ...}说明你的self.Reply_To值为None,或者注释掉To字段后,未提供有效收件人地址。

另外,你之前取消注释To字段能发送但不是回复形式,是因为self.To并非原邮件的回复地址,相当于发送了一封新邮件,而非针对原邮件的回复。

修正步骤

1. 正确获取原邮件的回复地址

从IMAP获取的原邮件对象中,优先提取Reply-To字段,若没有则用From字段作为回复目标,同时处理带名称的邮箱格式(比如Flipkart <support@flipkart.com>):

import email.utils

# 假设original_msg是你从IMAP拿到的原邮件对象
raw_reply_addr = original_msg.get('Reply-To', original_msg.get('From'))
# 解析邮箱地址,分离名称和纯邮箱
_, valid_addr = email.utils.parseaddr(raw_reply_addr)
# 确保地址有效
if not valid_addr:
    raise ValueError("无法从原邮件中获取有效回复地址")
self.Reply_To = valid_addr

2. 修改回复邮件的代码逻辑

回复邮件时,To字段必须设置为原邮件的回复地址,Reply-To是可选字段(仅用于设置你希望对方回复你时使用的地址,非必须):

def SendReply(self):
    # 发件人
    self.msg["From"] = self.From
    # 核心:To字段设置为原邮件的回复地址(SMTP发送的目标)
    self.msg["To"] = self.Reply_To
    # 可选:设置你希望对方回复到的地址(若与发件人不同)
    # self.msg["Reply-To"] = "your-alternative-email@example.com"
    # 回复主题规范:添加Re:前缀
    self.msg["Subject"] = f"Re: {self.Subject}"
    self.Body = str(self.Body)
    self.msg.set_content(self.Body)

    if self.Attachments is not None:
        with open(self.Attachments, "rb") as f:
            file_data = f.read()
            self.msg.add_attachment(
                file_data,
                maintype="application",
                subtype="xlsx",
                filename=self.Attachments,
            )

    with smtplib.SMTP("smtp.gmail.com", 587) as smtp:
        smtp.starttls()
        smtp.login(self.From, self.EmailPassword)
        smtp.send_message(self.msg)
    return ("Mail sent Successfully", True)

关键注意点

  • 永远不要依赖Reply-To作为SMTP的发送目标,必须显式设置To字段为收件人地址。
  • 一定要校验self.Reply_To的值不为空,避免再次出现收件人无效的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:18:35