使用CodeIgniter发送电子邮件时出错

时间:2012-12-04 00:44:10

标签: codeigniter email smtp freebsd

发送电子邮件时,我收到了一堆此类错误:

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的电子邮件配置文件)。

任何解决方案?

7 个答案:

答案 0 :(得分:5)

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

  

SMTP限制

     

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

     

此控件也可在调整设置中调整。

     

此设置已更新。

     

禁用SMTP限制。

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

答案 1 :(得分:3)

我也处于同样的境地。得到了:

  

消息:fwrite():SSL:管道损坏< / 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找到了此解决方案。

答案 2 :(得分:2)

这是对我有用的答案

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

请务必使用“\ r \ n”而不是“\ r \ n”

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

$config['newline'] = "\r\n";
$config['crlf'] = "\r\n";

答案 3 :(得分: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

答案 4 :(得分:1)

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

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

如果您使用的是实时服务器,请尝试将其更改为小型大写字母。

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

答案 5 :(得分:0)

使用smpt_port:25,它对我有用

答案 6 :(得分:0)

我尝试这个,对我来说很有用

$config['protocol'] = 'smtp';
$config['smtp_crypto'] = 'tls';
$config['smtp_host'] = 'smtp.gmail.com';    
$config['smtp_port'] = '587';