2016-07-15 12 views
3

Ich versuche, E-Mail von unserem ERP-System zu senden. Ich habe versucht, mit SMTP, aber es funktioniert nur für interne E-Mails und scheitert für externe E-Mail beschweren sich nicht zu Relais oder etwas. Ich denke, der Manager möchte oder will nicht, wie man Exchange richtig konfiguriert.Wie automatisieren Sie Outlook?

Also mein Chef sagte mir, Outlook zu verwenden. Das Problem ist, dass mein Code im Debug funktioniert, aber fehlschlägt, wenn Outlook geöffnet ist, was es in fast jedem Fall sein wird. Ich habe es geschafft, die Installation der Verkäufer zu modifizieren, aber wir würden es vorziehen, dies nicht zu tun. Wir verwenden Intuitive ERP 8.5. Es speichert seine Bibliotheksdateien im Standardordner, und es gibt einen benutzerdefinierten Ordner für jeden benutzerdefinierten Code oder geerbte Anbieterobjekte.

Program Files \ IntuitiveERP.exe Programme \ IntuitiveERP \ Custom Programme \ IntuitiveERP \ Standard-

Wenn ich das Programmverzeichnis auf der Wurzel C setzen: und die Standard- und kundenspezifischen kombinieren Ordner der Code funktioniert ob Outlook geöffnet oder geschlossen ist. Wir würden es vorziehen, die Installation des Herstellers nicht zu ändern, da dies zu Problemen bei Aktualisierungen führen kann.

'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 

Eine Idee, wie Sie einen Verweis auf Outlook erhalten, wenn es geöffnet ist? Irgendwelche alternativen Lösungen?

+0

Wenn SMTP fehlgeschlagen ist, was gibt Ihnen die Idee, dass Outlook nicht? – Ares

+1

Verwenden Sie Outlook nicht. Das ist so ein Hack. Dann muss Outlook überall dort installiert werden, wo Ihre App läuft. Verwenden Sie SMTP, und weisen Sie sie an, die Relays in Exchange zu konfigurieren. Es ist, was es ist (und es ist nicht zu schwierig, um ehrlich zu sein). –

+1

@Ares - Da SMTP aufgrund von Sicherheitsbedenken explizite Relays in Exchange "zulassen" muss, um zu verhindern, dass bösartige Software E-Mails von Ihrem Server abwirft. Outlook ist anders; Es wurde für die Verwendung mit Exchange in einer AD-Domäneneinstellung entwickelt und verwendet kein SMTP. –

Antwort

2

Sie können dies versuchen:

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

Beachten Sie, dass es Probleme gibt, wenn innerhalb von Visual Studio als Administrator ausgeführt wird und Outlook zugreifen, wenn es bereits im User-Modus ausgeführt wird. Siehe this. Versuchen Sie, die EXE-Datei direkt aus dem Ordner "bin" auszuführen (führen Sie sie nicht als Administrator aus).

+0

Danke, du hast auf eines der Probleme hingewiesen, die ich habe. Die ERP-Software muss als Administrator ausgeführt werden. Das Abrufen eines Verweises auf Outlook (im Benutzermodus) schlägt fehl. Deshalb funktioniert es, wenn Outlook zuerst geschlossen wird. Dies kann mir helfen, meinen Chef dazu zu bringen, Exchange richtig zu konfigurieren. –