2016-11-19 100 views
0

我試圖在使用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

回答

0

由於您無法控制防病毒功能,因此您應該查看Change Outlook's Programmatic Access Options上討論的衆多選項之一。擴展MAPI只是衆多選項中的一種,如果有任何選項取決於系統的許多其他細節,則可以使用這些選項。

相關問題