为什么 phpmailer->send() 返回 true 但我没有收到电子邮件?



这是我的函数:

function send_mail($email_from, $password, $email_to, $subject, $body, $name_from = "Lamtakam"){
$phpMailer = new PHPMailer(true);
// $phpMailer->SMTPDebug = true;
$phpMailer->isSMTP();
$phpMailer->Host = "smtp.zoho.com";
$phpMailer->SMTPAuth = true;
$phpMailer->Username = $email_from;
$phpMailer->Password = $password;
$phpMailer->SMTPSecure = "tls";
$phpMailer->Port = 587;
$phpMailer->isHTML(true);
$phpMailer->CharSet = "UTF-8";
$phpMailer->setFrom($email_from, $name_from);
$phpMailer->addAddress($email_to);
$phpMailer->Subject = $subject;
$phpMailer->Body = $body;
return $phpMailer->send();
}

当我在本地使用它(examplep(时,它工作得很好。但最近我在服务器上上传了我的网站(linux ubuntu(,遗憾的是电子邮件无法发送。事实上,$phpMailer->send()返回true,但我既没有收到收件箱中的电子邮件,也没有收到垃圾邮件。为什么以及如何修复?


好的,大约30分钟后,我收到收件箱里的电子邮件。现在我的问题是,这一巨大延迟的原因是什么?

我相信这篇文章非常相关。简言之,造成延迟的不是PHP,而是SMTP,即PHP脚本将邮件传递给的对象。SMTP有一些奇怪的行为可以导致这种情况,最常见的是灰名单。Greyling试图通过在处理请求之前等待多次请求来减少垃圾邮件并防止未经验证的电子邮件。

如果你想更快地发送邮件,我建议你使用API,比如Sendgrid,它有自己的SMTP服务器。API往往更可靠、更快速、更容易使用。一般来说,PHPmail()函数的速度很慢,而且没有办法解决这个问题。

尝试以下代码,该代码试图捕获任何phpmailer异常。

function send_mail($email_from, $password, $email_to, $subject, $body, $name_from = "Lamtakam"){
$phpMailer = new PHPMailer(true);
try {
$phpMailer->SMTPDebug = 2;
$phpMailer->isSMTP();
$phpMailer->Host = "smtp.zoho.com";
$phpMailer->SMTPAuth = true;
$phpMailer->Username = $email_from;
$phpMailer->Password = $password;
$phpMailer->SMTPSecure = "tls";
$phpMailer->Port = 587;
$phpMailer->isHTML(true);
$phpMailer->CharSet = "UTF-8";
$phpMailer->setFrom($email_from, $name_from);
$phpMailer->addAddress($email_to);
$phpMailer->Subject = $subject;
$phpMailer->Body = $body;
$phpMailer->send();
} catch (phpmailerException $e) {
die($e->errorMessage());
}
}

如果它不起作用,请检查您的主机端口587是否打开

相关内容

最新更新