Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xampp+;PHPMailer&x2B;Gmail=SMTP错误:无法连接到SMTP主机_Php_Smtp_Phpmailer - Fatal编程技术网

xampp+;PHPMailer&x2B;Gmail=SMTP错误:无法连接到SMTP主机

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

我已经使用Composer安装了PHPMailer,并添加了所有Composer依赖项以使用Google XOAuth2身份验证。 然后,我按照一些教程使用Gmail API获取刷新令牌。
一切都应该很好。我把所有的文书工作都做好了。对吧

尽管有我的最佳意图和所有文档,但我无法建立到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证书过期了。如果这个答案对你有帮助,请把它标为正确答案。