在不发送的情况下测试PHPMailer用户名和密码,即检查连接

时间:2017-01-12 10:07:27

标签: php phpmailer

我正在使用PHPMailer,其电子邮件帐户必须每90天更改一次密码。

是否可以在不实际发送电子邮件的情况下检查PHPMailer与帐户的连接?理想情况下,我想要一个用户点击标题为“检查连接”的按钮,然后返回“连接成功”或“连接不成功”。

请注意,这不是要检查您是否可以连接到SMTP,而是检查用户名和密码并返回结果。

我看到有人提到使用Connect()函数,但我无法使用它。

感谢。

1 个答案:

答案 0 :(得分:4)

你知道你已经有一些代码可以显示如何执行此操作吗?它是one of the examples provided with PHPMailer

以下是其中的大部分内容:

require '../PHPMailerAutoload.php';
//Create a new SMTP instance
$smtp = new SMTP;
//Enable connection-level debug output
$smtp->do_debug = SMTP::DEBUG_CONNECTION;
try {
    //Connect to an SMTP server
    if (!$smtp->connect('mail.example.com', 25)) {
        throw new Exception('Connect failed');
    }
    //Say hello
    if (!$smtp->hello(gethostname())) {
        throw new Exception('EHLO failed: ' . $smtp->getError()['error']);
    }
    //Get the list of ESMTP services the server offers
    $e = $smtp->getServerExtList();
    //If server can do TLS encryption, use it
    if (is_array($e) && array_key_exists('STARTTLS', $e)) {
        $tlsok = $smtp->startTLS();
        if (!$tlsok) {
            throw new Exception('Failed to start encryption: ' . $smtp->getError()['error']);
        }
        //Repeat EHLO after STARTTLS
        if (!$smtp->hello(gethostname())) {
            throw new Exception('EHLO (2) failed: ' . $smtp->getError()['error']);
        }
        //Get new capabilities list, which will usually now include AUTH if it didn't before
        $e = $smtp->getServerExtList();
    }
    //If server supports authentication, do it (even if no encryption)
    if (is_array($e) && array_key_exists('AUTH', $e)) {
        if ($smtp->authenticate('username', 'password')) {
            echo "Connected ok!";
        } else {
            throw new Exception('Authentication failed: ' . $smtp->getError()['error']);
        }
    }
} catch (Exception $e) {
    echo 'SMTP error: ' . $e->getMessage(), "\n";
}