9

在发送电子邮件时,我收到了一堆这样的错误:

A PHP Error was encountered

Severity: Notice

Message: fwrite(): send of 12 bytes failed with errno=32 Broken pipe

Filename: libraries/Email.php

Line Number: 1846

A PHP Error was encountered

Severity: Notice

Message: fwrite(): send of 39 bytes failed with errno=32 Broken pipe

Filename: libraries/Email.php

Line Number: 1846

A PHP Error was encountered

Severity: Notice

Message: fwrite(): send of 31 bytes failed with errno=32 Broken pipe

Filename: libraries/Email.php

Line Number: 1846

我已按照 CodeIgniter 用户指南配置 SMTP:

$config['protocol']='smtp';  
$config['smtp_host']='ssl0.ovh.net';  
$config['smtp_port']='465';  
$config['smtp_timeout']='10';  
$config['smtp_user']='postmaster%example.com';  
$config['smtp_pass']='password';
$config['mailtype'] = 'html';
$config['charset'] = 'utf-8';
$config['newline'] = "\r\n";
$config['useragent'] = 'Project';

配置文件似乎很好,而且正确(我检查了 OVH 的电子邮件配置文件)。

有什么解决办法吗?

4

7 回答 7

10

我也处于同样的情况。越来越:

消息:fwrite(): SSL: Broken pipe</p><p>文件名:libraries/Email.php</p><p>行号:2250&

真正产生影响的变化是 'smtp_crypto' 配置选项设置为 'ssl'

$config['protocol'] = 'smtp';
$config['smtp_host'] = 'ssl://example.com';
$config['smtp_crypto'] = 'ssl';
$config['smtp_port'] = '465';
$config['smtp_user'] = 'user@example.com';
$config['smtp_pass'] = 'password';
$config['mailtype'] = 'html';
$config['charset'] = 'iso-8859-1';
$config['wordwrap'] = 'TRUE';

我通过搜索 SSL 选项在https://www.codeigniter.com/user_guide/libraries/email.html找到了这个解决方案。

于 2018-03-13T07:22:32.393 回答
6

这是对我有用的答案

http://biostall.com/resolving-error-with-sending-emails-via-smtp-using-codeigniter/

请务必使用 "\r\n" 而不是 '\r\n'

您也可以在配置文件中进行设置:

$config['newline'] = "\r\n";
$config['crlf'] = "\r\n";
于 2016-04-04T20:37:41.710 回答
5

如果您为您的网站使用 cpanel,则 smtp 限制存在问题并导致此错误。

SMTP 限制

此功能可防止用户绕过邮件服务器发送邮件,这是垃圾邮件发送者常用的做法。它将只允许 MTA、mailman 和 root 连接到远程 SMTP 服务器。

此控件也可在 Tweak Settings 中进行调整。

此设置已更新。

SMTP 限制已禁用。

我遇到了类似的问题,不得不禁用 SMTP 限制。之后一切正常。

于 2014-04-14T17:01:44.910 回答
3

就 CI 而言,您的电子邮件配置数组存在很多可能导致此错误的问题。

如果您在本地开发环境中,请尝试将“smtp”的大小写更改为带有大写字母的“SMTP”。

如果您在实时服务器上,请尝试将它们更改为小型大写字母。

总而言之,$config['protocol'] = 'smtp'有时使用大写字母会有所帮助。

于 2018-03-13T10:11:59.503 回答
2

同样的问题......但对我有用的是这些配置集:

$config['protocol']     = 'smtp';
$config['smtp_host']    = XXX;
$config['smtp_user']    = XXX;
$config['smtp_port']    = 25; // was 465
$config['smtp_pass']    = XXX;
$config['newline']      = "\r\n";

消息停止了。:D

于 2017-11-06T17:14:06.310 回答
0

我试试这个,它对我有用

$config['protocol'] = 'smtp';
$config['smtp_crypto'] = 'tls';
$config['smtp_host'] = 'smtp.gmail.com';    
$config['smtp_port'] = '587';
于 2018-10-16T00:11:22.003 回答
0

使用 smpt_port:25,它对我有用

于 2018-01-14T02:48:21.470 回答