messaging.sendemail()でエラーを処理する方法は?
-
10-10-2019 - |
質問
電子メールを送信するコードを書きました。うまくいきますが、私の目標は次のとおりです。
誰かが存在しないメールアドレスに送信されたら、結果を「false」または「失敗」などとして記録したい(そしてメールアドレスが有効な場合は、「成功」と言うだけです)
以下のコードで2つのことを試しました。
非email文字列 'foo@!'を提供しました
存在しないメールアドレスを提供しました 'thisdoesnotexistignsdfkjsdf@gmail.com' '
結果:
ケース1を実行してコードが入りました catch block
したがって、予想されるHTMLページにエラーメッセージを出力します。
ケース2を実行してコードが返されました 'ok sent!'
数分後、配信が失敗したというメールを受け取りました。
私の推測では、SendeMailResult ObjectのIssuccess()は、存在しないメールアドレスチェックについて実際に責任を負いません。電子メールが起動された場合にのみ気になりますか?
電子メールアカウントが存在しない場合にログする方法はありますか。
try {
Messaging.SendEmailResult[] resultMail = Messaging.sendEmail(new
Messaging.SingleEmailMessage[] { mail });
resultMail[0].getErrors();
//display success or error message
if (resultMail[0].isSuccess()) {
response = 'ok sent!';
} else {
response = resultMail[0].getErrors().get(0).getMessage();
}
//log
boolean isSuccess = resultMail[0].isSuccess();
Integer out = EmailLogger.logEmailSent(this, isSuccess);
} catch (System.EmailException ex) {
system.debug('============== email exception caught!!!=============');
response = ex.getMessage();
}
解決
電子メール(SMTP)はストアとフォワードプロトコルであり、送信時には、宛先のメールアドレスが存在しないことを知ることはできません。メッセージが実際に最終的な宛先サーバーに届くと、それを見つけることができます。
他のヒント
実際に存在するかどうかにかかわらず、電子メールアドレスを見つける方法がある場合、スパマーはブルートフォース攻撃を試みた可能性があります - メールのあらゆる組み合わせを試して、無限のスパムを送信してください:)
神に感謝します、それは不可能です。
所属していません StackOverflow