2009-06-29 7 views
0

Ich versuche, einen Outlook-Termin über Code zu senden. Mein Code ist unten veröffentlicht. Wenn ich es auf dem Server mit IIS 6 und einem App-Pool unter einer Domänenkontoneidentität ausführe, wird dieser Fehler ausgegeben. Ich habe versucht, verschiedene Einstellungen auf dem Server zu ändern und keiner hat funktioniert. Outlook 2007 ist installiert. Ich habe sogar den Domain-Account zu einem lokalen Admin gemacht. Bitte helfen Sie!Senden Sie Outlook-Termin durch asp.net-Fehler HRESULT: 0x80004004

Beschreibung: Eine nicht behandelte Ausnahme trat während der Ausführung der aktuellen Web-Anfrage. Bitte überprüfen Sie die Stack-Trace für weitere Informationen über den Fehler und wo es in der Code stammt.

Ausnahmedetails: System.Runtime.InteropServices.COMException: Vorgang abgebrochen (Ausnahme von HRESULT: 0x80004004 (E_ABORT))

Zeile 201: objAppt.Send();

-Code unten:

Microsoft.Office.Interop.Outlook.Application objOL 
    = new Microsoft.Office.Interop.Outlook.Application(); 
Microsoft.Office.Interop.Outlook.AppointmentItem objAppt 
    = (Microsoft.Office.Interop.Outlook.AppointmentItem)objOL 
     .CreateItem 
      (Microsoft.Office.Interop.Outlook.OlItemType.olAppointmentItem); 
objAppt.Start = startTime;//datetime 
objAppt.End = endTime;//datetime 
objAppt.Subject = subject; 
objAppt.Body = body; 
objAppt.Location = location; 
objAppt.MeetingStatus 
    = Microsoft.Office.Interop.Outlook.OlMeetingStatus.olMeeting; 
objAppt.RequiredAttendees = "[email protected]"; 
objAppt.Send(); 
objAppt = null; 
objOL = null; 

Antwort

0

Ganz einfach, sollten Sie nicht tun. Es wird nicht empfohlen, Office in einer Serverumgebung auszuführen, da die Threading- (und Desktopsitzung-) Anforderungen von Office erfüllt sind.

Versuchen Sie, dies auf einem Exchange-Server zu tun? Wenn ja, würde ich direkt mit dem Exchange-Server interagieren (vielleicht mit WebDAV?).

Wenn Sie keine Verbindung mit Exchange herstellen, sehen Sie sich die Header für eine Einladung zu dem Ereignis an. Die Einladungen sollten nicht mehr als normale E-Mails mit benutzerdefinierten Kopfzeileninformationen sein.

+0

Nein, es ist kein Exchange-Server. Es wird also nicht empfohlen, die Office-Interop-Objekte auf den Servern zu verwenden. Aber ich kann einfach nicht herausfinden, wie es funktioniert ... –

+0

@tom: Nun, dies ist nur eine E-Mail mit einigen zusätzlichen Kopfzeilen. Senden Sie eine Nachricht an sich selbst und schauen Sie sich die Kopfzeilen an, die in der E-Mail enthalten sind, und duplizieren Sie sie dann entsprechend. – casperOne

+0

"Microsoft empfiehlt derzeit keine Automatisierung von Microsoft Office-Anwendungen aus einer unbeaufsichtigten, nicht interaktiven Clientanwendung oder -komponente (einschließlich ASP-, ASP.NET-, DCOM- und NT-Dienste), da Office möglicherweise ein instabiles Verhalten aufweist und/oder Deadlock, wenn Office in dieser Umgebung ausgeführt wird. " Http://support.microsoft.com/kb/257757 – tomfanning

1

Ja wie casperOne sagte, ich würde Outlook auf dem Server nicht verwenden. Ich würde dafür CDO oder RDO (redefining) verwenden. oder benutze vcal und sende das vcal auf einem system.Net.Mail.

Update: Werfen Sie einen Blick auf http://www.dimastr.com/redemption/rdo/RDOAppointmenItem.htm

Zeigen Sie, wie excatly tun, was Sie RDO tun wollen verwenden. Sie können das gleiche mit CDO auch tun. Check out CDOLive.com Sie müssen wird ein teh Login-Daten aufzubauen, wie Sie auf einem Server sind, die kein Outlook-Profil hat (das ist, wenn Sie die eine entfernen, die Sie bereits dort haben)

+0

Tolle Infos. Danke vielmals! –

0

ich den Grund erraten Sie Outlook nicht verwenden können, aus einer IIS-Anwendung stammt, weil der aktuelle Benutzer, unter dem die IIS-App läuft, kein Outlook-Profil zugeordnet hat.

Daher können Sie Outlook-Objekte instanziieren und ihre Eigenschaften festlegen, bis profilspezifische Funktionen erforderlich sind, z. B. der Befehl Send(), der die ausgehende Mail in der (nicht vorhandenen) PST-Datei des Benutzers/Profils speichert.

+0

Ich habe zwar ein Profil für dieses Benutzerkonto erstellt, aber ... –

0

Tun Sie dies nicht mit Outlook-Automatisierung.

Direkt aus dem Maul des Pferdes:

Microsoft derzeit nicht empfehlen, und nicht unterstützt, Automatisierung von Microsoft Office-Anwendungen von jedem unbeaufsichtigt, nicht-interaktiven Client-Anwendung oder eine Komponente (einschließlich ASP, ASP.NET , DCOM- und NT-Dienste), da Office möglicherweise instabiles Verhalten und/oder Deadlock aufweist, wenn Office in dieser Umgebung ausgeführt wird.

Wenn Sie eine Lösung erstellen, die in einem serverseitigen Kontext ausgeführt wird, sollten Sie versuchen, Komponenten zu verwenden, die für die unbeaufsichtigte Ausführung gesichert wurden. Oder Sie sollten versuchen, Alternativen zu finden, mit denen zumindest ein Teil des Codes clientseitig ausgeführt werden kann. Wenn Sie eine Office-Anwendung von einer serverseitigen Lösung aus verwenden, fehlen der Anwendung viele der für die erfolgreiche Ausführung erforderlichen Funktionen. Darüber hinaus gehen Sie mit der Stabilität Ihrer Gesamtlösung Risiken ein.

http://support.microsoft.com/kb/257757

E-Mail-Header Untersuchen von Outlook gesendet, wenn es um diesen Job zu tun, um herauszufinden, wie dies geschehen ist, und emulieren es die Standard-.NET SmtpClient Sachen verwenden.

Verwandte Themen