什么CrashRpt确实为发送电子邮件:
电子邮件系统只需使用MAPI发送电子邮件。如果您有一个,它会尝试使用您的默认邮件客户端,并且它支持MAPI。有关详细信息,请参阅MailMsg.cpp。
个人经验:
在我公司的CrashRpt的使用,我们修改了一点,虽然叫我们创建它提交崩溃报告的Web服务。所以我们完全从CrashRpt中解放了电子邮件代码。相反,我们在我们的错误跟踪系统中有一个在发生崩溃时自动提交崩溃的部分。
要找到你的问题:
我也许会尝试调试CrashRpt代码,看看它为什么给你一个保存对话框。它应该只是打开您的默认邮件客户端。也许你有一个旧版本的库,或者对话框资源有点混乱。调试代码会告诉你这个。
最可能的MailReport被调用,但失败。
原CrashRpt code的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的方法,但如果失败做一个mailto: