1

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

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

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

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

  2. 提供了不存在的电子邮件地址“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();
}
4

2 回答 2

4

电子邮件(SMTP)是一种存储转发协议,在发送时,您无法判断目标电子邮件地址不存在,只有在邮件真正到达最终目标服务器时才能发现。

于 2010-11-16T03:46:27.747 回答
1

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

感谢上帝,这是不可能的。

于 2011-01-05T13:25:55.210 回答