2016-07-15 35 views
3

我試圖從我們的ERP系統發送電子郵件。我嘗試使用SMTP,但它只適用於內部郵件,並且因爲外部郵件抱怨無法中繼或某些內容而失敗。我認爲經理要麼不想知道如何正確配置Exchange。如何自動化Outlook?

所以我的老闆讓我用Outlook。問題是我的代碼在調試中工作正常,但如果Outlook處於打開狀態,則會失敗,幾乎在任何情況下都會如此。我確實讓它能夠修改供應商安裝,但我們不希望這樣做。我們正在使用Intuitive ERP 8.5。它將庫文件存儲在標準文件夾中,並且存在用於任何自定義代碼或繼承供應商對象的自定義文件夾。

Program Files文件\ IntuitiveERP.exe Program Files文件\ IntuitiveERP \定製 Program Files文件\ IntuitiveERP \標準

如果我把程序的目錄上C盤根:並結合標準和自定義文件夾代碼工作無論Outlook是打開還是關閉。我們不希望修改供應商的安裝,因爲如果可能導致更新問題。

'Fails with Cannot create ActiveX component. 
objOutlook = CType(CreateObject("Outlook.Application"), Outlook.Application) 
'Fails with Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80080005. 
objOutlook = New Outlook.Application 
mobjEmail = CType(objOutlook.CreateItem(Outlook.OlItemType.olMailItem), Outlook.MailItem) 

With mobjEmail 
    .CC = strEmployeeEmail 
    .Subject = String.Format(Constants.RFQ.Email.Subject, strRFQID) 
    .To = strTo 
    .Body = Constants.RFQ.Email.Body 
    .Attachments.Add(String.Format(Constants.RFQ.Output.FullPath, strRFQID)) 
    .Display(True) 
End With 

任何想法如何在Outlook打開時獲取對Outlook的引用? 任何替代解決方案?

+0

如果SMTP失敗,是什麼讓你知道Outlook不會? – Ares

+1

請勿使用Outlook。這是一個黑客。然後,無論您的應用在哪裏運行,都需要安裝Outlook。使用SMTP並告訴他們在Exchange中配置繼電器。它就是這樣(老實說,這不是太棘手)。 –

+1

@Ares - 因爲SMTP需要在Exchange中允許顯式中繼,因爲存在安全問題,以防止流氓軟件將郵件從服務器上彈出。前景不同;它被設計爲在AD域設置中與Exchange一起工作,並且不使用SMTP。 –

回答

2

你可以試試這個:

Try 
    objOutlook = Marshal.GetActiveObject("Outlook.Application") 
Catch ex As Exception 
    objOutlook = CType(CreateObject("Outlook.Application"), Outlook.Application) 
End Try 

注意,這裏作爲管理員在Visual Studio中運行和訪問Outlook時,它已經在用戶模式下運行時的問題。請參閱this。嘗試直接從bin文件夾運行EXE(不要以管理員身份運行)。

+0

謝謝,您指出了我遇到的其中一個問題。 ERP軟件需要以管理員身份運行。獲取對Outlook(在用戶模式下運行)的引用失敗。這就是爲什麼如果Outlook首先關閉,它會起作用。這可能會幫助我的老闆正確配置Exchange。 –