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: