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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 11:54:33