從http://www.dimastr.com/redemption/faq.htm#1
當我使用贖回發送消息時,它簡單地停留在草稿文件夾
消息提交是在擴展MAPI一個兩步過程:
調用IMessage :: Submit()
刷新傳出的消息隊列。
如果您使用的是Exchange Server,則不需要執行步驟#2,因爲Exchange郵件存儲與Exchange傳輸提供程序緊密綁定。如果您使用POP3/SMTP傳輸和PST文件作爲消息存儲,則需要執行步驟#2。要刷新消息隊列中,Redemption.MAPIUtils對象創建一個實例,並調用後調用其DeliverNow方法(在CDO類似Session.DeliverNow)SafeMailItem.Send:
MailItem.Send
Set Utils = CreateObject("Redemption.MAPIUtils")
Utils.DeliverNow
但是有一個問題沒有,如果你正在使用Outlook 2002或更新的PST文件和POP3/SMTP傳輸提供程序或安裝在Internet Only模式下的Outlook 2000:無法使用擴展MAPI刷新隊列。 Outlook的那部分簡單地被打破了。但請注意,在任何配置中使用Exchange Server或Outlook 2000 C/W的Outlook 2002/2003(聯機)都可以。
如果您在緩存模式下使用Outlook 2003或更高版本的Exchange,它將顯示相同的問題。取消選中Exchange Server屬性中的「使用緩存模式」以強制執行聯機模式 - 這將確保郵件能夠立即傳送。
作爲最後的手段,你可以模擬單擊「發送/接收」發送消息後,在Outlook按鈕:
MailItem.Send
Set Btn = Application.ActiveExplorer.CommandBars.FindControl(1, 5488)
Btn.Execute
注意,在Outlook 2003中該按鈕現在是一個下拉列表中,真正的發送/接收是按鈕的子項:
Set Btn = Application.ActiveExplorer.CommandBars.FindControl(1, 7095)
Btn.Execute
請注意,上面的代碼假設有一個活動的資源管理器;如果以編程方式啓動Outlook(並且以前未由用戶啓動),則不會出現這種情況,也不會顯示任何文件夾。在這種情況下,你可以使用該Namespace.SyncObjects收集開始同步:
set NS = Application.GetNamespace("MAPI")
NS.Logon
Set Sync = NS.SyncObjects.Item(1)
Sync.Start
在Outlook 2010中,您還可以使用Namespace.SendAndReceive
方法。
感謝德米特里的回覆。在經過它之後,我在Outlook 2013中取消選中「使用緩存模式」以強制在線模式,並且郵件確實立即發送。現在我有另一個查詢,如上所述**「如果您使用Outlook 2003或更高版本的Exchange以緩存模式」**,但在我當前版本的Outlook 2003中,使用緩存模式爲「已選中」,郵件交付時不存在任何問題。因此,關閉緩存模式是解決方案,或者是否有任何更改可以做,並保持緩存模式。 – DeadShot
您可以使用Namespace.SendAndReceive,但請記住它是異步的,您需要確保Outlook保持引用,直到發送/接收完成。 –
再次感謝德米特里,我錯了我在錯誤的機器中檢查使用緩存模式。它不適用於Outlook 2003和更高版本。精彩的是,不需要任何代碼更改 – DeadShot