1

在阅读了这个讨论和关于使用 CrashRpt 生成故障转储并将其通过电子邮件发送给开发人员的讨论之后,我一直很难找到任何说明/教程来配置库用于发送电子邮件的电子邮件设置。

当您调用 install() 函数来初始化 CrashRpt 时,您指定了要将故障转储发送到的电子邮件地址,但是 CrashPrt 库如何知道如何将电子邮件发送到该地址?图书馆不需要知道每个用户的电子邮件客户端设置吗?

当我的代码发生致命崩溃时,会弹出 CrashRpt 对话框,当我输入我的电子邮件地址并单击发送按钮时,它会将我带到一个“保存文件”对话框,我可以在其中保存压缩包和指定的帐户在 Install() 函数中永远不会收到电子邮件。

提前感谢您的任何帮助!我显然错过了一些东西。

4

2 回答 2

2

CrashRpt 对电子邮件的作用:

电子邮件系统只是使用 MAPI 来发送您的电子邮件。如果您有一个并且支持 MAPI,它将尝试使用您的默认邮件客户端。查看 MailMsg.cpp 了解详细信息。

个人经验:

在我公司对 CrashRpt 的使用中,我们对其进行了一些修改,以调用我们创建的提交崩溃报告的 Web 服务。因此,我们完全从 CrashRpt 中删除了电子邮件代码。相反,我们在错误跟踪系统中有一个崩溃部分,当崩溃发生时自动提交。

要找到您的问题:

我可能会尝试调试 CrashRpt 代码,看看为什么它会给你一个保存对话框。相反,它应该只打开您的默认邮件客户端。也许你有一个旧版本的库,或者对话框资源有点乱。调试代码会告诉你这一点。

很可能正在调用 MailReport 但失败了。

在 DoModal 之后的原始CrashRpt 代码的 CrashHandler.cpp 中设置断点:

 mainDlg.m_pUDFiles = &m_files;
   if (IDOK == mainDlg.DoModal())
   {
      //Put breakpoint here <---------
      if (m_sTo.IsEmpty() || 
          !MailReport(rpt, sTempFileName, mainDlg.m_sEmail, mainDlg.m_sDescription))
      {
         SaveReport(rpt, sTempFileName);
      }
   }

检查为什么 MailReport 没有被调用。它要么是对话框资源,要么是您的 m_sTo 未填充,或者您可以单步执行 MailMsg.cpp 并查看 MAPI 失败的位置。

替代解决方案:

一个简单的解决方法是,如果您在上面发现 MailReport 正在被调用,但没有成功,则只需执行一个 ShellExecute 并指定一个 mailto:

您甚至可以尝试使用 MAPI 方法,但如果无法执行 mailto:

于 2008-10-20T03:44:27.527 回答
1

您可以在此处找到 CrashRpt 文档、常见问题解答并下载新的 CrashRpt v1.1 http://code.google.com/p/crashrpt/

于 2009-08-07T05:51:02.903 回答