使用smtplib发送Outlook邮件时遭遇535认证失败错误,寻求解决方法
使用smtplib发送Outlook邮件时遭遇535认证失败错误,寻求解决方法
看起来你刚创建的Outlook测试账户踩了微软的SMTP安全限制坑,这个535 Authentication unsuccessful, basic authentication is disabled错误指向性很强——微软现在对新注册的账户默认禁用了基础密码认证,必须通过应用密码(前提是开启两步验证)才能完成SMTP登录。我来帮你一步步搞定:
一、先解决核心的认证问题(最关键)
开启账户的两步验证
微软的应用密码功能是和两步验证绑定的,你得先登录Outlook网页版,进入「账户安全」设置,找到「两步验证」选项并开启,按照提示绑定验证方式(比如手机短信验证码)。生成专属的应用密码
开启两步验证后,回到安全设置页面,找到「应用密码」选项(可能藏在「高级安全选项」分类下),生成一个专门给这个Python脚本用的应用密码。注意这个密码只会显示一次,一定要复制保存好,绝对不能用你的普通登录密码或者随便填的字符串,脚本里的senha参数必须填这个生成的应用密码。
二、代码细节优化与检查
你的代码逻辑整体没问题,但有几个小细节可以优化,也能避免潜在问题:
- 用
with语句安全读取文件:替代直接open(),不用手动关闭文件句柄:# 替换原有的文件读取代码 with open(f'.\\pdf\\{fileToSend}', 'rb') as contFile: cont = contFile.read() - 发送后正常关闭SMTP连接:在
server.send_message(msg)之后加上server.quit(),确保连接正常断开:server.send_message(msg) server.quit() # 新增这一行,避免连接残留 - 确认发件人邮箱完全匹配:代码里的
msg['From'] = email要和你传入的'email@outlook.com'完全一致,不能有拼写错误。
三、最后验证流程
把生成的正确应用密码替换到脚本的app_password位置,确认PDF文件路径(.\\pdf\\fileToSend.pdf)确实存在,再运行脚本应该就能正常发送邮件了。
如果还是报错,可以留意错误提示的变化:如果是文件找不到的错误,就检查PDF路径;如果还是认证错误,大概率是应用密码没生成对或者两步验证没配置到位。
备注:内容来源于stack exchange,提问作者Confetti
相关产品推荐
相关产品推荐

