如何用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
相关产品推荐
相关产品推荐

