我想通过 PHP邮件程序使用 Gmail SMTP 服务器发送电子邮件。
这是我的代码
<?php
require_once('class.phpmailer.php');
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet="UTF-8";
$mail->SMTPSecure = 'tls';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->Username = 'MyUsername@gmail.com';
$mail->Password = 'valid password';
$mail->SMTPAuth = true;
$mail->From = 'MyUsername@gmail.com';
$mail->FromName = 'Mohammad Masoudian';
$mail->AddAddress('anotherValidGmail@gmail.com');
$mail->AddReplyTo('phoenixd110@gmail.com', 'Information');
$mail->IsHTML(true);
$mail->Subject = "PHPMailer Test Subject via Sendmail, basic";
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!";
$mail->Body = "Hello";
if(!$mail->Send())
{
echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
echo "Message sent!";
}
?>
但我收到以下错误
Mailer Error: SMTP Error: The following recipients failed: anotherValidGmail@gmail.com
SMTP server error: SMTP AUTH is required for message submission on port 587
我的域名为vatandesign.ir
答案 0 :(得分:127)
$mail = new PHPMailer(); // create a new object
$mail->IsSMTP(); // enable SMTP
$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->Host = "smtp.gmail.com";
$mail->Port = 465; // or 587
$mail->IsHTML(true);
$mail->Username = "email@gmail.com";
$mail->Password = "password";
$mail->SetFrom("example@gmail.com");
$mail->Subject = "Test";
$mail->Body = "hello";
$mail->AddAddress("email@gmail.com");
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message has been sent";
}
上面的代码已经过测试并为我工作。
可能需要$mail->SMTPSecure = 'ssl';
另外,请确保您没有为该帐户启用两步验证,因为这也会导致问题。
已更新
您可以尝试将$ mail-&gt; SMTP更改为:
$mail->SMTPSecure = 'tls';
值得注意的是,某些SMTP服务器会阻止连接。
某些SMTP服务器不支持SSL
(或TLS
)个连接。
答案 1 :(得分:26)
所以我刚刚解决了自己的&#34; SMTP连接故障&#34;错误,我想发布解决方案,以防它帮助其他任何人。
我使用了PHPMailer示例gmail.phps文件中给出的EXACT代码。它在我使用MAMP时工作很简单,然后一旦我将其移动到我的个人服务器上,就会出现SMTP连接错误。
我读过的所有Stack Overflow答案,PHPMailer的所有故障排除文档都表示PHPMailer不是问题。这是服务器端的设置问题。我尝试了不同的端口(587,465,25),我尝试了SSL&#39;和&#39; TLS&#39;加密。我检查了我的php.ini文件中是否启用了openssl。我检查过没有防火墙问题。一切都检查出来,但仍然没有。
解决方案是我必须删除这一行:
$mail->isSMTP();
现在一切正常。我不知道为什么,但它确实有效。我的其余代码将从PHPMailer示例文件中复制并粘贴。
答案 2 :(得分:8)
另外值得注意的是,如果您启用了两个因素身份验证,则需要设置一个应用程序专用密码来代替您的电子邮件帐户密码。
您可以按照以下说明生成应用程序专用密码: https://support.google.com/accounts/answer/185833
然后将$mail->Password
设置为您的应用专用密码。
答案 3 :(得分:5)
您的服务器似乎无法与Gmail SMTP服务器建立连接。 以下是一些解决此问题的提示: 1)检查PHP上是否正确配置了SSL(默认情况下,PHP上没有安装处理它的模块。您必须在phph.ini中检查配置)。 2)检查您的防火墙是否允许拨打所需端口的呼叫(此处为465或587)。使用telnet这样做。如果端口未打开,则需要sysdmin的一些支持来设置配置。 我希望你能快点解决这个问题!
答案 4 :(得分:3)
打开此Link并选择按照说明google服务器阻止来自未知服务器的任何尝试,因此一旦您点击验证码检查,每件事情都会没问题
答案 5 :(得分:1)
Google会根据可用的用户信息对Gmail帐户进行不同的处理,可能会遏制垃圾邮件发送者。
在我进行电话验证之前,我无法使用SMTP。另一个帐户要仔细检查,我能够确认。
答案 6 :(得分:0)
此代码适用于我
$mail = new PHPMailer;
//Enable SMTP debugging.
$mail->SMTPDebug = 0;
//Set PHPMailer to use SMTP.
$mail->isSMTP();
//Set SMTP host name
$mail->Host = $hostname;
//Set this to true if SMTP host requires authentication to send email
$mail->SMTPAuth = true;
//Provide username and password
$mail->Username = $sender;
$mail->Password = $mail_password;
//If SMTP requires TLS encryption then set it
$mail->SMTPSecure = "ssl";
//Set TCP port to connect to
$mail->Port = 465;
$mail->From = $sender;
$mail->FromName = $sender_name;
$mail->addAddress($to);
$mail->isHTML(true);
$mail->Subject = $Subject;
$mail->Body = $Body;
$mail->AltBody = "This is the plain text version of the email content";
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
}
else {
echo 'Mail Sent Successfully';
}
答案 7 :(得分:0)
Anderscc说得对。谢谢。它对我有用,但不是100%。
我必须设置
$ mail-&gt; SMTPDebug = 0; 将其设置为1可能会导致错误,尤其是当您将某些数据作为json传递到下一页时。示例 - 使用json通过ajax传送数据时,如果发送邮件,则执行验证。
我不得不降低我的Gmail帐户安全设置以消除错误: “SMTP连接()失败”和“SMTP错误:密码命令失败”
解决方案: 这个问题可能是由于“不太安全”的应用程序试图使用电子邮件帐户造成的(这是根据谷歌的帮助,不知道他们如何判断什么是安全的,什么不是)或者如果你试图在一个时间点登录行或者如果你改变国家(例如使用VPN,将代码移动到不同的服务器或实际上尝试从世界的不同地方登录)。
解决问题的链接(您必须登录Google帐户):
查看最近尝试使用该帐户并接受可疑访问。
链接以禁用阻止可疑应用/技术的功能:
注意:强> 您可以转到以下stackoverflow应答链接以获取更详细的参考。
答案 8 :(得分:0)
如果您使用的是cPanel,则只需单击允许您通过SMTP发送到外部服务器的wee框。
登录CPanel&gt;调整设置&gt;所有的&GT; “将传出的SMTP限制为 root,exim和mailman(FKA SMTP Tweak)“
在这里回答:
答案 9 :(得分:0)
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
答案 10 :(得分:0)
->您可以将此代码复制并粘贴到您正在工作的php文件中
->但是您需要转到“ google->帐户->安全性->访问安全性较低的应用程序”默认情况下处于启用状态,请确保您已关闭以允许发送邮件。
->这是链接https://myaccount.google.com/security,它在2019年11月有效,但目前我不知道。
->有关Php Mailer的文档,请访问https://github.com/PHPMailer/PHPMailer
->您可以先运行此代码,然后再下载供应商文件夹,然后使用此命令下载该文件夹
撰写者需要phpmailer / phpmailer
->此命令仅在下载作曲家后有效
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
/* Server settings */
$mail->SMTPDebug = SMTP::DEBUG_SERVER; /* Enable verbose debug output */
$mail->isSMTP(); /* Send using SMTP */
$mail->Host = 'ssl://smtp.gmail.com'; /* Set the SMTP server to send through */
$mail->SMTPAuth = true; /* Enable SMTP authentication */
$mail->Username = 'youremailaddress@gmail.com'; /* SMTP username */
$mail->Password = 'youremailaddresspassword'; /* SMTP password */
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; /* Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted */
$mail->Port = 465; /* TCP port to connect to */
/* Recipients */
$mail->setFrom('youremailaddress@gmail.com', 'Your Name');
$mail->addAddress('receiveremailaddress@gmail.com', 'Receiver Name'); /* Add a recipient */
$mail->addReplyTo('youremailaddress@gmail.com', 'Your Name');
/* 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}";
}
?>
->在您的主机中,您发现SMTP无法正常工作,然后请检查此网页https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
答案 11 :(得分:0)
大家好,您只想与phpMailer分享我的经验,该软件在本地(XAMPP)工作,但不适用于我的托管服务提供商。
我打开了phpMailer错误报告
$mail->SMTPDebug=2
我收到“连接被拒绝错误”
我通过电子邮件向托管服务提供商发送此问题,他说他将打开SMTP PORTS,并打开端口25,465,587。
然后我得到以下错误响应“ SMTP错误:密码命令失败:” ....“请通过您的Web浏览器登录,然后重试” ....“ SMTP错误:无法验证。” < / p>
因此google会检查您是否登录到您的帐户(即我通过浏览器在本地运行脚本的时间),然后允许您通过phpMailer脚本发送邮件。
要解决此问题 1:转到您的Google帐户->安全 2:滚动到“钥匙图标”,然后选择“双向验证”,然后按照以下步骤进行操作 3:完成后,从Google帐户返回到钥匙图标->安全,然后选择第二个选项“创建应用程序密码”,然后按照以下步骤获取密码。
现在转到您的phpMailer对象,并使用上述过程中提供的密码更改google密码
您完成了。
代码
require_once('class.phpmailer.php');
$phpMailerObj= new PHPMailer();
$phpMailerObj->isSMTP();
$phpMailerObj->SMTPDebug = 0;
$phpMailerObj->Debugoutput = 'html';
$phpMailerObj->Host = 'smtp.gmail.com';
$phpMailerObj->Port = 587;
$phpMailerObj->SMTPSecure = 'tls';
$phpMailerObj->SMTPAuth = true;
$phpMailerObj->Username = "YOUR EMAIL";
$phpMailerObj->Password = "THE NEW PASSWORD FROM GOOGLE ";
$phpMailerObj->setFrom('YOUR EMAIL ADDRESS', 'THE NAME OF THE SENDER',0);
$phpMailerObj->addAddress('RECEIVER EMAIL ADDRESS', 'RECEIVER NAME');
$phpMailerObj->Subject = 'SUBJECT';
$phpMailerObj->Body ='MESSAGE';
if (!phpMailerObj->send()) {
echo "phpMailerObjer Error: " . $phpMailerObj->ErrorInfo;
return 0;
} else {
echo "Message sent!";
return 1;
}
答案 12 :(得分:0)
如果有人没有得到任何有效的答案,可以试试这个。因为我花了一天时间来解决这个问题。
注意:我使用的是 PHPMailer 5.2.23。
defaultValue=""
答案 13 :(得分:-2)
我认为这是连接问题,您可以在此处获取代码http://skillrow.com/sending-mail-using-smtp-and-php/
include(“smtpfile.php“);
include(“saslfile.php“); // for SASL authentication $from=”my@website.com“; //from mail id
$smtp=new smtp_class;
$smtp->host_name=”www.abc.com“; // name of host
$smtp->host_port=25;//port of host
$smtp->timeout=10;
$smtp->data_timeout=0;
$smtp->debug=1;
$smtp->html_debug=1;
$smtp->pop3_auth_host=””;
$smtp->ssl=0;
$smtp->start_tls=0;
$smtp->localhost=”localhost“;
$smtp->direct_delivery=0;
$smtp->user=”smtp username”;
$smtp->realm=””;
$smtp->password=”smtp password“;
$smtp->workstation=””;
$smtp->authentication_mechanism=””;
$mail=$smtp->SendMessage($from,array($to),array(“From:$from”,”To: $to”,”Subject: $subject”,”Date: ”.strftime(“%a, %d %b %Y %H:%M:%S %Z”)),”$message”);
if($mail){
echo “Mail sent“;
}else{
echo $smtp->error;
}
答案 14 :(得分:-3)
无法发表评论,但是,请删除
$mail->isSMTP();
你会没事的!