首页 文章

PHPMailer:SMTP错误:无法连接到SMTP主机

提问于
浏览
38

我被困了 . 它给了我错误:
SMTP Error: Could not connect to SMTP host.
我尝试过从Thunderbird发送电子邮件,但它确实有效!但不是通过PHPMailer ......以下是Thunderbird的设置:

Server name: mail.exampleserver.com Port: 587 Username: user@exampleserver.com Secure Authentication: No Connection Security: STARTTLS

我在上一个使用PHPMailer的项目中将这些与服务器进行了比较,它们是:

Server name: mail.exampleserver2.com Port: 465 Username: user@exampleserver2.com Secure Authentication: No Connection Security: SSL/TLS

我的PHP代码是:

$mail = new PHPMailer();
 $mail->IsSMTP(); // send via SMTP
 $mail->Host = SMTP_HOST; // SMTP servers
 $mail->Port = SMTP_PORT; // SMTP servers
 $mail->SMTPAuth = true; // turn on SMTP authentication
 $mail->Username = SMTP_USER; // SMTP username
 $mail->Password = SMTP_PASSWORD; // SMTP password
 $mail->From = MAIL_SYSTEM;
 $mail->FromName = MAIL_SYSTEM_NAME;
 $mail->AddAddress($aSecuredGetRequest['email']);
 $mail->IsHTML(true); // send as HTML

哪里错了?

9 回答

  • 4

    mail.exampleserver.com存在吗??? ,如果没有尝试以下代码(你必须有Gmail帐户)

    $mail->SMTPSecure = "ssl";  
    $mail->Host='smtp.gmail.com';  
    $mail->Port='465';   
    $mail->Username   = 'you@gmail.com'; // SMTP account username
    $mail->Password   = 'your gmail password';  
    $mail->SMTPKeepAlive = true;  
    $mail->Mailer = "smtp"; 
    $mail->IsSMTP(); // telling the class to use SMTP  
    $mail->SMTPAuth   = true;                  // enable SMTP authentication  
    $mail->CharSet = 'utf-8';  
    $mail->SMTPDebug  = 0;
    
  • 63

    你的问题很可能就是这个问题

    连接安全性:STARTTLS连接安全性:SSL / TLS

    这些是两种不同的协议,你使用正确的协议,无论你在Thunderbird中使用什么,都需要使用 .

    尝试设置变量:

    // if you're using SSL
    $mail->SMTPSecure = 'ssl';
    // OR use TLS
    $mail->SMTPSecure = 'tls';
    
  • 48

    我有一个类似的问题 . 我安装了PHPMailer版本1.72,它不准备管理SSL连接 . 升级到上一版本解决了这个问题 .

  • 10

    由于这是一个流行的错误,请查看PHPMailer Wiki上的故障排除 .

    这也适合我

    $mailer->Port = '587';
    
  • 0

    我遇到了类似的问题,并且发现 php.ini 中的 openssl.cafile 配置指令需要设置为允许验证安全对等体 . 您只需将其设置为证书颁发机构文件的位置,就像您可以在http://curl.haxx.se/docs/caextract.html获得的那样 .

    从PHP 5.6开始,这个指令是新的,所以当从PHP 5.5升级时,这让我措手不及 .

  • 6

    我有同样的问题,因为PHPMailer意识到服务器支持STARTTLS所以它试图自动升级连接到加密连接 . 我的邮件服务器与我网络中的Web服务器在同一子网上,这完全在我们的域防火墙后面,所以我不太担心使用加密(加上生成的电子邮件不包含敏感数据) .

    所以我要做的就是在class.phpmailer.php文件中将SMTPAutoTLS更改为false .

    /**
     * Whether to enable TLS encryption automatically if a server supports it,
     * even if `SMTPSecure` is not set to 'tls'.
     * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid.
     * @var boolean
     */
    public $SMTPAutoTLS = false;
    
  • 0

    在我的情况下,PHP中缺少SSL支持,这给出了这个错误 .

    所以我启用 extension=php_openssl.dll

    $mail->SMTPDebug = 1; 也暗示了这个解决方案 .

    Update 2017

    $mail->SMTPDebug = 2; ,见:https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#enabling-debug-output

  • 0

    由于这个问题在谷歌中显得很高,我想在这里分享我的解决方案,其中PHP刚刚升级到5.6版(具有更严格的SSL行为) .

    PHPMailer维基有一个关于此的部分:

    https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure

    建议的解决方法包括以下代码:

    $mail->SMTPOptions = array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        )
    );
    

    这适用于PHPMailer 5.2.10(及以上版本) .

    Note: 显然,也就是那个wiki中的建议,这应该是一个临时的解决方案!

    正确的解决方法是用一个好的证书替换无效,配置错误或自签名的证书 .

  • 6

    以下代码为我工作:

    $mail = new PHPMailer(true);
    
    $mail->isSMTP();// Set mailer to use SMTP
    $mail->CharSet = "utf-8";// set charset to utf8
    $mail->SMTPAuth = true;// Enable SMTP authentication
    $mail->SMTPSecure = 'tls';// Enable TLS encryption, `ssl` also accepted
    
    $mail->Host = 'smtp.gmail.com';// Specify main and backup SMTP servers
    $mail->Port = 587;// TCP port to connect to
    $mail->SMTPOptions = array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        )
    );
    $mail->isHTML(true);// Set email format to HTML
    
    $mail->Username = 'Sender Email';// SMTP username
    $mail->Password = 'Sender Email Password';// SMTP password
    
    $mail->setFrom('example@mail.com', 'John Smith');//Your application NAME and EMAIL
    $mail->Subject = 'Test';//Message subject
    $mail->MsgHTML('HTML code');// Message body
    $mail->addAddress('User Email', 'User Name');// Target email
    
    
    $mail->send();
    

相关问题