2008-10-20 90 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:

相關問題