2017-07-06 94 views
2

我的情況:發送郵件時的Outlook尚未打開

我試圖發送電子郵件在Outlook未打開。如果Outlook正在運行,此代碼將起作用。如果Outlook關閉,代碼將創建一個不可見的進程,您可以在任務管理器中看到該進程。

代碼在.Send期間遇到錯誤。它返回運行時錯誤287.

從我的經驗來看,某些VBA方法只有在對象可見或活動時才起作用。

我的工作是在撥打.Send之前使用.Display(False)

調用.Send後,它立即終止Outlook進程。 (請指出爲什麼正確的方向。)然後電子郵件卡在發件箱中。

我必須通過調用另一個CreateObject("Outlook.Application")和周圍應用其他工作或者通過發件箱While Outbox.Items.Count > 0

循環通過SyncObjects循環和手動調用.Start運行發送/接收的發件箱。

我的問題:

有沒有辦法直接使用.Send方法,而不是使用,同時還不必打開Outlook變通。

我的代碼:

Sub emailer() 

Dim OutApp As Object 
Dim OutMail As Object 

Set OutApp = CreateObject("Outlook.Application") 
Set OutMail = OutApp.CreateItem(0) 

With OutMail 
    .to = "[email protected]" 
    .CC = "" 
    .BCC = "" 
    .Subject = "This is the Subject line" 
    .Body = "Hi there" 
    .Send 'or use .Display 
End With 

Set OutMail = Nothing 
Set OutApp = Nothing 

End Sub 
+0

嘗試把「雖然Outbox.Items.Count> 0」循環到你的代碼中的「結束與」行之後 – jsotola

回答

0

使用Namespace.SendAndReceive。請記住,發送/接收是異步的,你需要WEIT的同步完成,你可以使用Namespace.SyncObjects集合,開始使用SyncObject.Start同步,然後等待SyncObject.SyncEnd事件。

爲防止Outlook關閉,您需要保留對Outlook Explorer或Inspector對象的實時引用。您可以使用Namespace.GetDefaultFolder檢索收件箱文件夾,然後使用MAPIFolder.GetExplorer方法獲取指向Explorer對象的指針。

UPDATE

您可能還需要確保你登錄到MAPI配置文件創建和發送郵件之前。在創建對象行後,嘗試添加以下

set NS = OutApp.GetNamespace("MAPI") 
NS.Logon 
+0

你知道爲什麼'.Send'不想在沒有資源管理器對象的情況下工作嗎? – fcsr

+0

由於Outlook在有機會執行發送/接收之前退出。 –

+0

我不認爲這是原因。嘗試執行時發送。我仍然可以在資源監視器中看到Outlook.exe runnning – fcsr

2

一種與Outlook收的問題。發送可以解決方法可能通過更改設置發送解決/接收。轉到文件 - >選項 - >高級 - >找到Send/Receive...並按下它。在「設置組‘所有帳戶’是Perform an automatic send/receive when exiting複選框選中此,它可能會解決的。‘卡在你有’發件箱中的問題

下面是截圖:

試試這個,希望這有助於。

+0

喜@Busse感謝,但它只是變得如果我使用'.Display'和'.Send'組合卡住了。 我想要一個簡單的'。發送'。如果我只使用'.Send',我得到一個運行時錯誤287 – fcsr

+0

啊,對不起。你怎麼調用這個腳本? Outlook已關閉,您調用此腳本,它會創建一個新的郵件項目並嘗試發送。由於它正在打開它應該發送的進程。我在某處讀到這可能是一個計時事件,表明它試圖發送得太快,所以他們在發送之前增加了1秒的延遲。 – Busse

+0

我在Excel中使用VBA,但我的程序真的在Python中。我正在使用暴露COM對象的'pywin32'庫。所以就像在Python中運行VBA代碼一樣。我只是在VBA中創建了一個重複代碼,以確保它不是Python的問題。 我試着使用F8來運行代碼並在執行'.Send'行之前暫停很長時間,但它仍然無效。 我認爲問題是我不能使用'。發送'當Outlook不可見。與Excel中的'.Paste'類似。如果目的地字段沒有被激活,你不能使用它。 – fcsr