如何在CrashRpt中配置电子邮件设置以发送故障转储?

时间:2008-10-20 03:35:44

标签: c++ visual-studio crashrpt

在阅读this discussionthis discussion关于使用CrashRpt生成崩溃转储并通过电子邮件发送给开发人员之后,我一直很难找到配置所用电子邮件设置的任何说明/教程由图书馆发送电子邮件。

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

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

提前感谢您的帮助!我显然遗漏了一些东西。

2 个答案:

答案 0 :(得分:2)

CrashRpt为发送电子邮件做了什​​么:

电子邮件系统只使用MAPI发送您的电子邮件。如果您有默认邮件客户端,它将尝试使用您的默认邮件客户端,如果它支持MAPI。有关详细信息,请查看MailMsg.cpp。

个人经验:

在我公司使用CrashRpt的过程中,我们稍微修改了一下,然后调用我们创建的提交崩溃报告的Web服务。所以我们完全从CrashRpt中删除了电子邮件代码。相反,我们在我们的错误跟踪系统中有一个崩溃部分,在崩溃发生时自动提交。

要找到您的问题:

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

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

在DoModal之后的原始CrashRpt code的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:

答案 1 :(得分:1)

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