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

如何用Python简单发送邮件?求助smtplib库使用及报错解决

解决Python smtplib发送邮件失败的问题

1. Gmail SMTP登录的核心问题

当前Gmail已禁用普通账号密码的SMTP登录权限,必须完成以下两步才能正常登录:

  • 在Google账号设置中开启两步验证
  • 创建应用专用密码(用于第三方SMTP登录,替代普通密码)
    未完成上述操作的话,哪怕密码填写正确,也会登录失败。

2. 邮件格式不符合SMTP规范

你代码中sendmail的第三个参数仅为'Test',不符合邮件的标准格式,SMTP服务器大概率会拒绝发送。至少需要包含主题和正文的基础结构,比如:

Subject: 测试邮件

这是测试邮件的正文内容

3. 修正后的Gmail发送代码

import smtplib
from email.message import EmailMessage

sender = "你的Gmail邮箱@gmail.com"
password = "你的应用专用密码"  # 注意:此处填应用专用密码,不是普通账号密码
receiver = "收件人邮箱@xxx.com"

# 创建规范的邮件对象
msg = EmailMessage()
msg['From'] = sender
msg['To'] = receiver
msg['Subject'] = "测试邮件"
msg.set_content("这是测试邮件的正文内容")

try:
    # 连接Gmail的SMTP服务器
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()  # Gmail要求启用TLS加密
    server.login(sender, password)
    server.send_message(msg)  # send_message比sendmail更适配标准邮件对象
    print('邮件发送成功')
except Exception as e:
    print(f'发送失败:{str(e)}')
finally:
    server.quit()  # 确保关闭SMTP连接

4. 无加密邮件的发送方案

若确实不需要加密传输,需使用支持未加密SMTP(通常为25端口)的邮箱服务商(如自建邮件服务器、部分企业邮箱),示例代码如下:

import smtplib

sender = "你的邮箱@xxx.com"
password = "你的账号密码"
receiver = "收件人邮箱@xxx.com"

# 符合标准格式的邮件内容
email_content = """Subject: 无加密测试邮件

这是无加密发送的测试正文
"""

try:
    # 连接未加密的SMTP服务器,端口为25
    server = smtplib.SMTP('你的SMTP服务器地址', 25)
    server.login(sender, password)  # 若服务器允许匿名发送可省略此行
    server.sendmail(sender, receiver, email_content)
    print('邮件发送成功')
except Exception as e:
    print(f'发送失败:{str(e)}')
finally:
    server.quit()

5. smtplib基础用法梳理

  • 创建连接:smtplib.SMTP(服务器地址, 端口),常见端口:587(TLS加密)、465(SSL加密)、25(未加密)
  • 加密启动:server.starttls()用于启用TLS加密;若用SSL加密可直接用smtplib.SMTP_SSL(服务器地址, 465)
  • 登录验证:server.login(用户名, 密码),注意部分服务商需使用专用密码
  • 发送邮件:sendmail(发件人, 收件人, 邮件内容)适合简单文本;send_message(邮件对象)支持复杂格式(如HTML、附件)
  • 关闭连接:server.quit()确保连接正常释放

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:15:37