2008-10-20 89 views
1

在阅读this discussionthis discussion之后,有关使用CrashRpt生成故障转储并将其通过电子邮件发送给开发人员的信息,我一直很难找到任何指示/教程来配置库使用的电子邮件设置来发送电子邮件。如何配置CrashRpt中的电子邮件设置以发送崩溃转储?

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

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

在此先感谢您的帮助!我显然缺少一些东西。

回答

2

什么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:

相关问题