送信したメールが届かない場合、原因を特定するにはどうすればよいですか?
私のアプリは、Apache commons-mail ライブラリを使用して SMTP 経由で電子メールを送信します。テスト目的で、gmail SMTP サーバーを使用しています。(私たちの本番アプリは、ネットワーク上の内部サーバーを使用しています)。
テスト サーバーの 1 つのケースでは、添付ファイル付きの 5 つの電子メールを生成するバッチ ジョブがあります。一部の電子メールは受信され、他の電子メールは送信済みとしてマークされますが、受信トレイには表示されません。どのメールが受信され、どのメールが黙って消えるかというパターンはないようです。
エラーを送信してチェックするコードは次のようになります。
final Mail mail = ...;
//The Mail class is our app's mail object, which provides data used to generate the MIME e-mail and record the results.
final MultiPartEmail email = ...;
try {
email.setSentDate(mail.getDateSent());
email.send();
}
catch (EmailException ee) {
success = false;
mail.setDateSent(null);
getLog().error("Mail not sent: ", ee);
if (ee.getMessage().indexOf("receiver address required") != -1) {
mail.setErrorMessage(ee.getMessage());
getLog().error(mail.toString());
}
}
デバッガーで、例外がスローされていないことを確認しました。
私の最初の推測は、添付ファイルのサイズが大きすぎるということでした。しかし、gmail はおそらく 25MB の添付ファイルをサポートし、私の最大の添付ファイルは 14.3 MB です。場合によっては、5 通の電子メールのバッチ全体を実行すると、添付ファイルが最も大きい電子メールが通過し、小さい添付ファイルが消えてしまいます。