【问题标题】:PHPMailer DSN How to get error when address not existPHPMailer DSN地址不存在时如何获取错误
【发布时间】:2014-07-16 20:55:42
【问题描述】:

我为 PHP5/6 使用 PHPMailer,我尝试让脚本女巫发送邮件并收到类似“550 No such User Here”之类的错误。

我阅读了有关 DSN 的信息,并尝试了来自 How to set DSN (Delivery Status Notification) for PHPMailer? 主题的提示,但它不起作用。 (我发现functin收件人在哪里

return $this->sendCommand(
        'RCPT TO',
        'RCPT TO:<' . $toaddr . '>',
        array(250, 251)
    );
)

我尝试更改链接

'RCPT TO:<' . $toaddr . '>',

'RCPT TO:<' . $toaddr . '> NOTIFY=SUCCESS,FAILURE ORCPT=rfc822;' . $toaddr ."" .self::CRLF,

但我不工作。 我尝试通过函数 AddCustomHeader 添加它,但它也失败了。

这是我的代码:

private function send($username, $password, $from, $nameFrom, $replay, $subject, $email) {
    try {
        $_ = Zend_Registry::get('Zend_Translate');
        $mail = new PHPMailer(true);

        $mail->IsSMTP();
        $mail->SMTPDebug = 2;
        $mail->SMTPAuth = true;
        $mail->SMTPSecure = "tls";
        $mail->Host = "smtp.gmail.com";
        $mail->Port = 587;
        $mail->SMTPKeepAlive = true;
        $mail->Username = $username;
        $mail->Password = $password;
        $mail->SetFrom($from, $nameFrom);
        $mail->AddReplyTo($replay, $nameFrom);
        $mail->Subject = $subject;
        $mail->MsgHTML($this->_content);
        $mail->AddAddress($email);
//            $mail->AddCustomHeader( "X-Confirm-Reading-To: development.tabi@gmail.com" );
//            $mail->AddCustomHeader( "NOTIFY=SUCCESS,FAILURE ORCPT=rfc822; $email" );
//            $mail->AddCustomHeader( "Disposition-Notification-To: development.tabi@gmail.com" );
//            $mail->AddCustomHeader( "Return-receipt-to: development.tabi@gmail.com" );
        if (!$mail->Send()) {
            return array(
                'status' => false,
                'message' => $mail->ErrorInfo
            );
        } else {
            return array(
                'status' => true,
                'message' => $_->_('__MAIL_WAS_SEND__')
            );
        }
    } catch (Exception $e) {
        return array(
                'status' => false,
                'message' => $e->getMessage()
            );
    }
    catch (phpmailerException $e) {
        return array(
                'status' => false,
                'message' => $e->getMessage()
            );
    }
}

结果我需要脚本,其中: 当我写真实地址时,例如 my_real_addres@gmail.com 它将被发送, 但是当我写假地址时,前 my_fake_addres_which_not_exist@gmail.com 将返回代码 550 或任何其他错误。

有没有办法做到这一点?因为我需要获取并保存所有信息。

【问题讨论】:

    标签: php email


    【解决方案1】:

    请记住,由于垃圾邮件程序和电子邮件验证脚本(例如您的)。许多邮件服务器不发送这些响应。

    如果他们这样做了,他们就会被垃圾邮件机器人淹没,如果这些电子邮件存在,他们会要求他们的整个邮件数据库(数百万条记录)。

    因此,现在大多数邮件服务器都禁用了它。

    来源:

    Is there a way to test if an E-Mail address exists without sending a test mail?

    How to check if an email address exists without sending an email?

    编辑:

    基本上,服务器管理员可以禁用所有这些功能。他们甚至可能返回伪造的信息等。这一切都是为了让垃圾邮件发送者无法使用(合法用途会因此受到影响)。

    还有其他方法可以验证电子邮件是否存在。要求回复、确认收货等。

    某些服务器在无法传递邮件时会向您返回电子邮件。但这并不是 100% 确定的行为,因为垃圾邮件发送者可能会使用随机生成的电子邮件向服务器发送垃圾邮件并等待返回。

    实施这些措施是为了防止垃圾邮件发送者使用暴力的大量电子邮件检查。

    他们可以对谷歌服务器运行字典攻击并快速创建所有现有电子邮件的列表。

    如果您想检查您的时事通讯订阅者之一是否删除了电子邮件或从随机站点抓取了电子邮件并想要确认,那么您不知道您想要实现什么。

    您应该遵循一个原则:默认情况下所有电子邮件都未经验证。你永远不知道它是否真实,除非它被recipent通过点击链接、回答等验证。
    在我看来,应该没有“100% 不存在”的状态,因为您无法验证它。

    【讨论】:

    • 感谢您的回复。因此,如果我很好理解有两种方法,女巫有时会起作用,VRFY 和 RCPT TO。如果此方法不支持,我只能在添加到列表时过滤电子邮件,仅此而已,对吧?
    • 更新了答案,提供了更多关于它在当前世界中如何工作的背景。
    • 发布一些为您提供更多链接的链接实际上是一个糟糕的答案^^
    • 回答的路径无关紧要。输出在这里是最重要的。复制内容不是。如果您的意思是:在答案之一中“查看更多信息”。它对答案的扩展提供了答案。基本上,如果可能的话,这个问题会回答。或者我认为 :) 他没有问它是如何工作的,而是问它是否有效。
    猜你喜欢
    • 1970-01-01
    • 2016-07-07
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多