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()
额外排查点
如果修改后仍然报错,需要确认:
- 你的
localhostSMTP服务是否有权限发送邮件到该组邮箱 - 组邮箱是否设置了接收限制(比如仅允许特定发件人发送)
内容的提问来源于stack exchange,提问作者Charp001
相关产品推荐
相关产品推荐

