如何使用默认电子邮件客户端发送邮件?

时间:2009-04-30 23:13:52

标签: .net winforms email

我想使用系统的默认电子邮件客户端(thunderbird,outlook等)从.net Windows窗体应用程序发送电子邮件。我想预设主题和正文 - 我认为有一种方法可以通过向Windows资源管理器发送这样的内容来实现:“mailto:test@example.invalid?subject = mysubject& body = mymessage”。你有这方面的例子吗?

4 个答案:

答案 0 :(得分:31)

试试这个:

    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.StartInfo.FileName = "mailto:someone@somewhere.com?subject=hello&body=love my body";
    proc.Start();

答案 1 :(得分:10)

如果您只在MS 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("person1@somewhere.com");
mapi.AddRecipientTo("person2@somewhere.com");
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");

答案 2 :(得分:10)

执行此操作的正确方法是使用MAPI,但使用MAPI dll的互操作代码为not actually a supported nor recommended way to do this。我已经做到了这一点,只要您对互操作代码非常小心,并且没有比打开邮件客户端发送电子邮件更多的互动, 应该 没关系。

使用“mailto”方法存在一些问题,其中最不重要的是您无法附加文件。

答案 3 :(得分:4)

这就是我的尝试:

Process.Start("mailto:demo@example.invalid?subject=" +
    HttpUtility.HtmlAttributeEncode("Application error report") + 
    "&body=" + HttpUtility.HtmlAttributeEncode(memoEdit1.Text));

但是如果正文文本太大,我会得到例外:

Win32Exception“传递给系统调用的数据区太小了”

所以问题仍然存在,因为我需要处理长体文。我不知道这个错误的大小限制。