SMTP连接错误使用phpmailer


SMTP connect error using phpmailer

我使用这个代码使用smtp发送电子邮件:

require 'phpmailer/class.phpmailer.php';
 $mail = new PHPMailer(); // create a new object
  $mail->IsSMTP(); // enable SMTP
  $mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
  $mail->SMTPAuth = true; // authentication enabled
  $mail->Host = "sr4.supercp.com";
  $mail->Port = 465; // or 587
  $mail->IsHTML(true);
  $mail->Username = "********";
  $mail->Password = "********";
  $mail->SetFrom("********");
  $mail->Subject = "Test";
  $mail->Body = "hello";
  $mail->AddAddress("****@gmail.com");
   if(!$mail->Send())
      {
      echo "Mailer Error: " . $mail->ErrorInfo;
        echo "<pre>";
        echo print_r($mail);
      }
      else
      {
      echo "Message has been sent";
      }

得到这个错误:

2014-08-25 18:53:11 CLIENT -> SERVER: EHLO grabblaw.com
2014-08-25 18:53:11 SMTP ERROR: EHLO command failed:
2014-08-25 18:53:11 SMTP NOTICE: EOF caught while checking if connected SMTP connect() failed. Mailer Error: SMTP connect() failed.

我花了一整天的时间,但还是没能完成这项工作。请帮助。请参考此url获取更多错误详细信息:http://grabblaw.com/mail_template.php

与此问题类似PHPMailer EHLO不支持SMTP错误

将端口更改为25应该可以工作:我尝试telnet:

telnet grabblaw.com 25 //works
telnet grabblaw.com 465 //hangs
telnet grabblaw.com 587 //no response

你正在设置:

$mail->Port = 465; // or 587

但没有伴随:

$mail->SMTPSecure = 'ssl'; // or 'tls'

所以你试图将未加密的数据发送到加密的连接,这将不起作用(这是SMTP over SSL在15年前被弃用的原因之一)。587上的TLS对这个更有抵抗力。

切换到端口25通常意味着你完全放弃加密,这不是一个好的解决方案。