2013-02-22 68 views
0

我有一個.NET應用程序,它允許用戶單擊一個按鈕,該按鈕將在Outlook中啓動一個新的預填充消息。這在很大程度上很有用,只有一個小例外。如果用戶在發送郵件時沒有打開Outlook,則郵件將進入其發件箱,直到他們實際啓動主Outlook應用程序。只有這樣,發送/接收似乎纔會真正發生。即使在Outlook關閉時發送Outlook MailItem

這裏的代碼片斷我用來創建MailItem

Dim mailItem As Outlook.MailItem = Me.OutlookApplication.CreateItem(Outlook.OlItemType.olMailItem) 
mailItem.To = "[email protected]" 
mailItem.Subject = "Some Subject" 
mailItem.HTMLBody = "Some Text" 
mailItem.Display(False) 

我鉤到ItemSend事件爲Outlook.Application一樣,所以我能看到,當用戶從點擊Send Outlook的MailItem成功引發了此事件。

如果Outlook在用戶啓動消息時未運行,則會生成新的OUTLOOK.EXE進程。無論哪種情況,系統托盤中都會顯示一個圖標,表示Outlook已連接到外部應用程序。

是否有可能以某種方式觸發使用Interop發送/接收,所以我可以確保郵件將被髮送而無需用戶分開打開Outlook?

回答

1

嘗試使用Namespace.SendAndReceive

請記住,郵件提交是異步的,因此你需要保持Outlook.Application的生命,直到發送/接收完成。

+0

我試過了。即使我從來沒有實際地將引用放置到我的Outlook.Application中,OUTLOOK.EXE過程在我的ItemSend事件處理程序完成時立即結束。發送/接收完成後有什麼方法可以偵聽嗎?我想我可以在事件處理程序線程上等待30秒左右,但這看起來很混亂,並不是100%穩健。 – mclark1129 2013-02-22 18:25:11

+0

您可以使用Namespace.SyncObject集合來啓動同步。 SyncObject公開SyncStart/SyncEnd事件。 – 2013-02-25 18:24:09