Что CrashRpt делает для отправки по электронной почте:
Система электронной почты просто использует MAPI для отправки вашей электронной почты. Который попытался бы использовать ваш почтовый клиент по умолчанию, если он у вас есть, и если он поддерживает MAPI. Посмотрите на MailMsg.cpp для деталей.
Личный опыт:
При использовании моей компании CrashRpt мы немного изменили его, хотя для вызова созданного нами веб-сервиса, который представляет отчет о сбое. Таким образом, мы полностью удалили код электронной почты из 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, но если это не помогло сделать mailto: