CodeIgniter发送邮件遇证书CN不匹配错误:stream_socket_enable_crypto求助
解决CodeIgniter邮件发送的证书CN不匹配问题
这个问题我之前帮不少开发者处理过,核心原因是你配置的SMTP主机域名(mail.domain.com)和服务器实际部署的SSL证书域名(*.hostingcare.net)不匹配,导致TLS加密验证环节失败。下面给你几个不同场景下的解决方案:
1. 修正SMTP服务器地址(最稳妥的生产方案)
很多域名托管商会提供自己的SMTP服务器,而不是让你直接用自定义的mail.domain.com。你需要联系你的主机服务商,确认他们官方提供的SMTP服务器地址(比如可能是smtp.hostingcare.net或者其他类似域名),然后把配置里的smtp_host替换成正确的地址。修改后的配置示例:
$config = array( 'protocol' => 'smtp', 'smtp_host' => 'smtp.hostingcare.net', // 替换为服务商提供的地址 'smtp_port' => 587, 'smtp_user' => 'info@domain.com', 'smtp_pass' => '*******', 'mailtype' => 'html', 'charset' => 'utf-8', 'smtp_crypto' => 'tls', );
2. 临时绕过证书验证(仅用于测试环境)
如果你只是在本地测试或者调试,不想纠结证书问题,可以在配置中添加两个参数跳过证书验证。注意:生产环境绝对不能这么做,这会让你的邮件传输失去加密安全保障,可能被中间人攻击。配置修改如下:
$config = array( 'protocol' => 'smtp', 'smtp_host' => 'mail.domain.com', 'smtp_port' => 587, 'smtp_user' => 'info@domain.com', 'smtp_pass' => '*******', 'mailtype' => 'html', 'charset' => 'utf-8', 'smtp_crypto' => 'tls', 'smtp_verify_peer' => FALSE, // 跳过证书验证 'smtp_verify_peer_name' => FALSE // 跳过域名匹配验证 );
3. 配置匹配的SSL证书(自定义域名的生产方案)
如果你坚持要使用mail.domain.com作为SMTP主机,那需要给这个域名部署一张有效的SSL证书,确保证书的**通用名称(CN)或者主题备用名称(SAN)**包含mail.domain.com。你可以申请免费的Let's Encrypt证书,然后将证书配置到你的邮件服务器上,完成后证书和主机域名就能匹配,验证就能通过了。
内容的提问来源于stack exchange,提问作者Muhammad Ramzan
相关产品推荐
相关产品推荐

