2009-07-28 82 views
23

Actualmente estoy usando el método de abajo para abrir la cuenta de correo electrónico de Outlook usuarios y poblar un correo electrónico con el contenido relevante para el envío:C# MailTo con datos adjuntos?

public void SendSupportEmail(string emailAddress, string subject, string body) 
{ 
    Process.Start("mailto:" + emailAddress + "?subject=" + subject + "&body=" 
       + body); 
} 

Quiero sin embargo, ser capaz de poblar el correo electrónico con un archivo adjunto.

algo como:

public void SendSupportEmail(string emailAddress, string subject, string body) 
{ 
    Process.Start("mailto:" + emailAddress + "?subject=" + subject + "&body=" 
     + body + "&Attach=" 
     + @"C:\Documents and Settings\Administrator\Desktop\stuff.txt"); 
} 

Sin embargo, esto no parece funcionar. ¿Alguien sabe de una manera que permita que esto funcione?

Ayuda a apreciar mucho.

Atentamente.

Respuesta

10

mailto: no es compatible oficialmente adjuntos. He oído Outlook 2003 puede trabajar con esta sintaxis:

<a href='mailto:[email protected]?Subject=SubjTxt&Body=Bod_Txt&Attachment=""C:\file.txt"" '> 

Una mejor manera de manejar esto es para enviar el correo en el servidor usando System.Net.Mail.Attachment.

public static void CreateMessageWithAttachment(string server) 
    { 
     // Specify the file to be attached and sent. 
     // This example assumes that a file named Data.xls exists in the 
     // current working directory. 
     string file = "data.xls"; 
     // Create a message and set up the recipients. 
     MailMessage message = new MailMessage(
      "[email protected]", 
      "[email protected]", 
      "Quarterly data report.", 
      "See the attached spreadsheet."); 

     // Create the file attachment for this e-mail message. 
     Attachment data = new Attachment(file, MediaTypeNames.Application.Octet); 
     // Add time stamp information for the file. 
     ContentDisposition disposition = data.ContentDisposition; 
     disposition.CreationDate = System.IO.File.GetCreationTime(file); 
     disposition.ModificationDate = System.IO.File.GetLastWriteTime(file); 
     disposition.ReadDate = System.IO.File.GetLastAccessTime(file); 
     // Add the file attachment to this e-mail message. 
     message.Attachments.Add(data); 

     //Send the message. 
     SmtpClient client = new SmtpClient(server); 
     // Add credentials if the SMTP server requires them. 
     client.Credentials = CredentialCache.DefaultNetworkCredentials; 

     try { 
      client.Send(message); 
     } 
     catch (Exception ex) { 
      Console.WriteLine("Exception caught in CreateMessageWithAttachment(): {0}", 
       ex.ToString());    
     } 
     data.Dispose(); 
    } 
4

¿Esta aplicación realmente necesita usar Outlook? ¿Hay alguna razón para no usar el espacio de nombres System.Net.Mail?

Si realmente es necesario utilizar Outlook (y yo no lo recomendaría porque entonces usted está basando su aplicación en las dependencias de 3 ª parte que es probable que cambie) tendrá que buscar en los espacios de nombres Microsoft.Office

me gustaría empezar aquí: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.aspx

+0

Sí lo hace ....... – Goober

47

Si desea acceder al cliente de correo electrónico predeterminado, puede usar MAPI32.dll (funciona solo en el sistema operativo Windows). Tome un vistazo a la siguiente envoltorio:

http://www.codeproject.com/KB/IP/SendFileToNET.aspx

código es el siguiente:

MAPI mapi = new MAPI(); 
mapi.AddAttachment("c:\\temp\\file1.txt"); 
mapi.AddAttachment("c:\\temp\\file2.txt"); 
mapi.AddRecipientTo("[email protected]e.com"); 
mapi.AddRecipientTo("[email protected]"); 
mapi.SendMailPopup("testing", "body text"); 

// Or if you want try and do a direct send without displaying the mail dialog 
// mapi.SendMailDirect("testing", "body text"); 
+0

Ese artículo del código es muy bueno. – Jeremy

+4

Este código es útil para enviar archivos adjuntos al cliente de correo electrónico predeterminado. No todos usan Outlook, ¡así que este código es genial! – Brent

+0

¡Acabo de usarlo también, funciona perfectamente! :] – Eduardo

2

probar este

var proc = new System.Diagnostics.Process(); 
proc.StartInfo.FileName = string.Format("\"{0}\"", Process.GetProcessesByName("OUTLOOK")[0].Modules[0].FileName); 
proc.StartInfo.Arguments = string.Format(" /c ipm.note /m {0} /a \"{1}\"", "[email protected]", @"c:\attachments\file.txt"); 
proc.Start(); 
Cuestiones relacionadas