phpmailer SMTP connect() 在本地主机上失败


phpmailer SMTP connect() failed on localhost

我正在使用xampp在本地主机上运行php5.6,并且我正在尝试使用phpmailer发送消息,但它给了我此错误:SMTP connect()失败。这是我的代码:

require("Photo Gallery/includes/PHPMailer/PHPMailerAutoload.php");
$mail = new PHPMailer();  
$mail->IsSMTP();
$mail->Host = "smtp.gmail.com";
$mail->Port = 465;
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Username = "aldemeery@gmail.com";
$mail->Password = "*********";
$mail->From     = "aldemeery@gmail.com";
$mail->AddAddress("aldemeery@gmail.com");
$mail->Subject  = "Subject";
$mail->Body     = "Hi!";
if(!$mail->Send()) {
    echo 'Message was not sent.';
    echo 'Mailer error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent.';
}

我知道有几十个问题有相同的标题,但相信我,它们都不适合我。请帮忙,我整天都在努力解决这个问题!

检查您的防病毒应用程序,在我的情况下,"Avast防病毒"阻止它。 然后当我禁用它时,错误消失了。

好的...所以我对 PHP.ini、我的 Gmail 帐户和我的 PHP 脚本进行了一些更改......然后一切都很好。所以这是我改变的:

  • 在 php.ini 中:我删除了"sendmail_from = postmaster@localhost"前面的分号并重新启动 xampp。
  • 在我的Gmail帐户中:在安全设置中,我打开了"允许安全性较低的应用程序"。
  • 最后在我的PHP脚本中:我添加了两个函数:
    • "date_default_timezone_set('Etc/UTC')"
    • "gethostbyname('ssl://smtp.gmail.com')" 作为" $mail->Host" 的值

这是我修改后的 php 脚本

date_default_timezone_set('Etc/UTC');
require '../PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = gethostbyname('ssl://smtp.gmail.com');
$mail->Port = 465;
$mail->SMTPAuth = true;
$mail->Username = "username@gmail.com";
$mail->Password = "***********";
$mail->setFrom('username@gmail.com', 'First Last');
$mail->addAddress('username@yahoo.com', 'First Last');
$mail->Subject = 'PHPMailer SMTP test';
$mail->AltBody = 'This is a plain-text message body';
if (!$mail->send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
    echo "Message sent!";
}