2017-10-20 28 views
0

私はComposerを使用してPHPMailerをインストールし、Google XOAuth2認証を使用するためにComposerの依存関係をすべて追加しました。 次に、Gmail APIを使用してリフレッシュトークンを取得するためのチュートリアルをいくつか行ってきました。
すべてがうまくいくはずです。私はすべての紙の仕事を正しくやった。右?!

私の最高の意思とすべてのドキュメントにもかかわらず、私は

をsmtp.gmail.comにするSMTP接続を確立することはできないんだけど、私はこのエラーを取得する:xampp + PHPMailer + Gmail + XOAuth2 = SMTPエラー:SMTPホストに接続できません

2017-10-20 18:01:45 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP c17sm2715728wrg.26 - gsmtp 
2017-10-20 18:01:45 CLIENT -> SERVER: EHLO localhost 
2017-10-20 18:01:45 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [151.61.40.58]250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8 
2017-10-20 18:01:45 CLIENT -> SERVER: STARTTLS 
2017-10-20 18:01:45 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS 
SMTP Error: Could not connect to SMTP host. 
2017-10-20 18:01:45 CLIENT -> SERVER: QUIT 
2017-10-20 18:01:45 
2017-10-20 18:01:45 
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting 
Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting 


私のコードはストレートからですPHPMailer Gmail XOAUTHの例

use PHPMailer\PHPMailer\PHPMailer; 
use PHPMailer\PHPMailer\OAuth; 

use League\OAuth2\Client\Provider\Google; 

date_default_timezone_set('Europe/Rome'); 

require 'lib/php/vendor/autoload.php'; 

$mail = new PHPMailer; 

$mail->isSMTP(); 
$mail->SMTPDebug = 2; 
$mail->Host = 'smtp.gmail.com'; 
$mail->Port = 587; 
$mail->SMTPSecure = 'tls'; 
$mail->SMTPAuth = true; 
$mail->AuthType = 'XOAUTH2'; 

$email = 'seckrit-stuff'; 
$clientId = 'seckrit-stuff'; 
$clientSecret = 'seckrit-stuff'; 
$refreshToken = 'seckrit-stuff'; 

$provider = new Google(
    [ 
     'clientId' => $clientId, 
     'clientSecret' => $clientSecret, 
    ] 
); 
$mail->setOAuth(
    new OAuth(
     [ 
      'provider' => $provider, 
      'clientId' => $clientId, 
      'clientSecret' => $clientSecret, 
      'refreshToken' => $refreshToken, 
      'userName' => $email, 
     ] 
    ) 
); 

$mail->setFrom($email, 'Matteo Bini'); 
$mail->addAddress('seckrit-stuff', 'Matteo Bini'); 
$mail->Subject = 'PHPMailer GMail XOAUTH2 SMTP test'; 
$mail->CharSet = 'utf-8'; 
$mail->msgHTML('<strong>HTML</strong> message!'); 
$mail->AltBody = 'This is a plain-text message body'; 


if (!$mail->send()) { 
    echo "Mailer Error: " . $mail->ErrorInfo; 
} else { 
    echo "Message sent!"; 
} 


あなたは私がローカルホストでのGmail(XAMPP)でphpmailerのを使用する方法を見つける助けてくださいもらえますか?

+0

Googleアカウントの[安全性の低いアプリを許可する:オフ]の設定を確認してください。 PHPコードでGmailを使用するには、それをオンにする必要があります。これは、通常のweb-appが安全性が低いと考えられるためです。 –

答えて

2

これはOAuthとは関係ありません。あなたはTLSレベルではるかに早い問題を抱えています。 openssl拡張子がないか、正しく設定されていないか、またはCA証明書が古くなっています。

この問題は、トラブルシューティングガイドで説明されています。このエラーは、opensslを使用してチェックします。

+0

質問を投稿する前にトラブルシューティングガイドを読み、xampp php.iniファイルのopenssl拡張機能を有効にしました。 トラブルシューティングガイドのヒントを使用して、echo(extension_loaded( 'openssl')? 'SSL loaded': 'SSL not loaded')の拡張機能をテストしました。 SSLが読み込まれています。 私は多かれ少なかれ何かをしなければなりませんか? – matteobin

+0

これはいいですが、ガイドのopensslコマンドラインの例を試してみてください。 SMTPDebug = 3も試してください。 – Synchro

+0

私は私の問題を解決しました。ありがとうございました! 私はSMTPDebug = 3を使用しました。エラーの内容を知り、この行をphp.ini openssl.cafile = C:\ xampp \ php \ extras \ ssl \ cacert.pemに追加しました。 cacert.pemをhttps://curl.haxx.se/docs/caextract.html – matteobin

関連する問題