Python发邮件遇到535错误?手把手教你用163邮箱SMTP服务搞定认证问题

发布时间:2026/6/27 13:03:25

Python发邮件遇到535错误?手把手教你用163邮箱SMTP服务搞定认证问题 Python发邮件遇到535错误手把手教你用163邮箱SMTP服务搞定认证问题最近在用Python写自动化脚本时需要实现邮件通知功能。本以为调用SMTP服务发送邮件是个简单的任务结果却遇到了令人头疼的535认证错误。经过一番折腾和排查终于搞清楚了问题所在——原来163邮箱的SMTP服务认证机制与常规密码认证有所不同。本文将分享我的踩坑经历和完整解决方案帮助遇到同样问题的开发者快速定位和解决问题。1. 理解535错误为什么你的认证失败了当你在Python中使用smtplib库连接163邮箱SMTP服务器时如果收到SMTPAuthenticationError: (535, Error: authentication failed)这样的错误提示说明服务器拒绝了你的登录请求。这个错误看似简单但背后可能有多种原因直接使用邮箱密码进行认证这是最常见的错误原因。163邮箱的SMTP服务不再支持直接用邮箱密码登录而是要求使用专门的客户端授权码。授权码配置错误即使生成了授权码如果复制粘贴时出错也会导致认证失败。SMTP服务未开启在邮箱设置中POP3/SMTP服务必须手动开启才能使用。服务器地址或端口错误使用错误的SMTP服务器地址或端口也会导致连接问题。提示535错误的核心是认证失败但具体原因需要结合上下文排查。本文重点解决最常见的授权码问题。2. 163邮箱SMTP服务的正确配置步骤要让Python脚本成功通过163邮箱发送邮件需要完成以下几个关键步骤2.1 开启SMTP服务并获取授权码登录你的163邮箱账号点击右上角的设置图标选择POP3/SMTP/IMAP在开启服务区域勾选POP3/SMTP服务和IMAP/SMTP服务点击客户端授权密码下的开启按钮按照提示设置一个授权码建议使用字母数字组合长度6-16位记下这个授权码它将替代你的邮箱密码在SMTP认证中使用注意授权码只会在设置时显示一次请务必妥善保存。如果忘记需要重新生成。2.2 SMTP连接参数详解使用163邮箱SMTP服务时需要了解以下关键参数参数名称值说明SMTP服务器地址smtp.163.com163邮箱的SMTP服务器地址端口号465SSL或994推荐使用SSL加密连接认证方式客户端授权码不是邮箱密码而是专门生成的授权码3. Python实现完整邮件发送代码下面是一个完整的Python示例演示如何正确使用163邮箱SMTP服务发送邮件import smtplib from email.mime.text import MIMEText from email.header import Header # 配置SMTP参数 smtp_server smtp.163.com smtp_port 465 # SSL端口 sender_email your_email163.com # 替换为你的163邮箱 receiver_email recipientexample.com # 替换为收件人邮箱 authorization_code your_authorization_code # 替换为你的客户端授权码 # 创建邮件内容 subject Python SMTP测试邮件 content 这是一封通过Python smtplib发送的测试邮件。 msg MIMEText(content, plain, utf-8) msg[From] Header(sender_email) msg[To] Header(receiver_email) msg[Subject] Header(subject, utf-8) try: # 创建SMTP连接SSL加密 with smtplib.SMTP_SSL(smtp_server, smtp_port) as server: server.login(sender_email, authorization_code) server.sendmail(sender_email, [receiver_email], msg.as_string()) print(邮件发送成功) except Exception as e: print(f邮件发送失败: {e})这段代码做了几处关键改进使用SMTP_SSL建立加密连接更安全采用with语句管理连接确保资源正确释放添加了完善的错误处理使用客户端授权码而非邮箱密码进行认证4. 常见问题排查与解决方案即使按照上述步骤操作有时仍可能遇到问题。以下是几个常见问题及其解决方法4.1 仍然收到535错误检查授权码是否正确确认使用的是客户端授权码而非邮箱密码验证邮箱地址确保sender_email与生成授权码的邮箱完全一致检查服务状态确认POP3/SMTP服务已开启4.2 连接超时或失败尝试不同端口除了465端口也可以尝试587或994端口检查网络环境某些网络可能屏蔽SMTP端口尝试切换网络验证服务器地址确保使用的是smtp.163.com而非其他地址4.3 邮件被当作垃圾邮件添加邮件主题和正文空主题或内容简单的邮件容易被过滤控制发送频率短时间内发送大量邮件可能被限制检查发件人名称使用明确的发件人名称而非单纯邮箱地址5. 进阶技巧与最佳实践掌握了基本用法后下面分享几个提升邮件发送体验的技巧5.1 发送HTML格式邮件只需将MIMEText的第二个参数改为html即可发送富文本邮件html_content html body h1这是一封HTML邮件/h1 p你可以使用strongHTML标签/strong来格式化内容。/p /body /html msg MIMEText(html_content, html, utf-8)5.2 添加附件使用email.mime.multipart.MIMEMultipart可以轻松添加附件from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders msg MIMEMultipart() msg[From] sender_email msg[To] receiver_email msg[Subject] subject # 添加正文 msg.attach(MIMEText(content, plain, utf-8)) # 添加附件 with open(attachment.pdf, rb) as f: part MIMEBase(application, octet-stream) part.set_payload(f.read()) encoders.encode_base64(part) part.add_header(Content-Disposition, attachment; filenameattachment.pdf) msg.attach(part)5.3 使用环境变量管理敏感信息将邮箱地址和授权码等敏感信息存储在环境变量中更安全import os sender_email os.getenv(SMTP_EMAIL) authorization_code os.getenv(SMTP_AUTH_CODE)然后在运行脚本前设置环境变量export SMTP_EMAILyour_email163.com export SMTP_AUTH_CODEyour_authorization_code在实际项目中我通常会将这些配置封装成一个单独的邮件发送模块方便各个脚本调用。同时建议为邮件发送添加重试机制因为网络波动可能导致偶尔的发送失败。

相关新闻