2009-05-12 7 views
3

Je souhaite être en mesure de créer un message électronique avec une pièce jointe, mais pas de l'envoyer. L'email devrait s'ouvrir dans Outlook où l'utilisateur peut s'auto-envoyer.Créer un message électronique dans .NET

J'ai commencé à utiliser la commande Mailto: pour ouvrir un nouveau message, mais le client Outlook ne semble pas prendre en charge l'ajout de pièces jointes à l'aide de la commande Mailto :.

Je ne veux pas utiliser COM pour cela.

Est-ce que quelqu'un connaît un moyen d'y parvenir? Je pense que ce ne serait peut-être pas possible sans COM.

Répondre

4

La seule façon de contourner COM (ou VSTO) que je peux penser serait d'utiliser les options de ligne de commande d'Outlook.En utilisant Process.Start vous pouvez démarrer Outlook avec les options décrites dans this answer (par VonC):

Ouvrez un nouveau message:

outlook.exe /c ipm.note 

Ouvrez un nouveau message électronique et remplir expéditeur:

Ouvrez un nouveau message avec pièce jointe:
outlook.exe /c ipm.note /m [email protected] 
outlook.exe /c ipm.note /a filename 

Combinaison:

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

Vous pouvez récupérer le dossier d'installation d'Outlook à partir des clés de Registre suivantes:

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

C'est exactement ce que je cherchais. outlook.exe/c ipm.note/un nom de fichier fonctionne parfaitement. Merci! – jgallant

5

Si vous souhaitez ouvrir le message électronique dans Outlook, alors je suis sûr que vous devrez utiliser COM. Y at-il une raison particulière pour laquelle vous souhaitez interagir avec Outlook plutôt que d'automatiser l'envoi à l'aide de SMTP et de l'espace de noms System.Net.Mail?

Edit: Il semble que vous pouvez spécifier une pièce jointe en utilisant un lien mailto , par la voie. Exemple:

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

Avez-vous essayé avec Outlook? Toutefois, je recommande toujours COM comme méthode à suivre, car elle vous permet de mieux contrôler ce que vous pouvez faire avec Outlook et les messages électroniques.

+0

Oui. Pour envoyer via SMTP avec mon employeur actuel, je dois faire une demande de relais SMTP pour avoir accès. J'espérais que les utilisateurs puissent envoyer l'email eux-mêmes, car ils ont déjà les informations d'identification. – jgallant

+0

@Jon: assez bien. Je recommanderais COM comme le moyen d'interface avec Outlook alors. Ce n'est pas très difficile à faire, et il devrait y avoir assez d'exemples autour (sur MSDN par exemple). – Noldorin

+0

La spécification d'une pièce jointe via mailto ne fonctionne pas avec Outlook 2007 afaik. –

1

Vous avez vous-même répondu là-bas - vous pouvez le faire via COM (via les assemblées PIA), ou vous pouvez envoyer via SMTP directement (qui ne toucherait pas le client de messagerie de l'utilisateur du tout)

0

I Je ne sais pas si vous pouvez le lier dans Outlook (je suppose que vous devrez utiliser MAPI), mais System.Net.Mail est génial.

0

vous pouvez également enregistrer le message dans le dossier au lieu d'envoyer uniquement par la configuration des paramètres de smtp

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

0

Facile:

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); 
} 
Questions connexes