阅读关于使用 CrashRpt 生成故障转储并将其通过电子邮件发送给开发人员的此讨论和此讨论后,我一直很难找到任何说明/教程来配置库使用的电子邮件设置发送电子邮件。
当您调用
Install()
函数来初始化 CrashRpt 时,您指定要将故障转储发送到的电子邮件地址,但 CrashPrt 库如何知道如何将电子邮件发送到该地址?图书馆难道不需要了解每个用户的电子邮件客户端设置吗?
当我的代码中发生致命崩溃时,会弹出 CrashRpt 对话框,当我输入电子邮件地址并单击发送按钮时,它会将我带到“保存文件”对话框,我可以在其中保存压缩包和帐户
Install()
函数中指定的永远不会收到电子邮件。
预先感谢您提供的所有帮助!我显然错过了一些东西。
CrashRpt 对于电子邮件有何作用:
电子邮件系统仅使用 MAPI 发送您的电子邮件。如果您有默认邮件客户端并且支持 MAPI,它将尝试使用您的默认邮件客户端。查看 MailMsg.cpp 了解详细信息。
个人经历:
在我公司对 CrashRpt 的使用中,我们对其进行了一些修改,以调用我们创建的用于提交崩溃报告的 Web 服务。因此,我们从 CrashRpt 中完全删除了电子邮件代码。相反,我们的错误跟踪系统中有一个崩溃部分,当崩溃发生时会自动提交。
找到您的问题:
我可能会尝试调试 CrashRpt 代码,看看为什么它会给你一个保存对话框。它应该只打开您的默认邮件客户端。也许您有旧版本的库,或者对话框资源有点混乱。调试代码会告诉你这一点。
很可能 MailReport 正在被调用但失败。
在原始CrashRpt代码的CrashHandler.cpp中DoModal之后设置一个断点:
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 方法,但如果无法发送邮件:
您可以在此处找到 CrashRpt 文档、常见问题解答并下载新的 CrashRpt v1.1 http://code.google.com/p/crashrpt/