php实战教程 发送邮件及解决中文乱码

网友分享于:2018-07-06 22:53 发表在 PHP

对于php的学习,我们首先要学习语言的知识点外,更重要的是学习php实战教程。因为在代码运行时,会发生各种意想不到的事情,所以需要我们冷静地分析,学习。接下来,就让如果零 if0.CN的小编来讲解一下php实战教程。

  php实战教程 发送邮件及解决中文乱码

  需要的环境条件:

  由于发送给用户的不能使用Linux系统发邮件功能,那样基本上都到垃圾桶里面了,得申请个免费的第三方企业邮箱,而且这种不需要用户回复的名称惯例使用no-reply。当然也可以使用个人邮箱进行发送了,可以在from里面指定显示的邮箱。

  发送邮件的用到了openssl,需要配置php.ini文件把extension=php_openssl.dll前面的;号去掉,保存后重启web服务(apachenginx),可以通过phpinfo();查看你当前的配置是否开启了,如图所示。

图片 1.png

  php实战教程 发送邮件及解决中文乱码

  编写发送邮件的方法,在需要的地方调用:

  function sendEmail($username,$msg)

  {

  $this->load->library('email');

  $config['protocol'] = 'smtp';

  $config['smtp_host'] = 'ssl://smtp.qq.com';

  $config['smtp_user'] = 'no-reply@xxx.com';

  $config['smtp_pass'] = 'xxxxx';

  $config['smtp_port'] = '465';

  $config['smtp_timeout'] = '10';

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

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

  $this->email->initialize($config);

  $this->email->from('no-reply@xxx.com');

  $this->email->to('xxxx@xxxx.com');

  $this->email->subject('用户:'.$username.' 提交了新内容');

  $this->email->message('用户:'.$username.'提交了:'.$msg);

  $this->email->send();

  // echo $this->email->print_debugger();//打开调试器,可以看到详细内容

  }

  注:把上面xxx的地方改成你自己对应的。如果需要增加附件的需要加上下面几句:

  $path = $_SERVER['DOCUMENT_ROOT'];

  $file = $path.'/sendfile/yourfile.txt';

  $this->email->attach($file);

  其他地方调用的方法:$this->sendEmail($username,$msg); 其中$username,$msg是调用之前定义好的有对应内容的变量,调用的时候一定要在sendEmail前面加上$this->

  另:为了页面能够更快的响应,把发送邮件的代码放在$this->load->view('xxx',$data)后面,在页面返回后后台运行,节省响应时间。

图片 4.png


  php实战教程 发送邮件及解决中文乱码

  解决中文乱码问题: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) .'?=';

  修改后接收到的邮件如图所示:

图片 2.png

  php实战教程 发送邮件及解决中文乱码

  使用gmail发送失败的原因和调试方法:

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

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

  当然还是建议用网站域名申请个免费的企业邮箱更加好一点。

  调试方法:echo $this->email->print_debugger(); 可以先把$this->load->view('xxx',$data);这句注释掉,可以清楚看到输出的详细信息。

  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

  详细内容如图所示:

图片 3.png

  php实战教程 发送邮件及解决中文乱码

  以上就是关于php实战教程的相关介绍,在工作中,会出现各种错误,只有多点进行php实战训练,才更加容易解决困难。看完后你是否存有很多疑问,收藏我们的网站,如果零 if0.CN会耐心地为大家答疑解惑。



推荐分类: Web开发 Web前端 HTML/CSS PHP ASP JavaScript jQuery HTML5 vbScript Ajax 网页设计 跨浏览器开发 高性能WEB开发 Web Service XML/SOAP CGI
推荐标签: php websocket input navicat finereport
相关文章
最新发表
热门推荐