baiyuxiong 发表于 2012-12-19 23:08:06

邮件库的mail和sendmail协议用法

本帖最后由 baiyuxiong 于 2012-12-19 23:10 编辑

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

CI的Email类库除了smtp外的另外两种协议,mail和sendmail其实是一样的。
mail协议是调用了PHP的mail函数,但mail函数还是要调用服务器上的sendmail。
而sendmail则是直接调用sendmail命令,所以我推荐使用sendmail,用法如下:

            $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

对头

james321 发表于 2016-3-17 11:48:39

我配置了mail能发送改成sendmail 就不行。
页: [1]
查看完整版本: 邮件库的mail和sendmail协议用法