如何处理Messaging.sendEmail()中的错误?

时间:2010-11-16 02:39:25

标签: error-handling salesforce messages apex-code visualforce

我写了代码来发送电子邮件。它工作正常,但我的目标是:

当有人发送到不存在的电子邮件地址时,我想将结果记录为“错误”或“失败”等(当电子邮件地址有效时,只需说'成功')

我用下面的代码尝试了两件事。

  1. 提供非电子邮件字符串'foo @!'

  2. 提供了不存在的电子邮件地址'thisdoesnotexistignsdfkjsdf@gmail.com'

  3. 结果:

    执行案例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();
    }
    

2 个答案:

答案 0 :(得分:2)

电子邮件(SMTP)是一种存储转发协议,在发送时,您无法确定目标电子邮件地址是不存在的,只有在邮件实际到达最终目的地后才能找到它服务器

答案 1 :(得分:0)

如果有办法找到电子邮件地址是否真的存在,垃圾邮件发送者可能会尝试暴力攻击 - 尝试每种可能的电子邮件组合并发送无限垃圾邮件:)

谢天谢地,这是不可能的。