生成要由客户下载并从其Outlook帐户发送的电子邮件

时间:2010-07-13 17:55:19

标签: c# asp.net email response

我正在处理的应用程序的一个要求是允许用户向我们的服务台提交调试报告以查找致命错误(非常类似于Windows错误报告)。

我被告知电子邮件必须来自客户的邮件帐户,以防止服务台收到垃圾邮件并引发大量重复电话。

为了实现这一点,我正在尝试在服务器上撰写邮件消息,并在主体中为帮助台和错误报告添加一条好消息作为附件,然后将其添加到响应中,以便用户可以下载,打开并发送。

我尝试使用Outlook互操作性组件没有成功,这是一个没有实际意义的因素,因为我在谷歌搜索的最后6个小时内发现,创建多个应用程序实例是非常耗费资源的。< / p>

3 个答案:

答案 0 :(得分:4)

如果您希望用户发送电子邮件客户端,我看不到System.Net.Mail如何为您提供帮助。

您有两种选择:

  1. mailto:support@domain.com?subject=Error&body=Error message here...

  2. 让用户以某种格式下载电子邮件,在客户端打开并发送

  3. 选项1可能会因复杂的身体而崩溃。使用选项2,您需要找到所有邮件客户端(您的用户使用)支持的格式。

    使用选项1,您可以在服务器上本地存储电子邮件详细信息以防止出现错误ID,只需在主题中发送带有错误ID的电子邮件:

    mailto:support@domain.com?subject=Error 987771 encountered

答案 1 :(得分:2)

简单的答案是,您尝试实现的目标并非在所有平台和邮件客户端上实现。当被要求做不可能的事情时,明智地提出一个替代方案并提出建议。

假设您的故障报告只能从错误页面访问,那么您已经遇到了垃圾邮件的障碍 - 除非垃圾邮件发送者可以强制例外。

我总是通过将故障和文本记录到数据库中并将其与票务系统集成来处理此问题。也许还有一个mailto:正如Bruce建议使用subject = ID&amp; body = text来允许用户通过电子邮件发送内容。

我认为.eml格式文件不会有任何帮助 - 因为他们需要转发它,大多数用户可能会感到困惑。

.eml实际上是消息的纯文本,包括符合RFC-5322的标题。

答案 2 :(得分:2)

在我们的一个应用程序中,用户点击生成按钮,它会在outlook中创建并打开电子邮件。他们只需点击发送按钮即可。功能如下。

public static void generateEmail(string emailTo, string ccTo, string subject, string body, bool bcc)
        {
            Outlook.Application objOutlook = new Outlook.Application();
            Outlook.MailItem mailItem = (Outlook.MailItem)(objOutlook.CreateItem(OlItemType.olMailItem));

            /* Sets the recipient e-mails to be either sent by 'To:' or 'BCC:' 
             * depending on the boolean called 'bcc' passed. */
            if (!(bcc))
            {
                mailItem.To = emailTo;
            }
            else
            {
                mailItem.BCC = emailTo;
            }
            mailItem.CC = ccTo;
            mailItem.Subject = subject;
            mailItem.Body = body;
            mailItem.BodyFormat = OlBodyFormat.olFormatPlain;
            mailItem.Display(mailItem);
        }

正如您所看到的那样,目前正以明文形式输出电子邮件,因为它需要黑莓友好。如果需要一些格式选项,可以轻松地将格式更改为HTML或richtext。对于HTML使用mailItem.HTMLBody

希望这有帮助。

编辑:

我应该注意,这是在C#应用程序中使用的,并且它在函数所在的电子邮件类中引用了Microsoft.Office.Core和using Outlook