如何使用Gmail SMTP服务器通过PHPMailer发送电子邮件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (102)

我想通过PHP Mailer使用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

提问于
用户回答回答于
$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-> SMTP来:

$mail->SMTPSecure = 'tls';

值得注意的是一些SMTP服务器阻塞连接。一些SMTP服务器不支持SSL(或TLS)连接。

用户回答回答于

所以我刚刚解决了我自己的“SMTP连接失败”错误,我想发布解决方案,以防万一它帮助其他人。

我使用PHPMailer示例gmail.phps文件中给出的EXACT代码。它只是在我使用MAMP的时候工作,然后当我将它移动到我的个人服务器时,我得到了SMTP连接错误。

我读过的所有堆栈溢出答案,PHPMailer的所有疑难解答文档都表示这不是PHPMailer的问题。这是服务器端的设置问题。我尝试了不同的端口(587,465,25),我尝试了'SSL'和'TLS'加密。我检查了我的php.ini文件中启用了openssl。我检查了没有防火墙问题。一切都检出了,仍然没有。

解决办法是我必须删除这一行:

$mail->isSMTP();

现在一切正常。我不知道为什么,但它有效。我的代码的其余部分从PHPMailer示例文件复制并粘贴。

扫码关注云+社区

领取腾讯云代金券