編輯:我只是要使用事件監聽器。我會洗掉該帖子,但也許有人會找到一種非事件偵聽器的方式來保存已發送的郵件,然后再將其接收到已發送的郵件收件箱中。
問題:在宏完成之前,Outlook 不會收到 VBA 發送的電子郵件。如果我使用等待、睡眠、while 回圈或其他任何東西,將不會收到電子郵件。我不能使用 Sent Items 事件偵聽器,因為我只想將特定電子郵件保存到檔案夾中,而不是全部。我個人知道如何從已發送的專案中保存,我知道如何發送訊息。問題是使用 VBA 發送電子郵件和它出現在我的已發送郵件框中之間的延遲。如果我在等待之前另存為,則保存的電子郵件是上一封電子郵件,但如果您嘗試等待,已發送郵件檔案夾永遠不會更新。任何想法或簡單的解決方案。我可能只是個笨蛋。
我已經閱讀了每個論壇但沒有找到解決方案,我在另一家公司運行它但不再記得如何了。我使用宏來發送非常具體的電子郵件并執行許多其他任務。然后我想獲取我剛剛發送的電子郵件并使用 vba 將其保存到檔案夾中。問題是在我的“已發送郵件”檔案夾中接收電子郵件被延遲。如果我嘗試捕獲它或等待接收它,我的代碼永遠不會完成。我在論壇中看到的所有解決方案都是 Sent Item listener / Inbox event listener,但我不需要它,我知道觸發它的電子郵件。
uj5u.com熱心網友回復:
一種或另一種方式,您需要等待某個事件觸發,無論是Items.ItemAdd
在 Sent Items 檔案夾上,還是SyncObject.SyncEnd
在SyncObject
- 訊息提交是異步的,所以沒有多少sleep
或 while 回圈可以幫助您。由于您的代碼在 Outlook 主執行緒上運行,因此您不能只是停止 VBA 腳本并在實際發送訊息時恢復它 - 如果您的腳本暫停,Outlook 也會暫停。
uj5u.com熱心網友回復:
您可以嘗試使用NameSpace.SendAndReceive方法,該方法會立即發送當前會話中提交的所有未發送郵件,并立即接收當前組態檔中所有帳戶的郵件。注意,呼叫該SendAndReceive
方法是異步的。提供與單擊和時可用SendAndReceive
的命令等效的程式。Send/Receive All
Tools
Send/Receive
如果不需要同步所有物件,可以使用SyncObjects集合物件來選擇特定物件。有關詳細資訊,請參閱NameSpace.SyncObjects
。
在您的 VBA 代碼中,您還可以考慮使用產生執行的DoEvents函式,以便作業系統可以處理其他事件。DoEvents
將控制權交給作業系統。在作業系統完成處理其佇列中的事件并且佇列中的所有鍵SendKeys
都已發送(如果有)之后,控制權被回傳。
DoEvents
對于簡單的事情最有用,例如允許用戶在啟動后取消行程,例如搜索檔案。
uj5u.com熱心網友回復:
解決方案,不是解決方案或過去使用的但我解決了。
- 基本上只是所有論壇中的每個人都建議的事件偵聽器解決方案。我在我的已發送專案中創建了一個單獨的檔案夾,并使用 myNameSpace.GetDefaultFolder 為 VBA 發送專案設定該檔案夾。我僅將電子郵件發送到該檔案夾??,并將偵聽器添加到該檔案夾??。這使我可以將已發送的專案和這個特定的 VBA 發送的電子郵件分開,然后自動保存它們。我仍在尋找一種在已發送郵件收件箱顯示之前保存已發送郵件的方法,但我現在已經放棄了。感謝大家的幫助。如果我找到更好的答案,我會嘗試將其與代碼一起發布。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/474784.html
下一篇:通過c#發送帶附件的電子郵件