PHPMailer – SMTP错误:从我的服务器发送邮件时,密码命令失败
我已经使用phpmailer()的概念,从我的共享服务器使用PHP脚本的用户发送邮件,但我不能够发送,即使一切都是正确的在我的脚本根据phpmailer代码。
我的代码是这样的:
$message = " This is testing message from my server"; $mail = new PHPMailer(); // create a new object $mail->IsSMTP(); // enable SMTP $mail->Host = "smtp.gmail.com"; $mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only $mail->SMTPAuth = true; // authentication enabled $mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for GMail $mail->Port = 465; // or 587 $mail->IsHTML(true); $mail->Username = "moorthi.mrk10@gmail.com"; // My gmail username $mail->Password = "************"; // My Gmail Password $mail->SetFrom("moorthi.mrk10@gmail.com"); $mail->Subject = "Test Mail from my Server"; $mail->Body = $message; $mail->AddAddress($email); if($mail->Send()) { print json_encode("SUCCESS"); } else { echo "Mailer Error: " . $mail->ErrorInfo; }
注意:我使用“GMail”作为我的SMTP服务器,SMTPSecure是“ssl”,端口是“465”,用户名和密码是我的GMail用户名和密码
我使用VPS共享服务器,并保持我的PHP脚本在该服务器上。
我认为在我的PHP脚本没有问题,我不知道为什么它不工作。
我得到了这样的错误。
2014-02-21 12:30:11 CLIENT -> SERVER: EHLO jkcorporates.com 2014-02-21 12:30:11 CLIENT -> SERVER: AUTH LOGIN 2014-02-21 12:30:11 CLIENT -> SERVER: bW9vcnRoaS5tcmsxMEBnbWFpbC5jb20= 2014-02-21 12:30:11 CLIENT -> SERVER: OTk0MTI0MTE0MA== 2014-02-21 12:30:11 SMTP ERROR: Password command failed: 534-5.7.14 534-5.7.14 i-_eumA> Please log in via your web browser and then try again. 534 5.7.14 54 k76sm17979938yho.18 - gsmtp 2014-02-21 12:30:11 CLIENT -> SERVER: QUIT " The ERROR is " SMTP connect() failed.
请给一些解决scheme。
提前致谢。
请记住:我使用共享服务器名称“VPS.mydomain.com”,我想使用GMail作为我的SMTP服务器发送邮件给用户。
有点晚,但也许有人会觉得它有用。
解决问题的链接(您必须login到Google帐户):
https://security.google.com/settings/security/activity?hl=en&pli=1
https://www.google.com/settings/u/1/security/lesssecureapps
https://accounts.google.com/b/0/DisplayUnlockCaptcha
发生什么的一些解释:
这个问题可能是由于试图使用电子邮件帐户的“不太安全”的应用程序(这是根据谷歌的帮助,不知道他们如何判断什么是安全的,什么是不安全的),或者如果你试图login几次或者如果你改变了国家(例如使用VPN,将代码移到不同的服务器或实际上尝试从世界的不同地方login)。
为了解决我不得不:(第一次)
- 通过networkinglogin我的帐户
- 查看最近尝试使用该帐户并接受可疑访问: 此链接
- 禁用阻止可疑应用程序/技术的function: 此链接
这是第一次,但几个小时后,可能是因为我做了很多testing问题再次出现,并不能解决使用上述方法。 此外,我必须清除validation码(这是一个有趣的图片,当您login到任何帐户时,要求您重写一个字或一个句子):
- login到我的帐户后,我去了这里
- 点击继续
希望这可以帮助。
用这个:
https://www.google.com/settings/u/1/security/lesssecureapps https://accounts.google.com/b/0/DisplayUnlockCaptcha https://security.google.com/settings/security/activity?hl=en&pli=1
这个链接允许访问谷歌帐户
更新19-05-2017:
这些url你必须从将要发送电子邮件的IP地址访问
正如其他人已经build议,你可以启用“不太安全”的应用程序,或者你可以简单地从ssl
切换到tls
:
$mailer->Host = 'tls://smtp.gmail.com'; $mailer->SMTPAuth = true; $mailer->Username = "xxx@gmail.com"; $mailer->Password = "***"; $mailer->SMTPSecure = 'tls'; $mailer->Port = 587;
在使用tls
,不需要为安全性较低的应用程序授予访问权限,只需确保已启用IMAP。
解决了这个问题 – PHPMailer – SMTP错误:从我的服务器发送邮件时,密码命令失败
require_once('class.phpmailer.php'); include("class.smtp.php"); $nameField = $_POST['name']; $emailField = $_POST['email']; $messageField = $_POST['message']; $phoneField = $_POST['contactno']; $cityField = $_POST['city']; $mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch $mail->IsSMTP(); // telling the class to use SMTP $body .= $nameField; try { //$mail->Host = "mail.gmail.com"; // SMTP server $mail->SMTPDebug = 2; // enables SMTP debug information (for testing) $mail->SMTPAuth = true; // enable SMTP authentication $mail->SMTPSecure = "ssl"; // sets the prefix to the servier $mail->Host = "smtp.gmail.com"; // sets GMAIL as the SMTP server $mail->Port = 465; // set the SMTP port for the GMAIL server $mail->SMTPKeepAlive = true; $mail->Mailer = "smtp"; $mail->Username = "xxxxx@gmail.com"; // GMAIL username $mail->Password = "********"; // GMAIL password $mail->AddAddress('sendto@gmail.com', 'abc'); $mail->SetFrom('xxxxxx@gmail.com', 'def'); $mail->Subject = 'PHPMailer Test Subject via mail(), advanced'; $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional - MsgHTML will create an alternate automatically $mail->MsgHTML($body); $mail->Send(); echo "Message Sent OK</p>\n"; header("location: ../test.html"); } catch (phpmailerException $e) { echo $e->errorMessage(); //Pretty error messages from PHPMailer } catch (Exception $e) { echo $e->getMessage(); //Boring error messages from anything else! }
重要:
去谷歌设置,并做'不太安全的'应用程序启用。 它会工作。 它为我工作。
我面临同样的问题,并认为我知道为什么发生这种情况。
我使用的Gmail帐户通常来自印度,我使用的networking服务器位于荷兰。
谷歌通知,有一个不寻常的位置login尝试,并要求通过networking浏览器从该位置login。
此外,我必须通过https://security.google.com/settings/security/activity接受对gmail帐户的可疑访问;
但最终我的问题还没有解决,因为我必须从荷兰的一个位置login到Gmail。
我希望这会帮助你一点! (对不起,我没有阅读电子邮件回复这个电子邮件地址)
这个错误是由于gmail更安全的function。
一旦产生这个错误…请login到您的Gmail帐户..在这里你可以find安全警报从GOOGLE..follow邮件…检查点击不太安全的select..然后再次尝试phpmailer ..
对于那些仍然无法工作的人,除了@CallMeBob提供的方法之外,请尝试以下方法。
的php.ini
- 转到C:\ xampp \ php ,用记事本编辑php.ini文件。
- 按下键盘上的CTRL + F ,在search栏上inputsendmail_path ,然后单击“ 查找下一个”两次。
- 现在,你应该在[mail munction]部分。
删除该行的分号: sendmail_path =“\”C:\ xampp \ sendmail \ sendmail.exe \“-t”
为这一行添加一个分号: sendmail_path =“C:\ xampp \ mailtodisk \ mailtodisk.exe”
SendMail.ini
- 转到C:\ xampp \ sendmail ,用记事本编辑sendmail.ini文件
- 更改以下内容:
- smtp_server = smtp.gmail.com
- SMTP_PORT = 465
- auth_username=your-gmail-username@gmail.com
- AUTH_PASSWORD =您的Gmail邮箱密码
- force_sender=your-gmail-username@gmail.com
注意:
** smtp_port必须符合你在php代码中写的那些。
**请记住将您的gmail-username和您的gmail-password更改为您正在使用的任何帐户。
**
希望这可以帮助! 🙂
如果您是G Suit用户,则可以由pipe理员解决
- 转到您的pipe理控制台
- 键入顶部search栏« 安全 »(select安全与盾牌图标)
- 打开基本设置
- 转到更安全的应用程序部分
- 按:转到安全性较低的应用程序的设置>>
现在select单选button之一a)禁止所有用户访问不太安全的应用程序(推荐)b)允许用户pipe理他们访问不太安全的应用程序c)为所有用户强制访问不太安全的应用程序(不推荐)
通常它不工作,因为)! 并立即开始工作与c)选项。 b) – 选项将需要GSuit中的每个用户更多的configuration
希望它有帮助