使用Python库win32com.client发送Outlook邮件如何跳过权限弹窗
Outlook win32com 自动发信权限弹窗解决方案
以下为三种可直接落地的解决方法:
方案1:修改Outlook本地安全设置(操作最简单)
该权限弹窗是Outlook默认的安全拦截机制,直接修改本地配置即可关闭:
- 打开Outlook客户端,依次进入「文件」>「选项」>「信任中心」>「信任中心设置」>「编程访问」
- 选择「从不向我发出可疑活动警告」选项,保存配置即可生效
注意:修改该配置需要当前Windows账号具备管理员权限
方案2:使用Redemption库绕过安全限制
Redemption是专为Outlook二次开发封装的MAPI接口库,可直接绕过原生安全提示:
- 先完成依赖安装:执行
pip install pywin32 redemption,同时完成Redemption COM组件注册 - 参考代码示例:
import win32com.client as client session = client.Dispatch("Redemption.RDOSession") session.MAPILogonEx(0, "", False, False) msg = session.CreateMessageFromMsgFile("") msg.To = "rpatest1@outlook.com" msg.Subject = "appointment is done" msg.Body = "此处填写邮件正文内容" msg.Send() session.MAPILogoff()- 先完成依赖安装:执行
方案3:改用SMTP协议发信(无客户端依赖)
不调用本地Outlook客户端,直接通过Outlook官方SMTP接口发信,完全不会触发本地弹窗:
import smtplib from email.mime.text import MIMEText # 配置参数 sender_addr = "rpatest@outlook.com" sender_pwd = "你的邮箱登录密码/应用专用密码" receiver_addr = "rpatest1@outlook.com" # 构造邮件内容 msg = MIMEText("邮件正文内容") msg["Subject"] = "appointment is done" msg["From"] = sender_addr msg["To"] = receiver_addr # 连接SMTP服务器发送 with smtplib.SMTP("smtp.office365.com", 587) as server: server.starttls() server.login(sender_addr, sender_pwd) server.sendmail(sender_addr, receiver_addr, msg.as_string())
补充说明:现有代码中的message.Display()是用于弹出邮件编辑预览窗口的,如不需要预览可直接删除该行,减少不必要的窗口弹出,但它并非触发权限警告的核心原因。
内容的提问来源于stack exchange,提问作者emshihab008
相关产品推荐
相关产品推荐

