【问题标题】:fsockopen(): unable to connect to ssl://smtp.gmail.com:465fsockopen():无法连接到 ssl://smtp.gmail.com:465
【发布时间】:2025-11-22 14:40:02
【问题描述】:
$config = array(
    'protocol' => 'smtp',
    'smtp_host' => 'ssl://smtp.gmail.com',
    'smtp_port' => '465',
    'smtp_user' => "xxxxxxx@gmail.com", 
    'smtp_pass' => "xxxxxxx", // change it to yours
    'mailtype'  => 'html', 
    'charset'   => 'utf8'
);

$this->load->library('email',$config);

$this->email->set_newline("\r\n");
$this->email->set_crlf( "\r\n" );

$this->email->from($config['smtp_user']);
$this->email->to($email['user_email']);         
$this->email->subject($row['tplsubject']);
$this->email->message(html_entity_decode($email_subject));
$this->email->send();

此代码无法正常显示错误

遇到了 PHP 错误

严重性:警告

消息:fsockopen():无法连接到 ssl://smtp.gmail.com:465 (无法找到套接字传输“ssl” - 您是否忘记启用 当你配置 PHP 的时候呢?)

文件名:libraries/Email.php

行号:1689

【问题讨论】:

  • PROTIP:不要在问题中包含您的真实密码。
  • 我只是需要这个来测试,所以我从 'ssl://smtp.gmail.com' 中删除了 'ssl://' 并且能够继续测试。

标签: codeigniter


【解决方案1】:

我在服务器上遇到与电子邮件相同的问题,解决此问题的方法是将 'protocol' 从 'smtp' 更改为 'ssmtp' 和 'smtp_host' 从 'ssl://smtp.gmail.com ' 到 'ssl://ssmtp.googlemail.com'。这对我来说很好用。

【讨论】:

    【解决方案2】:

    这不是codeigniter的问题,而是php设置相关的问题。这个问题的答案可以在这里找到:Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?

    需要注意的一点是,在 codeigniter 中,您可以使用电子邮件配置文件来保存所有配置设置。 (因此您不必每次都在控制器中定义它们)。您可以通过创建文件来做到这一点:application/config/email.php 然后您可以使用您的设置填充此文件,如下所示:

    <?php defined('BASEPATH') OR exit('No direct script access allowed');
    
    $config = array(
        'protocol' => 'smtp', // 'mail', 'sendmail', or 'smtp'
        'smtp_host' => 'your_host',
        'smtp_port' => your_port,
        'smtp_user' => 'your_email',
        'smtp_pass' => 'your_password',
        'smtp_crypto' => 'security', //can be 'ssl' or 'tls' for example
        'mailtype' => 'html', //plaintext 'text' mails or 'html'
        'smtp_timeout' => '4', //in seconds
        'charset' => 'iso-8859-1',
        'wordwrap' => TRUE
    );
    

    每次加载库 ($this-&gt;load-&gt;library('email');) 时,这些设置都会自动加载。

    我还建议您立即更改您的电子邮件密码,因为您在问题中写下了您的凭据。

    【讨论】: