Python:绕过程序化访问警告自动发送Outlook电子邮件

问题描述:

我试图在使用Python的虚拟机上发送电子邮件警报。这是我的代码:Python:绕过程序化访问警告自动发送Outlook电子邮件

olMailItem = 0x0 
obj = win32com.client.Dispatch("Outlook.Application") 
newMail = obj.CreateItem(olMailItem) 
newMail.Subject = "subject" 
newMail.Body = "body" 
newMail.To = "me.com" 
newMail.display() 
newMail.send() 

我试图用newMail.send(),但我的Outlook发送其击败自动化这些警告点的警告。另外,我无法关闭我的前景,因为我的机器上“Windows无法找到防病毒签名”。

因此,我试图在newMail.display()后使用Alt + S,但遇到了麻烦,因为新电子邮件并不总是处于焦点状态。

然后我用SetForegroundWindow,以确保它是焦点,但随后开始变得pywintypes.error:(0,“SetForegroundWindow”,“没有可用的错误信息”)另一SO后建议,然后再发送键SettingForegroundWindow修复了这个问题,它确实为我工作。但是,每次关闭虚拟机窗口(不注销)或由于不活动而被锁定时,即使脚本的其余部分在后台运行,我也会得到pywintypes.error:(5 ,'SetForegroundWindow','访问被拒绝')当触发电子邮件警报时

是否有任何解决方法能够绕过所有这些问题在后台发送电子邮件警报?

感谢,

希德

+0

我认为你应该回到你的第一个方法并编辑你的问题:发送你用于send()的代码,并发布错误消息(或错误/警告对话框的快照)。制作它的可运行代码,以便我们可以在我们的系统上进行测试。我很确定你应该能够发送没有扩展MAPI。 – Schollii

+0

你好Scholli,谢谢你的回复。我忘了提及Outlook发送的警告是 - 程序试图自动从您的计算机发送电子邮件。可以吗? 我在网上查了一下,唯一能摆脱这种情况的方法是允许在outlook上编程访问,但是我的企业有一个规则,如果防病毒签名过期,程序访问会要求许可,而且签名是过时了,他们说它不能从他们的最后改变。 – Sid

+0

@Schollii:相应地修改了代码。为了重现outlook警告,您需要打开outlook>文件>选项>信任中心>信任中心设置>程序化访问,然后选择始终警告有关可疑活动的信息。 – Sid

总之,你的选择是Extended MAPI(C++或仅德尔福),建立在扩展MAPI的一种包装库,可以从任何语言(Redemption)使用,或像ClickYes这样的实用程序。

请参阅http://www.outlookcode.com/article.aspx?id=52了解更多详情。

由于您无法控制防病毒功能,因此您应该查看Change Outlook's Programmatic Access Options上讨论的众多选项之一。扩展MAPI只是众多选项中的一种,如果有任何选项取决于系统的许多其他细节,则可以使用这些选项。