2009-07-28 99 views
23

目前我使用下面的方法来打开用户的Outlook电子邮件帐户,并使用该相关内容的电子邮件发送:带附件的C#MailTo?

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

我想不过,能够与附加文件来填充电子邮件。

类似:

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"); 
} 

然而,这似乎并没有工作。 有没有人知道一种方法,将允许这个工作!?

帮助非常感谢。

问候。

回答

10

mailto:不正式支持附件。我听说过的Outlook 2003将与该语法工作:

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

一个更好的方式来处理,这是发送邮件使用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

这个应用程序是否真的需要使用Outlook?是否有没有使用System.Net.Mail命名空间的原因?

如果你确实需要使用Outlook(和我不会推荐它,因为那时你在第三方的依赖有可能改变你的基础应用程序),您将需要寻找到Microsoft.Office命名空间

我会从这里开始: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.aspx

+0

是的,它确实....... – Goober 2009-07-28 16:10:02

47

如果您要访问的默认电子邮件客户端,那么你可以(仅在Windows操作系统的作品)的使用MAPI32.DLL。 看看下面的包装:

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

代码如下所示:

MAPI mapi = new MAPI(); 
mapi.AddAttachment("c:\\temp\\file1.txt"); 
mapi.AddAttachment("c:\\temp\\file2.txt"); 
mapi.AddRecipientTo("[email protected]"); 
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

该codeproject文章是非常好的。 – Jeremy 2009-10-15 18:17:26

2

试试这个

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();