我发现很少有旧线程有类似的问题,但大多数都没有答案,或者即使有,这些建议也与我的情况无关。
我曾使用 PHP 邮件功能进行过完整的设置,并且效果很好。我不得不一次格式化我的硬盘并从头开始设置服务器。之后,PHP 邮件功能变慢了。在研究解决方案时,我发现大多数人推荐 PHPMailer。我切换到那个,但问题仍然存在。
大多数时候,我每页至少发送两封电子邮件,内容不同但使用相同的对象。大约有 3-4 秒的延迟。请在下面找到相关代码($email1 和 $email2 是包含有效电子邮件地址的数组):
function sendEmail ($email1, $subject1, $message1, $email2, $subject2, $message2)
{
require_once('../PHPMailer/class.phpmailer.php');
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPDebug = 0;
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Host = "smtp.gmail.com";
$mail->Port = 465;
$mail->IsHTML(true);
$mail->Username = $gmail_username;
$mail->Password = $gmail_password;
$mail->SetFrom($gmail_address,$email_title);
$mail->Subject = $subject1;
$mail->Body = $message1;
foreach($email1 as $k => $v) { $mail->AddAddress($v); }
if(!$mail->Send()) { $emailreturn['cust'] = 0; } else { $emailreturn['cust'] = 1; }
$mail->ClearAddresses();
$mail->Subject = $subject2;
$mail->Body = $message2;
foreach($email2 as $k => $v) { $mail->AddAddress($v); }
if(!$mail->Send()) { $emailreturn['partner'] = 0; } else { $emailreturn['partner'] = 1; }
$mail->ClearAddresses();
}
通过调试和消息我没有看到任何错误,只是发送电子邮件的时间比平时长。
我尝试过的:
- 我关闭防火墙只是为了测试它,它是一样的。
- 切换到“tls”,这使它变得更慢
- 使用对象发送每封电子邮件,每封电子邮件有 3-4 秒的延迟
- 试过可选配置,注释掉或设置 false,结果都一样
邮件程序设置中是否还缺少其他任何内容,或者是否有一些我应该检查的幕后配置? 谢谢
最佳答案
缓慢(或因超时而失败)是因为 Google 支持 IPv6 寻址但您的网络不支持。 (例如,Digital Ocean 尚不支持 IPv6 用于 SMTP 流量)。所以,使用这个:
$mail->Host = gethostbyname("smtp.gmail.com");
gethostbyname()将返回 IPv4 地址。
对我来说,我的 PHPMailer 脚本执行时间从大约 2 分钟缩短到 <4 秒
关于PHPMailer 在发送电子邮件时使用 Gmail SMTP 速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20068484/