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

Python smtplib发送邮件遇SMTPRecipientsRefused错误求助

解决SMTPRecipientsRefused: 5.1.3 Bad recipient address syntax错误

问题分析

你遇到的501 Bad recipient address syntax错误,核心是邮件服务器无法识别传入的组邮箱地址格式,结合代码来看,主要有几处需要修正的点:

修正步骤

1. 使用标准邮件头字段名

代码里用了自定义的emailFrom和emailTo作为邮件头键名,但SMTP协议要求的标准字段是From和To,这会导致服务器无法正确解析收件人信息。修改代码中的这两行:

msg['From'] = 'noreply@test.com'
msg['To'] = '-this-is-a-test@exch.test.com'

2. 确认组邮箱地址的合法性

组邮箱地址以-开头可能不符合Exchange服务器的地址规则,先确认这个组邮箱的实际有效地址是否正确——比如是否应该去掉开头的连字符,改为this-is-a-test@exch.test.com。如果不确定,可以联系企业邮件管理员核实。

3. 规范sendmail调用格式

smtplib.SMTP.sendmail的收件人参数建议传入列表格式(即使只有一个收件人),这更符合SMTP协议的规范,避免潜在的解析问题:

s.sendmail(msg['From'], [msg['To']], msg.as_string())

修改后的完整代码

def sendEmail_htmlTable(self, subject, message):
    msg = MIMEMultipart('alternative')
    msg['Subject'] = subject
    msg['From'] = 'noreply@test.com'
    msg['To'] = '-this-is-a-test@exch.test.com'  # 确认此地址是否正确
    
    text = "Hi!\nError."
    html = """\
    <html>
      <p>Hello,</br>
      <p>testing table.</br>
      {0}
    </html>
    """.format(message)
    
    part1 = MIMEText(text, 'plain')
    part2 = MIMEText(html, 'html')
    
    msg.attach(part1)
    msg.attach(part2)

    s = smtplib.SMTP('localhost')
    s.sendmail(msg['From'], [msg['To']], msg.as_string())
    print("Email sent")
    s.quit()

额外排查点

如果修改后仍然报错,需要确认:

  • 你的localhost SMTP服务是否有权限发送邮件到该组邮箱
  • 组邮箱是否设置了接收限制(比如仅允许特定发件人发送)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:35:04