xampp+;PHPMailer&x2B;Gmail=SMTP错误:无法连接到SMTP主机
我已经使用Composer安装了PHPMailer,并添加了所有Composer依赖项以使用Google XOAuth2身份验证。 然后,我按照一些教程使用Gmail API获取刷新令牌。xampp+;PHPMailer&x2B;Gmail=SMTP错误:无法连接到SMTP主机,php,smtp,phpmailer,Php,Smtp,Phpmailer,我已经使用Composer安装了PHPMailer,并添加了所有Composer依赖项以使用Google XOAuth2身份验证。 然后,我按照一些教程使用Gmail API获取刷新令牌。 一切都应该很好。我把所有的文书工作都做好了。对吧 尽管有我的最佳意图和所有文档,但我无法建立到SMTP.gmail.com的SMTP连接 我得到这个错误: 2017-10-20 18:01:45 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP c17sm271572
一切都应该很好。我把所有的文书工作都做好了。对吧
尽管有我的最佳意图和所有文档,但我无法建立到SMTP.gmail.com的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!";
}
使用PHPMailer\PHPMailer\PHPMailer;
使用PHPMailer\PHPMailer\OAuth;
使用League\OAuth2\Client\Provider\Google;
日期默认时区设置(“欧洲/罗马”);
需要'lib/php/vendor/autoload.php';
$mail=新的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=新谷歌(
[
'clientId'=>$clientId,
“clientSecret”=>$clientSecret,
]
);
$mail->setOAuth(
新非统组织(
[
“提供者”=>$provider,
'clientId'=>$clientId,
“clientSecret”=>$clientSecret,
“refreshToken”=>$refreshToken,
“用户名”=>$email,
]
)
);
$mail->setFrom($email,'Matteo Bini');
$mail->addAddress('seckrit-stuff','Matteo Bini');
$mail->Subject='PHPMailer GMail XOAUTH2 SMTP测试';
$mail->CharSet='utf-8';
$mail->msgHTML(“HTMLmessage!”);
$mail->AltBody='这是一个纯文本消息正文';
如果(!$mail->send()){
回显“邮件错误:”.$mail->ErrorInfo;
}否则{
回显“已发送消息!”;
}
您能帮我找到一种在本地主机(xampp)中将phpMail与Gmail结合使用的方法吗?这与OAuth无关。您在TLS级别有一个更早的问题。要么您缺少openssl扩展,要么它配置错误,要么您的CA证书过期
故障排除指南中介绍了此问题,错误链接到-使用openssl检查。这与OAuth无关。您在TLS级别有一个更早的问题。要么您缺少openssl扩展,要么它配置错误,要么您的CA证书过期
故障排除指南-使用openssl检查的错误链接中介绍了此问题。请尝试检查谷歌帐户中的“允许不太安全的应用:关闭”设置。您可能必须打开它才能在PHP代码中使用GMail。这是因为普通的web应用被认为不太安全。请尝试检查您的Google帐户中的“允许不太安全的应用:关闭”设置。您可能必须打开它才能在PHP代码中使用GMail。这是因为普通的web应用程序被认为不太安全。在发布问题之前,我已经阅读了故障排除指南,并且在xampp php.ini文件上启用了openssl扩展。使用故障排除指南提示,我使用echo测试了扩展(扩展加载('openssl')?'SSL加载':'SSL未加载')。“\n”;它说SSL已加载。我应该做更多或不同的事情吗?这很好,但请尝试指南中的openssl命令行示例。也可以尝试SMTPDebug=3。我解决了我的问题。非常感谢。我使用了SMTPDebug=3,发现了错误并将这行代码添加到php.ini openssl.cafile=C:\xampp\php\extras\ssl\cacert.pem。显然,在从下载了cacert.pem之后,这很好,所以您的CA证书过期了。如果这个答案对您有帮助,请将其标记为正确答案。在发布问题之前,我已经阅读了故障排除指南,并且在xampp php.ini文件上启用了openssl扩展。使用故障排除指南提示,我使用echo测试了扩展(扩展加载('openssl')?'SSL加载':'SSL未加载')。“\n”;它说SSL已加载。我应该做更多或不同的事情吗?这很好,但请尝试指南中的openssl命令行示例。也可以尝试SMTPDebug=3。我解决了我的问题。非常感谢。我使用了SMTPDebug=3,发现了错误并将这行代码添加到php.ini openssl.cafile=C:\xampp\php\extras\ssl\cacert.pem。显然,在从下载了cacert.pem之后,这很好,所以您的CA证书过期了。如果这个答案对你有帮助,请把它标为正确答案。