2009-05-12 4 views
3

Ich möchte in der Lage sein, eine E-Mail-Nachricht mit einem Anhang zu erstellen, aber nicht senden. Die E-Mail sollte in Outlook geöffnet werden, wo der Benutzer sich selbst senden kann.Erstellen Sie eine E-Mail-Nachricht in .NET

Ich habe mit Mailto: Befehl gespielt, um eine neue E-Mail-Nachricht zu öffnen, Outlook-Client scheint jedoch keine Anhänge mit dem Befehl Mailto: zu unterstützen.

Ich möchte COM nicht verwenden, um dies zu tun.

Kennt jemand einen Weg, dies zu erreichen? Ich denke, dass es ohne COM nicht möglich wäre.

Antwort

4

Der einzige Weg, um COM (oder VSTO) ich denke, wäre, die Befehlszeilenoptionen von Outlook zu verwenden.Mit Process.Start Sie Outlook starten könnte mit den in this answer beschriebenen Optionen (von VonC):

Öffnen Sie eine neue E-Mail-Nachricht:

outlook.exe /c ipm.note 

Öffnen Sie eine neue E-Mail und füllen Absender:

outlook.exe /c ipm.note /m [email protected] 

Öffnen Sie eine neue E-Mail-Nachricht mit Anhang:

outlook.exe /c ipm.note /a filename 

Kombination:

outlook.exe /c ipm.note /m [email protected]&subject=test%20subject&body=test%20body 

Sie können die Installationsordner von Outlook aus dem folgenden Registrierungsschlüssel abrufen:

Outlook 2007:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Outlook\InstallRoot 

Outlook 2003:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Outlook\InstallRoot 

Outlook XP:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\10.0\Outlook\InstallRoot 
+0

Genau das habe ich gesucht. outlook.exe/c ipm.note/ein Dateiname funktioniert einwandfrei. Danke! – jgallant

5

Wenn Sie die E-Mail-Nachricht in Outlook öffnen möchten, dann bin ich mir ziemlich sicher, dass Sie COM verwenden müssen. Gibt es einen bestimmten Grund, mit dem Sie mit Outlook interagieren möchten, statt das Senden mit SMTP und dem Namespace System.Net.Mail zu automatisieren?

Edit: Es scheint, können Sie eine Anlage geben Sie einen mailto Link, durch die Art und Weise verwendet wird. Beispiel:

mailto:[email protected]?subject=foo&body=bar&attachment="C:/foo/bar.txt" 

Haben Sie dies mit Outlook versucht? Ich würde jedoch immer noch empfehlen, COM als den Weg zu gehen, da es Ihnen viel mehr Kontrolle darüber gibt, was Sie mit Outlook und Mail-Nachrichten tun können.

+0

Ja. Um über SMTP mit meinem aktuellen Arbeitgeber zu senden, muss ich eine SMTP-Relay-Anfrage stellen, um Zugriff zu erhalten. Ich hatte gehofft, Benutzern zu erlauben, die E-Mail selbst zu senden, da sie bereits die Anmeldeinformationen haben. – jgallant

+0

@ Jon: Fair genug. Ich würde COM als den Weg empfehlen, mit Outlook dann zu verbinden. Es ist nicht sehr schwer zu tun, und es sollte genügend Beispiele geben (zum Beispiel auf MSDN). – Noldorin

+0

Das Angeben eines Anhangs über Mailto funktioniert nicht mit Outlook 2007 afaik. –

1

Sie haben sich dort beantwortet - können Sie entweder tun es durch COM (über die primäre Interop Assemblies), oder Sie können direkt per SMTP senden (was nicht der Benutzer die E-Mail-Client überhaupt berühren würde)

0

I Ich bin mir nicht sicher, ob Sie es in Outlook verknüpfen können (ich vermute, Sie müssen MAPI verwenden), aber System.Net.Mail ist großartig.

0

Sie auch die Nachricht zu senden, um Ordner speichern können, anstatt nur von SMTP- Einstellungen

<system.net> 
<mailSettings> 
    <smtp deliveryMethod="SpecifiedPickupDirectory"> 
    <specifiedPickupDirectory pickupDirectoryLocation="c:\pickup-smtp\"/>   
    </smtp> 
</mailSettings> 

0

Einfache Konfiguration:

using Microsoft.Office.Interop.Outlook; 

private void CreateMailItem() 
{ 
    Outlook.MailItem mailItem = (Outlook.MailItem) 
     this.CreateItem(Outlook.OlItemType.olMailItem); 
    mailItem.Subject = "This is the subject"; 
    mailItem.To = Environment.UserName + "@example.com"; 
    mailItem.Body = "This is the message."; 
    mailItem.Importance = Outlook.OlImportance.olImportanceLow; 
    mailItem.Display(false); 
} 
Verwandte Themen