Python发送邮件时出现SMTPDataError(550)错误的解决方法咨询
Python发送邮件时出现SMTPDataError(550)错误的解决方法咨询
嘿,我来帮你排查这个550错误的问题!这类错误通常是Gmail这类邮件服务商拒绝了你的投递请求,原因有好几种,咱们一步步来分析解决:
1. 检查Gmail的安全设置(最常见原因)
Gmail现在默认不允许普通密码直接用于脚本登录,你需要开启两步验证,然后生成一个应用专用密码来替换代码里的密码:
- 先登录你的Gmail账号,在账号安全设置里找到并开启两步验证;
- 生成应用专用密码时,选择“邮件”作为应用类型,“其他(自定义名称)”作为设备,生成后把这个密码放到你的环境变量
News_Pass里,测试阶段也可以直接替换代码中的密码(正式环境千万别硬写密码哦)。
2. 确保邮件内容格式符合要求
SMTP服务器对邮件格式有严格要求,你的msg必须包含必要的邮件头(From、To、Subject),否则会被直接拒绝。比如正确的邮件内容应该是这样的:
msg = """From: pradeepacharya626@gmail.com To: pradeepacharya626@gmail.com Subject: 测试邮件 这是邮件的正文内容 """
如果你的msg缺少这些头信息,Gmail大概率会返回550错误。
3. 验证账号和环境变量
- 先确认你的发件人、收件人邮箱地址没有拼写错误;
- 检查
os.getenv("News_Pass")是否真的获取到了正确的密码,可以临时加一行print(os.getenv("News_Pass"))来验证(测试完记得删掉这行,别泄露密码)。
4. 排查IP或发送频率问题
如果你的IP地址被Gmail标记为可疑(比如短时间内频繁发送邮件),也会触发550错误。这种情况可以尝试换个网络环境,或者暂停一段时间再测试。
给你一个修改后的完整测试代码参考:
import os import smtplib, ssl def send_mail(msg): host = "smtp.gmail.com" port = 465 user_mail = "pradeepacharya626@gmail.com" password = os.getenv("News_Pass") # 这里替换成应用专用密码 receiver = "pradeepacharya626@gmail.com" context = ssl.create_default_context() with smtplib.SMTP_SSL(host=host, port=port, context=context) as server: server.login(user_mail, password) server.sendmail(user_mail, receiver, msg) # 符合格式的测试邮件内容 test_msg = """From: pradeepacharya626@gmail.com To: pradeepacharya626@gmail.com Subject: Python发送测试邮件 这是通过Python脚本发送的测试邮件,看看能不能成功~ """ send_mail(test_msg)
备注:内容来源于stack exchange,提问作者Pradeep Acharya
相关产品推荐
相关产品推荐

