这是我的功能:
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();
}
当我在本地使用它(xampp)时,效果很好。但是最近我已经在服务器(linux ubuntu)上上传了我的网站,可惜没有发送电子邮件。实际上$phpMailer->send()
返回的是true,但是收件箱和垃圾邮件中都没有收到电子邮件。为什么以及如何解决?
好的,大约30分钟后,我在收件箱中收到了电子邮件。现在我的问题是这么长时间的延误是什么原因?
答案 0 :(得分:2)
我相信this post非常相关。简而言之,不是PHP,而是SMTP,这是PHP脚本将邮件传递给传递的原因,这导致了延迟。 SMTP有一些怪异的行为会导致这种情况,最常见的是greylisting。灰名单尝试通过多次处理请求,以减少垃圾邮件并防止未经验证的电子邮件。
如果您想更快地发送邮件,我建议使用具有自己的SMTP服务器的API,例如Sendgrid。 API往往更加可靠,快速并且易于使用。通常,PHP mail()
函数运行缓慢,无法解决。
答案 1 :(得分:0)
尝试以下代码,尝试捕获任何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是否打开