我正在尝试使用php邮件从我的gmail帐户发送邮件。
我知道,为了使用php邮件程序发送邮件,我们需要从gmail帐户设置中启用“不太安全的应用程序”。
还有一个选项,在不启用“不太安全的应用程序”的情况下,我们可以通过启用两步验证从不太安全的应用程序发送邮件来使用“应用程序密码”。
但问题是使用“应用程序密码”,我无法发送来自php的邮件,邮件中出现用户名和密码不被接受的错误。
我搜索发现,我们无法使用“应用程序密码”从安全性较低的应用程序发送邮件。从此链接中找到https://support.google.com/accounts/answer/185833?hl=en
Iam使用以下php邮件程序代码发送邮件:
<?php
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// Load Composer's autoloader
require 'vendor/autoload.php';
// Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);
try {
//Server settings
$mail->SMTPDebug = 2; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'ssl://smtp.gmail.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = username;
$mail->Password = password;
$mail->SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465;
//Recipients
$mail->setFrom('test@gmail.com', 'Test');
$mail->addAddress('test1@gmail.com', 'Test1'); // Add a recipient
$mail->addAddress('test2@gmail.com'); // Name is optional
$mail->addReplyTo('test@gmail.com', 'Test');
// Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
使用“APP密码”时出现以下错误消息。
2019-09-04 07:24:15 CLIENT -> SERVER: EHLO localhost
2019-09-04 07:24:15 CLIENT -> SERVER: AUTH LOGIN
2019-09-04 07:24:16 CLIENT -> SERVER: <credentials hidden>
2019-09-04 07:24:16 CLIENT -> SERVER: <credentials hidden>
2019-09-04 07:24:16 SMTP ERROR: Password command failed: 535-5.7.8 Username and Password not accepted. Learn more at535 5.7.8 https://support.google.com/mail/?p=BadCredentials z12sm8871955pfj.41 - gsmtp
SMTP Error: Could not authenticate.
2019-09-04 07:24:16 CLIENT -> SERVER: QUIT
SMTP Error: Could not authenticate.
Message could not be sent. Mailer Error: SMTP Error: Could not authenticate.
请给出一个在不启用“不太安全的应用程序”和使用gmail“应用程序密码”的情况下发送邮件的解决方案
我还使用了第三个选项—XOAUTH2身份验证来发送邮件。以下是我的代码:
<?php
/**
* This example shows how to send via Google's Gmail servers using XOAUTH2 authentication.
*/
//Import PHPMailer classes into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\OAuth;
// Alias the League Google OAuth2 provider class
use League\OAuth2\Client\Provider\Google;
//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');
//Load dependencies from composer
//If this causes an error, run 'composer install'
require 'vendor/autoload.php';
$send_to_address = $_GET['email'];
$send_to_name = $_GET['name'];
//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;
//Set the hostname of the mail server
$mail->Host = 'smtp.gmail.com';
//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;
//Set AuthType to use XOAUTH2
$mail->AuthType = 'XOAUTH2';
//Fill in authentication details here
//Either the gmail account owner, or the user that gave consent
$email = 'gts@goodway.in';
$clientId = '315061611767-fitjjndpsi6uo1j7hn923loaa0dg1ch1.apps.googleusercontent.com';
$clientSecret = '3m-47D5Ojvpnfqp5qxxQ2WLn';
//Obtained by configuring and running get_oauth_token.php
//after setting up an app in Google Developer Console.
$refreshToken = '4/qgEr9g7oYr2jk-q2YZpDbD5GCKK0oMdUHrVwsww9t5tXey5zr4fcjhS4Mk25rLcklEkUl4F20iKKmy-CAMme5r8';
//Create a new OAuth2 provider instance
$provider = new Google(
[
'clientId' => $clientId,
'clientSecret' => $clientSecret,
]
);
//Pass the OAuth provider instance to PHPMailer
$mail->setOAuth(
new OAuth(
[
'provider' => $provider,
'clientId' => $clientId,
'clientSecret' => $clientSecret,
'refreshToken' => $refreshToken,
'userName' => $email,
]
)
);
//Set who the message is to be sent from
//For gmail, this generally needs to be the same as the user you logged in as
$mail->setFrom($email, 'Gudbiz');
//Set who the message is to be sent to
$mail->addAddress($send_to_address, $send_to_name);
//Set the subject line
$mail->Subject = 'PHPMailer GMail XOAUTH2 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->CharSet = 'utf-8';
//$mail->msgHTML(file_get_contents('contentsutf8.html'), __DIR__);
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';
//Attach an image file
//$mail->addAttachment('images/phpmailer_mini.png');
//send the message, check for errors
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
使用上述代码,我得到如下输出:
2019-09-04 11:52:57 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP v8sm7946021pje.6 - gsmtp
2019-09-04 11:52:57 CLIENT -> SERVER: EHLO testapi.howorkforce.com
2019-09-04 11:52:58 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [13.126.85.98]250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8
2019-09-04 11:52:58 CLIENT -> SERVER: STARTTLS
2019-09-04 11:52:58 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS
2019-09-04 11:52:58 CLIENT -> SERVER: EHLO testapi.howorkforce.com
2019-09-04 11:52:58 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [13.126.85.98]250-SIZE 35882577250-8BITMIME250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8
但是邮件没有发送。请提出解决方案。
请使用“SMTP调试4”查找其他信息
2019-09-05 11:51:05 Connection: opening to smtp.gmail.com:587, timeout=300, options=array()
2019-09-05 11:51:05 Connection: opened
2019-09-05 11:51:05 SMTP INBOUND: "220 smtp.gmail.com ESMTP l23sm2317472pjy.3 - gsmtp"
2019-09-05 11:51:05 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP l23sm2317472pjy.3 - gsmtp
2019-09-05 11:51:05 CLIENT -> SERVER: EHLO localhost
2019-09-05 11:51:06 SMTP INBOUND: "250-smtp.gmail.com at your service, [103.125.155.132]"
2019-09-05 11:51:06 SMTP INBOUND: "250-SIZE 35882577"
2019-09-05 11:51:06 SMTP INBOUND: "250-8BITMIME"
2019-09-05 11:51:06 SMTP INBOUND: "250-STARTTLS"
2019-09-05 11:51:06 SMTP INBOUND: "250-ENHANCEDSTATUSCODES"
2019-09-05 11:51:06 SMTP INBOUND: "250-PIPELINING"
2019-09-05 11:51:06 SMTP INBOUND: "250-CHUNKING"
2019-09-05 11:51:06 SMTP INBOUND: "250 SMTPUTF8"
2019-09-05 11:51:06 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [103.125.155.132]250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8
2019-09-05 11:51:06 CLIENT -> SERVER: STARTTLS
2019-09-05 11:51:06 SMTP INBOUND: "220 2.0.0 Ready to start TLS"
2019-09-05 11:51:06 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS
2019-09-05 11:51:06 CLIENT -> SERVER: EHLO localhost
2019-09-05 11:51:06 SMTP INBOUND: "250-smtp.gmail.com at your service, [103.125.155.132]"
2019-09-05 11:51:06 SMTP INBOUND: "250-SIZE 35882577"
2019-09-05 11:51:06 SMTP INBOUND: "250-8BITMIME"
2019-09-05 11:51:06 SMTP INBOUND: "250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH"
2019-09-05 11:51:06 SMTP INBOUND: "250-ENHANCEDSTATUSCODES"
2019-09-05 11:51:06 SMTP INBOUND: "250-PIPELINING"
2019-09-05 11:51:06 SMTP INBOUND: "250-CHUNKING"
2019-09-05 11:51:06 SMTP INBOUND: "250 SMTPUTF8"
2019-09-05 11:51:06 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [103.125.155.132]250-SIZE 35882577250-8BITMIME250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8
2019-09-05 11:51:06 Auth method requested: XOAUTH2
2019-09-05 11:51:06 Auth methods available on the server: LOGIN,PLAIN,XOAUTH2,PLAIN-CLIENTTOKEN,OAUTHBEARER,XOAUTH
我找到了解决办法。我使用的刷新令牌就是那个,这让我非常头痛。
我使用的“刷新令牌”无效。一旦我重新生成刷新令牌,一切似乎都很好。邮件发送正确。
如果要避免这些情况,唯一剩下的选择是使用PHPMailer支持的XOAUTH2身份验证。它很难配置,也很复杂,而且可能会发生更改,因此,我不会将代码粘贴到这里以使其过时,而是让您参考源代码。将代码基于PHPMailer提供的gmail OAuth示例,并使用项目wiki中的PHPMailer gmail xoauth2指南对其进行配置和获取凭据。
我正在尝试使用Java向Gmail帐户发送邮件,代码如下。我似乎做的每件事都是正确的,但我收到了身份验证失败的消息。谷歌想让我打开“不太安全的应用”功能来实现传输。 有没有一种方法可以让Gmail对Java满意,并且不会出现“打开不太安全的应用程序”的错误? 错误: 代码: 我已经做了研究,所以据我所知,代码不是问题所在,只是没有看到一个解决方案,用于不太安全的应用程序消息。 参考文献: 参考文献
我想使用python 3.4脚本从我的gmail地址发送邮件。我使用以下代码: 如果我在我的gmail帐户中“允许不太安全的应用”,脚本就可以正常工作。然而,如果我禁用“不太安全的应用程序”,它将不起作用(我收到一封来自谷歌的警告电子邮件,其中“登录尝试被阻止”)。我想修改我的代码,以便能够在不启用此功能的情况下发送邮件。 我看了所有关于类似问题的问答,但没有找到任何有用的答案或方法。有人对此有解
应用属性: 此代码只能从gmail发送电子邮件(为不太安全的应用程序启用),它可以发送邮件,但我想要的是邮件应该发送任何公司id而不是gmail,尝试在此代码中添加其他电子邮件id,但错误为“用户名和密码不被接受”,有人能建议我需要做哪些更改才能使其适用于任何电子邮件id吗?请建议最佳方法(如有)?
我使用Android Studio和这个库;https://github.com/yesidlazaro/GmailBackground . 我正在尝试从我的android应用程序发送电子邮件。但是每当我尝试从Gmail帐户发送电子邮件时,它都不起作用。因为谷歌将我的应用程序固定为“不太安全的应用程序”并阻止它。 我不得不从gmail的安全设置中允许不太安全的应用程序。但我不想这样做。我如何解决这
我们可以在PHPmailer中实现什么样的安全性,使其成为更安全的Gmail应用程序?https://support.google.com/accounts/answer/6010255我正在使用PHPmailer通过Gmail发送电子邮件。PS:我不想在此处启用“访问不太安全的应用程序”:https://www.google.com/settings/security/lesssecureapp
所以我遇到了这个不太安全的应用程序 我想知道是否有其他选择?我需要能够通过我的应用程序阅读电子邮件和下载附件,而无需用户自己这么做,因此Gmail API在我看来并不好。 如果不启用此选项,我也找不到任何其他访问gmail收件箱的选项。。。谢谢你的时间。