在阅读this discussion和this discussion关于使用CrashRpt生成崩溃转储并通过电子邮件发送给开发人员之后,我一直很难找到配置所用电子邮件设置的任何说明/教程由图书馆发送电子邮件。
当你调用install()函数来初始化CrashRpt时,你指定了你想要发送崩溃转储的电子邮件地址,但是CrashPrt库如何知道如何将电子邮件发送到该地址?图书馆不是必须知道每个用户的电子邮件客户端设置吗?
当我的代码发生致命崩溃时,会弹出CrashRpt对话框,当我输入我的电子邮件地址并单击发送按钮时,它会转到“保存文件”对话框,我可以在其中保存压缩包和Install()函数中指定的帐户永远不会收到电子邮件。
提前感谢您的帮助!我显然遗漏了一些东西。
答案 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/