无法使用gmail使用php发送电子邮件 - 授权错误

时间:2016-07-29 16:06:45

标签: php email authentication ssl gmail

我是PHP新手并尝试使用注册表单构建网站。用户应该收到一封带有确认链接的电子邮件(因为我有一个免费托管服务器,我正在尝试使用gmail服务器)。问题是我正在努力解决电子邮件php代码问题。我正在尝试使用PHPMailer函数,如下所示:



<?php
/**
 * This example shows settings to use when sending via Google's Gmail servers.
 */

//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('Etc/UTC');
require 'PHPMailer/PHPMailerAutoload.php';

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

//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';
// use
// $mail->Host = gethostbyname('smtp.gmail.com');
// if your network does not support SMTP over IPv6

//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;

//Username to use for SMTP authentication - use full email address for gmail
$mail->Username = "MYEMAIL@gmail.com";

//Password to use for SMTP authentication
$mail->Password = "MYPASSWORD";

//Set who the message is to be sent from
$mail->setFrom('example@example.com', 'Name S');

//Set an alternative reply-to address
$mail->addReplyTo('example@example.com', 'Name S');

//Set who the message is to be sent to
$mail->addAddress('email@gmail.com', 'John Doe');

//Set the subject line
$mail->Subject = 'PHPMailer GMail SMTP test';

//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("HELLo");

//Replace the plain text body with one created manually
//$mail->AltBody = 'This is a plain-text message body';

//send the message, check for errors
if (!$mail->send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
    echo "Message sent!";
}
?>
&#13;
&#13;
&#13;

我尝试了端口587和465.同时尝试了ssl和tls。每次我尝试运行代码时都会出现以下错误:

  

服务器 - &gt;客户:220 smtp.gmail.com ESMTP gw4sm17090153wjc.45 - gsmtp   客户 - &gt;服务器:EHLO spec.dr-manny.co.uk服务器 - &gt;客户:   250-smtp.gmail.com为您服务,[185.27.134.36] 250-SIZE   35882577250-8BITMIME250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN   OAUTHBEARER XOAUTH250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250   SMTPUTF8客户端 - &gt;服务器:AUTH登录服务器 - &gt;客户:334   VXNlcm5hbWU6客户端 - &gt;服务器:bWFubnlzYWVkaUBnbWFpbC5jb20 = SERVER - &gt;   客户:334 UGFzc3dvcmQ6客户端 - &gt;服务器:a2luZ29uZW1vaDk5服务器 - &gt;   客户:534-5.7.14    请通过网络浏览器登录   和534-5.7.14然后再试一次.534-5.7.14了解更多at534 5.7.14   https://support.google.com/mail/answer/78754 gw4sm17090153wjc.45 -   gsmtp SMTP ERROR:密码命令失败:534-5.7.14    请通过网络浏览器登录   和534-5.7.14然后再试一次.534-5.7.14了解更多at534 5.7.14   https://support.google.com/mail/answer/78754 gw4sm17090153wjc.45 -   gsmtp SMTP错误:无法进行身份验证。客户 - &gt;服务器:退出   服务器 - &gt;客户:221 2.0.0关闭连接gw4sm17090153wjc.45 -   gsmtp SMTP connect()失败。   错误:SMTP连接()失败。

此外,我收到了一封来自Gmail的电子邮件,主题是#34;有人有你的密码&#34;。我打开电子邮件,发现了这个&#34;
嗨曼尼, 有人使用您的密码尝试使用电子邮件客户端或移动设备等应用程序登录您的Google帐户MYEMAIL@gmail.com。&#34; 我在运行php页面后大约15分钟收到这封电子邮件。

我关闭了&#34;两步验证&#34;并关闭&#34;允许不太安全的应用程序&#34;。似乎没有任何帮助。有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

去年我遇到了同样的问题:代码(VB.Net)没问题,所以凭据在哪里。问题是,gmail不喜欢远程(我的托管)的Web服务器中的某些应用程序尝试使用相同的用户名。

我通过以下方式修复了它(在两个不同的场合)

之后再次测试您的代码。