【问题标题】:How to send email using default email client?如何使用默认电子邮件客户端发送电子邮件?
【发布时间】:2010-10-23 00:17:32
【问题描述】:

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

【问题讨论】:

    标签: .net winforms email


    【解决方案1】:

    如果您仅在 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");
    

    【讨论】:

    • 很棒的发现!为我完成了这项工作。
    • 这会为我抛出 AccessViolationException
    • 迁移到 Outlook 2016 后,这对我不再有用
    【解决方案2】:

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

    使用“mailto”方法有几个问题,其中至少是您不能附加文件。

    【讨论】:

    • 那是一篇好文章。任何考虑使用 MAPI 的人都应该在尝试之前了解他们可能最终会遇到的问题。
    • @chessofnerd 这些可能是什么问题?你能说得更详细一点吗?
    【解决方案3】:

    这是我尝试过的:

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

    但如果正文太大,我会遇到异常:

    Win32Exception "传递给系统调用的数据区太小"

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

    【讨论】:

      【解决方案4】:

      试试这个:

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

      【讨论】:

      • 这个解决方案仍然不能处理前面提到的长正文。
      • 如果我需要包含附件怎么办?怎么做?
      猜你喜欢
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 2022-01-13
      • 2014-06-02
      • 1970-01-01
      • 2018-10-19
      • 2010-11-09
      • 2016-08-18
      相关资源
      最近更新 更多