如何解决在PHPMailer脚本中Gmail SMTP无法验证发送的问题?


一直博客邮件回复通知等都是通过 zoho 邮箱完成的, 然而昨天在测试的时候由于在多台VPS同时发邮件, 导致触发了安全保护, 现在zoho已经不让我发送邮件了(可以接受). 查了一下他们的 Terms & Conditions, 发现果然邮箱不让发自动邮件 Automatic Emails.

联系客服无果(可能圣诞节放假没上班) 只能转战 Gmail, 随时一直用 PHPMailer 测试无法验证通过, 显示 SMTP: Could Not Authenticate 的错误.

一想, 可能是GMAIL安全要求过高, 可能需要把一些应用归到 “较不安全的程序中” (Less Secured Applications), 无奈只是个PHP脚本, 无法配置, 只能作罢.

后来发现, 可以设置 应用程序密码 (Application Password), 可供脚本和应用中使用. 多个程序可以分别设置多个密码, 这样的好处是不需要用到你真实的帐号主密码. 而且即使你的程序密码被泄露了, 你也很方便可以重新生成一个, 这样以前的密码就自动作废了.

首先访问Gmail的安全控制面版: https://myaccount.google.com/security

google-app-passwords-security 如何解决在PHPMailer脚本中Gmail SMTP无法验证发送的问题?  I.T. 程序设计 运维

google-app-passwords-security

然后生成 App Password, 选择 GMail, 然后其它, 填写一个应用程序的描述 例如: PHPMailer.

google-app-passwords 如何解决在PHPMailer脚本中Gmail SMTP无法验证发送的问题?  I.T. 程序设计 运维

google-app-passwords

然后试试下面的 PHPMailer 脚本 – 它将会发送一封测试邮件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/php
<?php
  use PHPMailer\PHPMailer\PHPMailer;
  use PHPMailer\PHPMailer\Exception;
  
  require 'PHPMailer/src/Exception.php';
  require 'PHPMailer/src/PHPMailer.php';
  require 'PHPMailer/src/SMTP.php';
 
  $host = "smtp.gmail.com";
  $port = 587;
  $secure = "tls";
//  或者用下面的 SSL也可以
//  $port = 465;
//  $secure = "ssl";
  $username = "你的 GMAIL 邮件";
  $password = "你的 GMAIL 应用程序密码";
  
  try {
    $mailer = new PHPMailer(true);
    $mailer->IsHTML(true);
    $mailer->IsSMTP();
    $mailer->From = $username;
    $mailer->FromName = $username;
    $mailer->ClearAllRecipients();
    $mailer->AddAddress("收件人邮件", "收件人姓名");
    $mailer->Subject = "Subject ";
    $mailer->Body = "Hello, time is: ". date("Y-m-d h:i:s");
    $mailer->SMTPAuth   = true;       // enable SMTP authentication
    $mailer->SMTPSecure = $secure;    // sets the prefix to the servier
    $mailer->Host       = $host;      // sets GMAIL as the SMTP server
    $mailer->Port       = $port;      // set the SMTP port for the GMAIL server
    $mailer->Username   = $username;  // GMAIL 邮件
    $mailer->Password   = $password;  // GMAIL 密码
    $result = $mailer->Send();  
    echo "测试邮件成功! \n";
  } catch  (Exception $e) {
    echo '邮件无法发送, 错误是: ';
    var_dump($e);
  }  
#!/usr/bin/php
<?php
  use PHPMailer\PHPMailer\PHPMailer;
  use PHPMailer\PHPMailer\Exception;
  
  require 'PHPMailer/src/Exception.php';
  require 'PHPMailer/src/PHPMailer.php';
  require 'PHPMailer/src/SMTP.php';

  $host = "smtp.gmail.com";
  $port = 587;
  $secure = "tls";
//  或者用下面的 SSL也可以
//  $port = 465;
//  $secure = "ssl";
  $username = "你的 GMAIL 邮件";
  $password = "你的 GMAIL 应用程序密码";
  
  try {
    $mailer = new PHPMailer(true);
    $mailer->IsHTML(true);
    $mailer->IsSMTP();
    $mailer->From = $username;
    $mailer->FromName = $username;
    $mailer->ClearAllRecipients();
    $mailer->AddAddress("收件人邮件", "收件人姓名");
    $mailer->Subject = "Subject ";
    $mailer->Body = "Hello, time is: ". date("Y-m-d h:i:s");
    $mailer->SMTPAuth   = true;       // enable SMTP authentication
    $mailer->SMTPSecure = $secure;    // sets the prefix to the servier
    $mailer->Host       = $host;      // sets GMAIL as the SMTP server
    $mailer->Port       = $port;      // set the SMTP port for the GMAIL server
    $mailer->Username   = $username;  // GMAIL 邮件
    $mailer->Password   = $password;  // GMAIL 密码
    $result = $mailer->Send();	
    echo "测试邮件成功! \n";
  } catch  (Exception $e) {
    echo '邮件无法发送, 错误是: ';
    var_dump($e);
  }  

如果, 你用的是 wordpress – SMTP 插件来发送站内邮件, 您还需要在 wp-settings.php 里修改以下两个值.

1
2
define( 'WPMS_ON', true );
define( 'WPMS_SMTP_PASS', '您的 GMAIL 应用程序密码' );
define( 'WPMS_ON', true );
define( 'WPMS_SMTP_PASS', '您的 GMAIL 应用程序密码' );

参考英文: How to Solve SMTP: Could Not Authenticate using Gmail + PHPMailer?

GD Star Rating
loading...
本文一共 410 个汉字, 你数一下对不对.
如何解决在PHPMailer脚本中Gmail SMTP无法验证发送的问题?. (AMP 移动加速版本)
上一篇: GE的沙拉俱乐部
下一篇: 被动收入可遇不可求

扫描二维码,分享本文到微信朋友圈
3f5d79e3188044b24f00b0d40ea95097 如何解决在PHPMailer脚本中Gmail SMTP无法验证发送的问题?  I.T. 程序设计 运维

评论