一直博客邮件回复通知等都是通过 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
然后生成 App Password, 选择 GMail, 然后其它, 填写一个应用程序的描述 例如: PHPMailer.
然后试试下面的 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?
loading...
上一篇: GE的沙拉俱乐部
下一篇: 被动收入可遇不可求