php CI 后台发送邮件通知的方法及解决中文乱码问题

需求:php ci 框架,在用户中心,用户提交了一条需要审核的信息后自动发邮件通知管理人员,管理人员审核后也发邮件通知用户,动作都是在后台自动填充内容完成的。由于发送给用户的不能使用Linux系统发邮件功能,那样基本上都到垃圾桶里面了,得申请个第三方企业邮箱。

当然也可以使用个人邮箱进行发送了,需要配置php.ini文件把extension=php_openssl.dll前面的;号去掉,保存后重启web服务(apache)

function sendEmail(){ 
        $this->load->library('email'); 
        $config['protocol'] = 'smtp'; 
        $config['smtp_host'] = 'ssl://smtp.gmail.com'; 
        $config['smtp_user'] = 'XXXXXXXXXX@gmail.com'; 
        $config['smtp_pass'] = 'XXXXXXXXXXXXX'; 
        $config['smtp_port'] = '465'; 
        $config['smtp_timeout'] = '10'; 
        $config['newline'] = "\r\n"; 
        $config['crlf'] = "\r\n"; 
        $this->email->initialize($config); 
         
        $this->email->from('XXXXXXXXXX@gmail.com'); 
        $this->email->to('xxx@qq.com'); 
        $this->email->subject("测试发布中文邮件-标题"); 
        $this->email->message('测试发布中文邮件-内容!'); 
        $this->email->send(); 
         //打印出调试信息
        echo $this->email->print_debugger(); 
   } 

注意:CI默认的对邮件标题(Subject)的编码 Q-Encoding (简称 Q编码)会导致中文乱码,需要变成了 Base64 (简称 B编码)
修改方法:system/libraries/Email.php 找到:function subject($subject)方法
把里面的$subject = $this->_prep_q_encoding($subject); 
改成 $subject = '=?'. $this->charset .'?B?'. base64_encode($subject) .'?=';

另外可以把调用发送邮件的方法放到$this->load->view('xxx',$data)后面,在页面返回后后台运行,节省响应时间。

另:国内的网易,QQ免费企业邮箱感觉做得很不错,但国外企业邮箱,谷歌、微软企业邮箱现在用不了,zoho免费企业邮箱(免费3个人使用)感觉还可以,具体可以看本人另外一篇博客。

gmail使用不同IP进行发送有很容易给判断为异常阻止发送,这时候需要登录验证,并修改一个更强的密码后才能正常使用。

本人试过只是点确定是自己的操作不改密码是无法恢复正常的。

用debug打印出来的部分报错信息如下:

Failed to authenticate password. Error: 534-5.7.14 Please log in via your web browser and then try again. 534-5.7.14 Learn more at 534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 qk2sm707804pbc.18 – gsmtp

from: 530-5.5.1 Authentication Required. Learn more at
530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 qk2sm707804pbc.18 - gsmtp

搜索了后在stackoverflow上看到一个回答就是说帐号安全问题,需要改密码的。
http://stackoverflow.com/questions/20337040/gmail-smtp-debug-error-please-log-in-via-your-web-browser


暂无评论

发表评论

快捷键:Ctrl+Enter