代码之家  ›  专栏  ›  技术社区  ›  P a u l

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

  •  20
  • P a u l  · 技术社区  · 16 年前

    4 回复  |  直到 14 年前
        1
  •  32
  •   Jay Riggs    16 年前

    试试这个:

        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo.FileName = "mailto:someone@somewhere.com?subject=hello&body=love my body";
        proc.Start();
    
        2
  •  10
  •   Scott Dorman    15 年前

    正确的方法是使用MAPI,但是对MAPI dll使用互操作代码是错误的 not actually a supported nor recommended way to do this . 我已经这样做了,只要你非常小心你的互操作代码,不要做更多的互动比打开邮件客户端发送电子邮件给你 没事吧。

    使用“mailto”方法有几个问题,其中最重要的一个问题是不能附加文件。

        3
  •  10
  •   Alex    15 年前

    如果您仅在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");
    
        4
  •  4
  •   P a u l    16 年前

    这就是我所尝试的:

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

    但如果正文太大,我会得到一个例外:

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

    所以这个问题仍然悬而未决,因为我需要处理长正文文本。我不知道这个错误的大小限制。