在ovh服务器上PHPMailer smtp connect()失败

时间:2016-01-21 10:40:48

标签: php phpmailer ovh

我使用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的同一页面。 这是输出的图片: enter image description here

1 个答案:

答案 0 :(得分:2)

正如docs指出:

  

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

     

这可能也显示为SMTP connect()失败或Called Mail()而未在调试输出中连接。这通常被报告为PHPMailer问题,但它几乎总是由本地DNS故障,防火墙阻止或本地网络上的其他问题引起。这意味着PHPMailer无法联系您在Host属性中指定的SMTP服务器,但没有确切说明原因。它也可能是因为没有加载openssl扩展名(参见下面的加密说明)。

所以我的建议是设置:

$m->SMTPDebug = 4; 

获取更详细的消息,并在找到原因后再更改回0

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

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

  

服务器 - >客户:250-ns0.ovh.net您连接到mail751 250-AUTH LOGIN PLAIN 250-AUTH =登录PLAIN 250-8BITMIME 250 SIZE 109000000
  要求Auth方法:UNKNOWN
  服务器上可用的Auth方法:LOGIN,PLAIN
  选择验证方法:登录
  客户 - >服务器:AUTH LOGIN
  SMTP - > get_lines():$ data是“”   SMTP - > get_lines():$ str是“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)”
  服务器 - >客户:535授权失败(#5.7.0)
  SMTP错误:密码命令失败:535授权失败(#5.7.0)
  SMTP错误:无法进行身份验证   客户 - >服务器:退出   SMTP - > get_lines():$ data是“”   SMTP - > get_lines():$ str是“221 ns0.ovh.net你连接到mail751”
  服务器 - >客户端:221 ns0.ovh.net您连接到mail751
  连接:关闭

所以,显然,ovh并没有认证你。也许ovh在某种程度上限制了你的速度?