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

使用Python发邮件遇smtplib.SMTPAuthenticationError的排查

排查SMTP认证失败(535错误)原因

执行Python发送邮件代码时出现错误:smtplib.SMTPAuthenticationError: (535, b'5.7.8 Error: authentication failed: UGFzc3dvcmQ6')。已确认登录账号密码正确,使用的是测试专用邮箱,尝试过更换端口、邮件服务商及主机,但仍无法发送测试邮件。附上代码及server.set_debuglevel(1)的输出,请求排查登录失败原因。

代码示例

import smtplib

mailFrom = "Test email sends"
mailTo = ["python123321testowy@op.pl"]
mailSubjest = "Test message"
mailBody = '''
email
    test
        test
'''

msg = '''From: {}
Subject: {}

{}
'''.format(mailFrom,mailSubjest,mailBody)

user = "python123321testowy@op.pl"
password = "pwd"
server = smtplib.SMTP_SSL('SMTP.poczta.onet.pl', 465)
server.ehlo()
server.login(user, password)
server.sendmail(user, mailTo, msg)
server.close()

server.set_debuglevel(1)输出

send: 'ehlo [192.168.0.19]\r\n'
reply: b'250-smtp.poczta.onet.pl\r\n'
reply: b'250-PIPELINING\r\n'
reply: b'250-SIZE 90000000\r\n'
reply: b'250-ETRN\r\n'
reply: b'250-AUTH PLAIN LOGIN XOAUTH2\r\n'
reply: b'250-AUTH=PLAIN LOGIN XOAUTH2\r\n'
reply: b'250-ENHANCEDSTATUSCODES\r\n'
reply: b'250 8BITMIME\r\n'
reply: retcode (250); Msg: b'smtp.poczta.onet.pl\nPIPELINING\nSIZE 90000000\nETRN\nAUTH PLAIN LOGIN XOAUTH2\nAUTH=PLAIN LOGIN XOAUTH2\nENHANCEDSTATUSCODES\n8BITMIME'
send: 'AUTH PLAIN AHB5dGhvbjEyMzMyMXRlc3Rvd3lAb3AucGwAUXdlcnR5MTIzNDU2Nzg5QEAh\r\n'
reply: b'535 5.7.8 Error: authentication failed: \r\n'
reply: retcode (535); Msg: b'5.7.8 Error: authentication failed:'
send: 'AUTH LOGIN cHl0aG9uMTIzMzIxdGVzdG93eUBvcC5wbA==\r\n'
reply: b'334 UGFzc3dvcmQ6\r\n'
reply: retcode (334); Msg: b'UGFzc3dvcmQ6'
send: 'UXdlcnR5MTIzNDU2Nzg5QEAh\r\n'
reply: b'535 5.7.8 Error: authentication failed: UGFzc3dvcmQ6\r\n'
reply: retcode (535); Msg: b'5.7.8 Error: authentication failed: UGFzc3dvcmQ6'
send: 'quit\r\n'
reply: b'221 2.0.0 Bye\r\n'
reply: retcode (221); Msg: b'2.0.0 Bye'

排查方向及解决方案

从debug输出可见,服务器支持PLAIN、LOGIN、XOAUTH2三种认证方式,但两次认证尝试均失败,可从以下几点排查:

  • 密码一致性验证:
    debug中发送的密码Base64串UXdlcnR5MTIzNDU2Nzg5QEAh解码后是Qwerty123456789@@!,但代码里写的是password = "pwd",明显不符。先确认代码中实际使用的密码是否正确,排查是否存在变量赋值错误、复制粘贴时的遗漏或特殊字符问题。可以用以下代码验证密码的Base64编码是否和debug中的一致:

    import base64
    actual_pwd = "你的实际密码"
    print(base64.b64encode(actual_pwd.encode('utf-8')).decode('utf-8'))
    
  • 邮箱服务商安全限制:

    • 确认是否在邮箱网页端开启了SMTP服务:多数邮箱默认关闭SMTP功能,需手动在设置中启用。
    • 若开启了两步验证,不能使用普通登录密码,必须生成应用专用密码用于SMTP登录。
    • 检查是否有IP登录限制:如果是首次在当前IP登录SMTP,可能触发邮箱的安全机制,需要在网页端登录邮箱完成验证。
  • 代码及连接调整:

    • 尝试去掉server.ehlo()调用:SMTP_SSL连接建立后,部分服务器会自动完成EHLO握手,手动调用可能干扰认证流程。
    • 改用STARTTLS连接方式:尝试使用587端口,代码示例:
      server = smtplib.SMTP('smtp.poczta.onet.pl', 587)
      server.starttls()  # 启用加密
      server.login(user, password)
      
    • 确认SMTP服务器地址准确性:验证onet.pl官方SMTP服务器地址是否为smtp.poczta.onet.pl(大小写不影响,但建议统一小写)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:17:39