|
本帖最后由 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
然后再测试就可以了。
|
|