【问题标题】:Generate an e-mail to be downloaded by client and sent from their outlook account生成要由客户下载并从其 Outlook 帐户发送的电子邮件
【发布时间】:2011-03-15 11:25:36
【问题描述】:

我正在开发的应用程序的其中一个要求是让用户能够向我们的帮助台提交调试报告以发现致命错误(很像 Windows 错误报告)。

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

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

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

【问题讨论】:

  • 您是否尝试过让他们下载 .eml 文件并使用 Outlook 打开它?
  • 您是否尝试过启用模拟的System.Net.Mail?你可以试试stackoverflow.com/questions/1448019/…
  • @Borealid - 我没有尝试过 .eml 文件。基本上,只要在 Outlook 中打开,我就不会打扰。 @Jaroslav 我已经设法使用 System.Net.Mail 构建消息,我面临的问题是如何将其转换为可下载的文件
  • 我知道这是旧的,但它是我在谷歌上的热门搜索结果。这看起来像一个答案:stackoverflow.com/a/1264724/959977

标签: c# asp.net email response


【解决方案1】:

如果您希望用户发送电子邮件客户端,我不知道 System.Net.Mail 将如何帮助您。

你有两个选择:

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

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

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

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

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

【讨论】:

  • 感谢您的意见,布鲁斯。我之前曾尝试使用 mailto 链接,但正如您正确指出的那样,当我尝试添加诸如堆栈跟踪之类的东西时,它很快就会中断。另外,在 IE8 中,mailto 链接显然有 512 个字符的限制。我正在尝试实现我最初的问题中描述的选项 2,除了我们的帮助台运作方式的要求之外,没有其他原因。
【解决方案2】:

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

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

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

我认为 .eml 格式的文件也无济于事 - 因为他们需要转发它,而且大多数用户可能会感到困惑。

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

【讨论】:

    【解决方案3】:

    在我们的一个应用程序中,用户点击生成按钮,它会在 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 或富文本。对于 HTML 使用 mailItem.HTMLBody

    希望这会有所帮助。

    编辑:

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

    【讨论】:

    • 这肯定是在客户端应用程序中,而不是问题中的 ASP.NET 应用程序中?
    • 这对我很有帮助,但首先我必须安装 Office 开发工具(在 VS:菜单栏中的工具 => 获取工具和功能)。然后,要像上面提到的 Gage 一样引用 Outlook,您需要将 using Outlook = Microsoft.Office.Interop.Outlook; 添加到类的顶部。
    猜你喜欢
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多