Python Gmail邮件发送脚本无法验证用户名与应用密码问题排查
问题原因与解决方案
错误原因分析
这个535错误是Gmail拒绝了登录凭证,核心问题有以下几点:
- 邮箱格式错误:你填写的
sender_email是sendingemail@gmail,缺少.com后缀,Gmail邮箱必须是完整的xxx@gmail.com格式。 - 登录凭证不符合要求:Gmail当前默认禁止直接用账号密码登录第三方应用,必须使用应用专用密码,且前提是账号已开启两步验证;若未开启两步验证,“不太安全的应用访问”选项也已逐步被Gmail取消,因此应用专用密码是唯一合规的方式。
修正后的可运行脚本
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart # 修正邮箱格式为完整Gmail地址 sender_email = 'sendingemail@gmail.com' # 替换为你的Gmail应用专用密码 sender_password = 'your_app_specific_password' receiver_email = 'receiveremail@gmail.com' subject = 'Python自动化测试邮件' message = '这是通过Python脚本自动发送的测试邮件内容。' msg = MIMEMultipart() msg['From'] = sender_email msg['To'] = receiver_email msg['Subject'] = subject # 添加utf-8编码支持中文,避免乱码 msg.attach(MIMEText(message, 'plain', 'utf-8')) smtp_server = 'smtp.gmail.com' smtp_port = 587 try: server = smtplib.SMTP(smtp_server, smtp_port) server.starttls() # 加密连接 server.login(sender_email, sender_password) text = msg.as_string() server.sendmail(sender_email, receiver_email, text) print('邮件发送成功') except Exception as e: print('邮件发送失败,错误信息:', str(e)) finally: # 避免登录失败时server未初始化导致的quit报错 if 'server' in locals(): server.quit()
关键操作步骤
- 修正邮箱格式:确保
sender_email是完整的xxx@gmail.com格式。 - 生成应用专用密码:
- 登录Gmail账号,开启两步验证(必须先完成此步骤才能生成应用专用密码)。
- 进入账号安全设置,找到“应用专用密码”选项,生成一个仅用于该Python脚本的密码,替换脚本中的
sender_password。
- 中文编码优化:在
MIMEText中指定utf-8编码,避免邮件内容出现中文乱码。 - 异常处理优化:在
finally块中先判断server是否存在,防止登录失败时调用quit()引发额外错误。
接收测试邮件
脚本发送成功后,接收方邮箱即可收到邮件;若未在收件箱找到,可检查垃圾邮件文件夹,自动化发送的邮件可能被系统归类为垃圾邮件。
内容的提问来源于stack exchange,提问作者dmitrianosov
相关产品推荐
相关产品推荐

