PHPMailer dev-xoauth验证失败

时间:2015-06-24 16:10:46

标签: oauth-2.0 phpmailer

所以我已经浏览了github - phpmailer xoauth tree上的所有文档来相应地设置我的脚本以使用Google的oauth2。我正在尝试从halcyonco.io向我自己发送电子邮件。域名只是为了测试这个站点。在本地发送表单时遇到相同的错误。

我的问题是,当我提交表单时收到此错误:

SERVER -> CLIENT: 220 mx.google.com ESMTP pj4sm27148656pbb.29 - gsmtp
CLIENT -> SERVER: EHLO halcyonco.io
SERVER -> CLIENT: 250-mx.google.com at your service, [68.65.121.206]250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8
CLIENT -> SERVER: STARTTLS
SERVER -> CLIENT: 220 2.0.0 Ready to start TLS
CLIENT -> SERVER: EHLO halcyonco.io
SERVER -> CLIENT: 250-mx.google.com at your service, [68.65.121.206]
250-SIZE 35882577250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN XOAUTH
250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING
250 SMTPUTF8
SMTP Error: Could not authenticate.
CLIENT -> SERVER: QUIT
SERVER -> CLIENT: 221 2.0.0 closing connection pj4sm27148656pbb.29 - gsmtp
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

我已经与Namecheap保持联系,因为我有托管和域名,但一个半小时后他们无法帮助我。

以下是我的contact.php脚本

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = trim($_POST["user_name"]);
    $email = trim($_POST["user_email"]);
    $comment = trim($_POST["comment"]);

    if ($name == "" OR $email == "" OR $comment == "") {
        echo '<h3>Please fill out all forms.</h3>';
        exit;
    }

    // SPAM protection 
    foreach ($_POST as $value) {
        if ( stripos($value, 'Content-Type') !== FALSE ) {
            echo "There was a problem with the information you entered.";
            exit;
        }
    }


    //SMTP needs accurate times, and the PHP time zone MUST be set
    //This should be done in your php.ini, but this is how to do it if you don't have access to that
    date_default_timezone_set('America/New_York');

    require '../vendor/phpmailer/phpmailer/PHPMailerAutoload.php';

    //Load dependnecies from composer
    //If this causes an error, run 'composer install'
    require '../vendor/autoload.php';

    //Create a new PHPMailer instance
    $mail = new PHPMailerOAuth;

    //Tell PHPMailer to use SMTP
    $mail->isSMTP();

    //Enable SMTP debugging
    // 0 = off (for production use)
    // 1 = client messages
    // 2 = client and server messages
    $mail->SMTPDebug = 2;

    //Ask for HTML-friendly debug output
    $mail->Debugoutput = 'html';

    //Set the hostname of the mail server
    $mail->Host = 'smtp.gmail.com';

    //Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
    $mail->Port = 587;

    //Set the encryption system to use - ssl (deprecated) or tls
    $mail->SMTPSecure = 'tls';

    //Whether to use SMTP authentication
    $mail->SMTPAuth = true;

    //Set AuthType
    $mail->AuthType = 'XOAUTH2';

    //User Email to use for SMTP authentication - Use the same Email used in Google Developer Console
    $mail->oauthUserEmail = "myemail@gmail.com";

    //Obtained From Google Developer Console
    $mail->oauthClientId = "1234567890.apps.googleusercontent.com";

    //Obtained From Google Developer Console
    $mail->oauthClientSecret = "123456789";

    //Obtained By running get_oauth_token.php after setting up APP in Google Developer Console.
    //Set Redirect URI in Developer Console as [https/http]://<yourdomain>/<folder>/get_oauth_token.php
    // eg: http://localhost/phpmail/get_oauth_token.php
    $mail->oauthRefreshToken = "1/ABCD12345EFGH6789";

    //Set who the message is to be sent from
    //For gmail, this generally needs to be the same as the user you logged in as
    $mail->setFrom($email, $name);

    //Set who the message is to be sent to
    $mail->addAddress('myemail@gmail.com', 'Brandon Smith');

    //Set the subject line
    $mail->Subject = 'Promethean Fitness Enquiry | ' . $name;

    //Read an HTML message body from an external file, convert referenced images to embedded,
    //convert HTML into a basic plain-text alternative body
    $mail->msgHTML = $comment;

    //Replace the plain text body with one created manually
    $mail->Body    = $comment;
    $mail->AltBody = $comment;

    //Attach an image file

    //send the message, check for errors
    if (!$mail->send()) {
            echo '<h3>Please ensure you have entered a correct email address.</h3><br>';
        echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
        header("Location: ../html/thanks.html");
            exit;
    }


    //This is a spam protection 
    if ($_POST["user_address"] != "") {
        echo "Your form submission has an error";
        exit;
    }

}



?>

为了解决这个问题,我需要做些什么的帮助会很棒。

0 个答案:

没有答案