【问题标题】:how to invoke user's (non-outlook) email application from .NET program如何从 .NET 程序调用用户的(非 Outlook)电子邮件应用程序
【发布时间】:2011-06-02 21:12:01
【问题描述】:

我的 C# 应用程序需要通过电子邮件将问题报告从用户计算机发送给支持技术人员。没有通用的 SMTP 服务器可用,所以我认为我不能使用 System.Net.Mail;相反,必须使用用户自己的电子邮件程序和帐户发送消息。我可以使用办公自动化来启动 Outlook 并撰写消息。但是如果用户没有使用 Outlook 怎么办?是否有多个电子邮件客户端支持的更通用机制?还是有知道如何检测和调用各种客户端的库?

编辑:因为这是提交问题报告,我需要包含附件或(最坏的情况下)一个长消息正文...

【问题讨论】:

  • 请记住,您的方法将在用户的客户端中启动一封电子邮件,但他们仍然必须手动发送电子邮件。
  • @JeffH -- 我很好(事实上我更喜欢它)但是谢谢你提到它;显然还有其他情况会出现问题。

标签: c# .net email


【解决方案1】:
Process.Start("mailto:hurr@durr.com");

Process.Start 方法将执行特定指令的责任交给操作系统。 Windows 将识别mailto 方案并启动适当的邮件客户端。这是使用Default Programs 配置的。

【讨论】:

  • 但是如何编写消息呢?
  • @Eric:看我的回答...正文有问题,但是主题、抄送和密送很容易。
  • @eric mailto 方案是一个标准 URI,有许多不同的查询/片段部分,您可以使用它们来配置电子邮件。查看 RFC 了解更多信息:tools.ietf.org/html/rfc2368
  • @eric 如果您有更具体的要求(例如自动发送电子邮件——恕我直言,这是一个不好的要求),您将不得不为特定的电子邮件客户端使用自动化。这比 Process.Start 可以处理的要重一些。
【解决方案2】:

如果您希望它与任何电子邮件应用程序一起使用,您可能只需使用 Process.Start 和带有简短正文和主题定义的 mailto: URL。

这在一般情况下应该可以工作:

Process.Start(@"mailto:your@email.com?cc=other@email.com&bcc=stillanother@email.com&subject=Bug Report&body=This may or may not show up.");

但是,邮件客户端通常会忽略正文标记。不幸的是,没有通用的方法可以在 mailto: 中获取所有内容。

【讨论】:

    【解决方案3】:

    对于新的行主体使用 %0A,对于新段落使用 %0A%0A

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 2010-12-20
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多