1

我正在使用 PHPMailer 发送每日电子邮件(最多 100 封电子邮件),我的脚本在本地运行良好,但是当我将其上传到我的服务器(托管在 OVH)时,有时它会在平均发送 20 封电子邮件后阻塞并生成此错误

SMTP connect() failed https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

我联系了 OVH,他们很遗憾我的电子邮件地址没有问题,所以我认为这是我的代码中的一个错误,这是我的代码:

$m = new PHPMailer;
$mail = new Mailing();
$admin = new Administrateur();

$m->isSMTP();
$m->IsHTML(true); 
$m->SMTPAuth = true;
$m->SMTPDebug = 0;
$m->SMTPKeepAlive = true;
$m->Host = 'ssl0.ovh.net';
$m->Username = 'exemple@exemple.com';
$m->Password = 'xxxxxxxxxxx';
$m->SMTPSecure = 'ssl';
$m->Port = "465";
$m->CharSet = 'UTF-8';
$m->From = 'exemple@exemple.com';
$m->FromName = 'Chantier TN';
$m->addReplyTo('exemple@exemple.com', 'Reply adress');
$m->Subject = 'Alerte quotidienne';

$error = false;
$alertes = Session::get('alertes');
$date = date('Y-m-d h:i:s');
$token = $alertes[$id]['id_cli'].'-'.strtotime($date);

$m->addAddress($alertes[$id]['email'], strtoupper($alertes[$id]['nom']).' '.$alertes[$id]['prenom']);

Session::delete('send');
$m->Body = $mail->generateBodyForAlerte(strtoupper($alertes[$id]['nom']).' '.$alertes[$id]['prenom'], $alertes[$id]['leads'], $token);
if ($m->send()) {
    $mail->set('type_mail', 1);
    $mail->set('date_send', $date);
    $mail->set('id_cli', $alertes[$id]['id_cli']);
    $mail->set('id_op', $admin->getId());
    $mail->set('content', Session::get('send'));
    $mail->save();
    $s = Session::exists('sent') ? Session::get('sent') : array();
    $s[] = $alertes[$id]['email'];
    Session::put('sent', $s);
}
else{
    $error = $m->ErrorInfo;
    $s = Session::exists('notsend') ? Session::get('notsend') : array();
    $s[] = $alertes[$id]['email'].' error: '.$error;
    Session::put('notsend', $s);
}
$m->clearAddresses();

if (!isset($_SESSION['alertes'][$id+1])) {
    $next = false;
}
else{
    $next = $id+1;
}

电子邮件列表存储在会话中以使用 id 循环,我使用 mvc 结构从 url 获取 id,执行此代码后,我呈现一个显示已发送电子邮件列表的视图,如果有错误我回显输出错误的电子邮件地址,5 秒后我使用 jquery 重定向到具有下一个 ID 的同一页面。这是输出的图片: 在此处输入图像描述

4

1 回答 1

2

正如文档指出的那样:

“SMTP 错误:无法连接到 SMTP 主机。”

这也可能显示为 SMTP connect() failed 或 Called Mail() without being connected 在调试输出中。这通常被报告为 PHPMailer 问题,但它几乎总是归结为本地 DNS 故障、防火墙阻止或本地网络上的其他问题。这意味着 PHPMailer 无法联系您在 Host 属性中指定的 SMTP 服务器,但没有说明具体原因。它也可能是由于未加载 openssl 扩展而导致的(请参阅下面的加密说明)。

所以我的建议是设置:

$m->SMTPDebug = 4; 

0获得更详细的消息并在找出原因后改回。

在此处发布扩展的调试信息,以便我们进一步研究。

调试信息(来自评论 - 删除时间戳):

服务器->客户端:250-ns0.ovh.net 您连接到 mail751 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-8BITMIME 250 SIZE 109000000
请求的身份验证方法:未知
服务器上可用的身份验证方法:LOGIN,PLAIN 身份
验证方法已选择:登录
客户端 -> 服务器:AUTH 登录
SMTP -> get_lines(): $data is ""
SMTP -> get_lines(): $str is "334 VXNlcm5hbWU6"
服务器 -> 客户端:334 VXNlcm5hbWU6
客户端 -> 服务器:bm9yZXBseUBjaGFudGllci50bg= =
SMTP -> get_lines(): $data 是“”
SMTP -> get_lines(): $str 是“334 UGFzc3dvcmQ6”
服务器 -> 客户端: 334 UGFzc3dvcmQ6
客户端 -> 服务器: Y2luMjM0NjQ4ODQ=
SMTP -> get_lines(): $data是 ””
SMTP -> get_lines(): $str 是“535 授权失败 (#5.7.0)”
SERVER -> CLIENT: 535 授权失败 (#5.7.0)
SMTP 错误: 密码命令失败: 535 授权失败 (#5.7.0 )
SMTP 错误:无法验证。
CLIENT -> SERVER: QUIT
SMTP -> get_lines(): $data is ""
SMTP -> get_lines(): $str is "221 ns0.ovh.net 你连接到 mail751"
SERVER -> CLIENT: 221 ns0.ovh。 net 你连接到 mail751
连接:关闭

因此,显然,ovh 没有对您进行身份验证。也许 ovh 以某种方式限制了你?

于 2016-01-21T10:46:44.740 回答