メール送信のために CrashRpt が行うこと:
電子メール システムは、単に MAPI を使用して電子メールを送信します。デフォルトのメールクライアントがあり、MAPI をサポートしている場合は、それを使用しようとします。詳細については、MailMsg.cpp を参照してください。
個人的体験:
私の会社での CrashRpt の使用法では、クラッシュ レポートを送信する作成した Web サービスを呼び出すように少し変更しました。そこで、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: