用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5062|回复: 2
收起左侧

[Others] 邮件库的mail和sendmail协议用法

[复制链接]
发表于 2012-12-19 23:08:06 | 显示全部楼层 |阅读模式
本帖最后由 baiyuxiong 于 2012-12-19 23:10 编辑

一般发邮件,多数用免费的smtp,这样方便,适用于虚拟主机,如果要批量发送邮件,量比较大的时候且自有主机的情况下,自然是配置自己的sendmail比较好。

CI的Email类库除了smtp外的另外两种协议,mail和sendmail其实是一样的。
mail协议是调用了PHP的mail函数,但mail函数还是要调用服务器上的sendmail。
而sendmail则是直接调用sendmail命令,所以我推荐使用sendmail,用法如下:
PHP复制代码
 
            $this->load->library('email');        
            $config['protocol'] = 'sendmail';
            $this->email->initialize($config);
            $this->email->from('test@163.com', 'test');
            $this->email->reply_to('test@163.com');
            $this->email->to('xxxxx@163.com');
           
            $this->email->subject('中文');
            $this->email->message('中文');
           
            $this->email->send();
           
            echo $this->email->print_debugger();
 
复制代码


使用sendmail时,还有一个mailpath参数,这个参数一般默认就可以,表示sendmail命令安装的路径,具体参考手册。
使用mail协议时,不需要在代码里配这个参数,但需要在php.ini里面配置,这也从另一方面说明mail和sendmail是换汤不换药,只要一个能发邮件,另一个大多也能发,如果一个不行,另一个大多也是用不成的。

如果PHP返回成功,但邮件没收到,多半是sendmail配置有问题。
需要查看sendmail邮件服务器LOG来确定问题所在,命令:less /var/log/maillog
Redhat SMTP默认仅绑定127.0.0.1,不能访问外部网络,日志会有错误:Connection refused by 127.0.0.1,
修改配置/etc/mail/sendmail.cf
O DaemonPortOptions =Port=smtp,Addr=127.0.0.1, Name=MTA
改为
O DaemonPortOptions =Port=smtp, Name=MTA

保存后重启sendmail
service sendmail restart
然后再测试就可以了。
发表于 2013-4-21 20:00:42 | 显示全部楼层
对头
发表于 2016-3-17 11:48:39 | 显示全部楼层
我配置了mail能发送改成sendmail 就不行。

本版积分规则