php邮件程序中的stream_socket_enable_crypto()错误

Posted

技术标签:

【中文标题】php邮件程序中的stream_socket_enable_crypto()错误【英文标题】:stream_socket_enable_crypto() Error in php mailer 【发布时间】:2017-06-24 20:33:53 【问题描述】:

我使用过 php 5.3,我尝试使用 php mailer LIBRARY 发送邮件.. 但我收到错误

警告:stream_socket_enable_crypto() [streams.crypto]:此流不支持 SSL/crypto 在 D:\xampp\htdocs\mail_check\mail\class.smtp.php 行 313 邮件程序错误:SMTP 连接()失败。

$sendfrm_name = "xxxx";
        $sendfrm_id = "ddsdsd@gmail.com";

        $sendtoname = 'yyyy';
        $sendto = 'yyyyyy@gmail.com';

        $cc = '';

        include("mail/PHPMailerAutoload.php");
        include("mail/class.PHPMailer.php");
        include("mail/class.smtp.php");

        $mail = new PHPMailer;
        $mail-> isSMTP();
        $mail-> Host = 'smtp.gmail.com';
        $mail-> SMTPAuth = true;
        $mail->smtpConnect = array(
        'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
        )
        );
        $mail-> Username = 'fffffff@gmail.com';
        $mail-> Password = 'ekdbaffdfba..';
        $mail-> SMTPSecure = 'tls';
        $mail-> Port = 587; //587
        $mail-> setFrom($sendfrm_id, $sendfrm_name);
        $mail-> addAddress($sendto, $sendtoname);
        $mail-> addReplyTo($sendto, $sendtoname);
        //$mail->addCC($cc);
        $mail->WordWrap = 50;
        $mail->ishtml(true);
        $mail->Subject = "Test Mail";
        $mail->Body = "Name: ".$sendfrm_name ."<br /> Email: ".$sendfrm_id;
        if(!$mail->send())
        
            echo "Mailer Error: ".$mail->ErrorInfo;
        
        else
        
            echo "1";
        

我收到错误Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in D:\xampp\htdocs\mail_check\mail\class.smtp.php on line 313 Mailer Error: SMTP connect() failed.

如何解决这个错误?

【问题讨论】:

【参考方案1】:

试试

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

    $mail->SMTPSecure = false;
    $mail->SMTPAutoTLS = false;

【讨论】:

您能否解释一下为什么会这样? $mail->SMTPAutoTLS = false;为我做了伎俩。我只是使用 SMTPSecure 为 false,但还不够。【参考方案2】:

您的 PHP 安装缺少允许对此类流进行 TLS 加密的 SSL 扩展。有类似的问题有答案,例如this one。

您不应该为 PHP 5.3 编写任何新代码 - 它不再受支持并且可能存在安全漏洞;无论如何,更新可能会为您提供您缺少的包装器。

它不一定会影响这个特定问题,但您的代码基于一个过时的示例,并且没有按照文档告诉您加载 PHPMailer 类 - 确保您使用的是 the latest version 和 base你在the gmail example provided with PHPMailer上的代码。

【讨论】:

以上是关于php邮件程序中的stream_socket_enable_crypto()错误的主要内容,如果未能解决你的问题,请参考以下文章

如何强制电子邮件程序显示使用 php 在 html 电子邮件中发送的图像?

php中的电子邮件跟踪技术

PHP中的邮件队列

发送电子邮件 - MAC 中的 PHP XAMPP

TP5实现邮件发送(PHP 利用QQ邮箱发送邮件「PHPMailer」)

不使用 PHP 提交表单