如何禁用Python通过win32发送邮件时的Outlook安全弹窗
解决Python win32库发邮件时的安全弹窗问题
这个弹窗是Outlook的安全防护机制,用来阻止未授权程序自动发送邮件,下面给几个实用的解决办法:
方法一:调整Outlook信任中心设置
直接修改Outlook的安全配置,允许自动化程序访问:
- 打开Outlook,依次点击「文件」→「选项」→「信任中心」→「信任中心设置」
- 找到「程序访问」选项,勾选「从不警告我有关可疑活动(不推荐)」;如果有针对特定程序的信任设置,也可以把你的Python解释器加入信任列表
- 注意:这个操作会降低Outlook的安全防护,只在你完全信任自己的自动化脚本时使用
方法二:用Redemption库绕过安全限制
Redemption是专门解决Outlook自动化安全弹窗的第三方库,很多开发者都在用:
- 先安装库:
pip install redemption
- 替换原来的win32com代码,用Redemption发邮件的示例:
import redemption # 初始化会话并登录当前Outlook账户 session = redemption.RDOSession() session.Logon() # 创建邮件 msg = session.CreateMessageFromMsgFile() msg.To = "收件人邮箱@example.com" msg.Subject = "自动化测试邮件" msg.Body = "这是通过Redemption发送的邮件,不会弹安全提示" # 发送邮件 msg.Send() session.Logoff()
Redemption通过模拟底层MAPI会话绕过Outlook的安全检测,稳定性比直接用win32com好很多。
方法三:改用SMTP直接发送邮件
彻底绕开Outlook客户端,用SMTP协议直接连接邮箱服务器发邮件,这是最稳妥的方案:
import smtplib from email.mime.text import MIMEText # 配置邮箱SMTP信息(以QQ邮箱为例) smtp_server = "smtp.qq.com" smtp_port = 587 sender_email = "你的QQ邮箱@qq.com" # QQ邮箱需要用「授权码」替代密码,在邮箱设置里开启SMTP后获取 sender_password = "你的邮箱授权码" recipient_email = "收件人邮箱@example.com" # 构造邮件内容 msg = MIMEText("自动化发送的邮件内容", "plain", "utf-8") msg["Subject"] = "SMTP测试邮件" msg["From"] = sender_email msg["To"] = recipient_email # 连接服务器发送邮件 with smtplib.SMTP(smtp_server, smtp_port) as server: server.starttls() # 开启加密传输 server.login(sender_email, sender_password) server.send_message(msg)
需要先在你的邮箱设置里开启SMTP服务,不同邮箱的配置略有差异,比如Gmail需要启用两步验证后生成应用专用密码。
内容的提问来源于stack exchange,提问作者nathoe
相关产品推荐
相关产品推荐

