C# 生成由客户端下载并从其outlook帐户发送的电子邮件

C# 生成由客户端下载并从其outlook帐户发送的电子邮件,c#,asp.net,email,response,C#,Asp.net,Email,Response,我正在处理的应用程序的一个要求是允许用户向我们的帮助台提交致命错误的调试报告(非常类似于windows错误报告) 有人告诉我,电子邮件必须来自客户的邮件帐户,以防止帮助台收到垃圾邮件和大量重复呼叫 为了实现这一点,我尝试在服务器上编写一条邮件消息,在正文中为帮助台编写一条漂亮的消息,并将错误报告作为附件,然后将其添加到响应中,以便用户可以下载、打开和发送它 我尝试使用Outlook互操作性组件,但没有成功,这是一个没有实际意义的问题,因为在过去6个小时的谷歌搜索中,我发现创建多个应用程序实例非常

我正在处理的应用程序的一个要求是允许用户向我们的帮助台提交致命错误的调试报告(非常类似于windows错误报告)

有人告诉我,电子邮件必须来自客户的邮件帐户,以防止帮助台收到垃圾邮件和大量重复呼叫

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


我尝试使用Outlook互操作性组件,但没有成功,这是一个没有实际意义的问题,因为在过去6个小时的谷歌搜索中,我发现创建多个应用程序实例非常耗费资源。

如果希望用户向客户端发送电子邮件,我看不出System.Net.Mail对您有什么帮助

您有两个选择:

  • mailto:support@domain.com?主题=错误和正文=此处的错误消息…

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

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

    使用选项1,您可以根据某个错误ID在服务器上本地存储电子邮件详细信息,然后只发送主题中包含错误ID的电子邮件:


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

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

    假设您的错误报告只能从错误页面访问,那么您已经有了垃圾邮件的障碍-除非垃圾邮件发送者可以强制执行异常

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

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


    A.根据RFC-5322,eml实际上是邮件的纯文本,包括标题。

    在我们的一个应用程序中,用户点击“生成”按钮,它在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,并在函数所在的电子邮件类中使用Outlook。

    您是否尝试过让他们下载.eml文件并用Outlook打开它?您是否尝试过启用模拟的
    System.Net.Mail
    ?你可以试试@Borealid——我还没有试过.eml文件。基本上,只要在Outlook中打开,我就不会感到烦恼@Jaroslav我已经设法用System.Net.Mail构建了邮件我面临的问题是如何将其转换为可下载的文件我知道这很旧,但它是我在谷歌上的顶级搜索结果。这看起来像是一个答案:谢谢你的意见,布鲁斯。我以前尝试过使用mailto链接,但正如您非常正确地指出的,当我尝试添加堆栈跟踪之类的东西时,它很快就会中断。另外,在IE8中,mailto链接明显有512个字符的限制。我正试图实现我的原始问题中所述的选项2,原因无非是由于我们的帮助台的操作方式,这是一个要求。当然,这是在客户端应用程序中,而不是在问题中的ASP.NET应用程序中?这对我很有帮助,但首先我必须安装Office开发工具(在VS:Tools in menu bar=>Get Tools and Features中)。然后,要将Outlook作为上述Gage引用,您需要使用Outlook=Microsoft.Office.Interop.Outlook;将其添加到类的顶部。