如何处理Messaging.SendeMail()中的错误?
-
10-10-2019 - |
题
我写了代码发送电子邮件。它可以正常工作,但我的目标是:
当有人发送到不存在的电子邮件地址时,我想将结果记录为“ false”或“ fafer”等(以及电子邮件地址有效时,只需说“成功”)
我尝试了以下代码的两件事。
提供了非email字符串“ foo@!”
提供了不存在的电子邮件地址“ thisdoesnotexistignsdfkjsdf@gmail.com'
结果:
执行案例1导致代码进入 catch block
因此,在HTML页面上输出错误消息。
执行案例2导致代码返回 'ok sent!'
几分钟后,我收到电子邮件失败了。
我的猜测是sendemailresult对象的issuccess()对不存在的电子邮件地址检查并不真正负责。它只在乎电子邮件是发射的吗???
如果不存在电子邮件帐户,有什么办法可以记录,以便我可以在Apex代码中记录此类场合?
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