C#: 通过电子邮件发送支持请求的最佳方法是什么?

3
我有一个Windows表单应用程序,我正在添加一个请求支持表单,并希望用户能够输入值并按下按钮。一旦按钮被按下,我可以:
  1. 打开新的邮件消息并自动填充消息(不确定如何做到这一点)
  2. 通过我的网站上的HTTP表单提交请求(我知道如何做到这一点)
  3. 直接从应用程序代码发送电子邮件(我知道如何做到这一点)
我想知道什么是最好的方法?我认为选项1最透明,用户将看到确切地发送了什么,但我不确定如何确保它无论他们使用什么电子邮件客户端都能正常工作。
我认为选项二存在潜在问题,特别是防火墙可能会阻止提交。但选项2将允许我立即为他们的请求提供一个票号。
感谢您的帮助。

您可以使用System.Net.Mail对象发送邮件,有关更多信息,请参见http://www.systemnetmail.com。对于选项,我不确定该推荐什么。 - Brian Mains
@Brian:我认为是第三个选项。 - H H
4个回答

2

对于 Option 1,建议使用 mailto 处理器。

按以下方式格式化您的字符串:string.Format("mailto:support@example.com?subject={0}&body={1}", subject, body)。不要忘记对主题和正文进行 UrlEncode 编码。

然后使用 System.Diagnostics.Process.Start() 方法启动该字符串。

这将在系统上启动已注册的邮件处理程序(如 Outlook、Windows Live Mail、Thunderbird 等)。


1

对于选项1:如果消息体很短,则从代码中调用mailto处理程序不再要求使用outlook。它有点像一种简单的hack,但对于本地邮件客户端完全跨平台。(但如果他们使用类似gmail这样的东西,您仍然没有解决问题)


0

选项2)是最好的选择,可以避免企业防火墙问题,因为HTTP端口可能不会被阻止。

选项2)适用于简单配置。您唯一需要配置的密钥是服务/页面URL。然后您的SMTP配置将保留在您的Web服务器上。

现在,您必须在使用网页(如果已存在)或Web服务之间进行选择(最适合您的功能)。


0

如果选择(1)的话,你需要准备处理Outlook版本问题。但这并不难(如果我们讨论的是Outlook的最新版本)。

        //using Microsoft.Office.Interop.Outlook;       
        private void OutlookMail(string Subject, string Body)
        {

        ApplicationClass app = new ApplicationClass();
        NameSpaceClass ns = (NameSpaceClass)app.GetNamespace("mapi");
        ns.Logon("", "", true, true);
        MailItem mi =
            (MailItem)app.CreateItem(OlItemType.olMailItem);
        mi.Subject = Subject;

        int EOFPos = Body.IndexOf(char.Parse("\0"));
        if (EOFPos != -1)
        {
            log.Error("EOF found in Mail body");
            ErrorDialog ed = new ErrorDialog(TietoEnator.Common.ErrorDialog.ErrorDialog.Style.OK, "Export Error", "File could not be exported correctly, please inform responsible person", "", "EOF char detected in the body of email message.");
            ed.ShowDialog();
        Body=Body.Replace("\0", "");
        }
        mi.HTMLBody = "<html><head><META content='text/html; charset=CP1257' http-equiv=Content-Type></head><body><table>"+Body+"</table></body></html>";

        mi.BodyFormat = OlBodyFormat.olFormatHTML;//.olFormatPlain; 
        mi.Display(0); // show it non - modally
        ns.Logoff();
    }

顺便说一下,为了自动支持请求,我计划在我的当前项目中使用"Microsoft Enterprise Logging Support Block"的电子邮件发送功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接