邮件发送一直是严重影响用户体验的,加载速度一般都不会快,前期一直没处理这个,现在有时间了,对这个问题进行了修复,下面描述下修复的方法吧。
因为QIMS系统使用的是send_email函数进行邮件发送的,为了不做整体的变更,将原send_email函数进行改写,为real_send_email,这样就不用去修改页面邮件函数,较少操作量,然后就重新定义send_email函数,让其异步处理,代码如下:文章源自陈学虎-https://chenxuehu.com/article/2015/03/4412.html
/** * [send_email description] * @param [string] $mail [邮件地址] * @param [string] $sub [邮件主题] * @param [string] $body [邮件正文] * @return [null] [无定义] */ function send_email($mail,$sub,$body){ $m = rand(10000,99999).time(); $p = array(); $p[]=array($mail,$sub,$body); $p = var_export($p,ture); $p = "<?php return $p; ?>"; file_put_contents("./mailfile/".$m.".php", $p); $proxy = "www.test.com"; $fp=fsockopen($proxy,80,$errno,$errstr,5); if(!$fp){ echo "$errstr ($errno)<br />/n"; } $url = "http://www.test.com/qims/new_send_email.php"; fputs($fp, "POST $url?id=$m HTTP/1.0\r\nHost: $proxy\r\n\r\n"); fclose($fp); }
文章源自陈学虎-https://chenxuehu.com/article/2015/03/4412.html
为了避免去写数据库,这里就直接将邮件内容写到了文件中,接下来就该真的发送邮件了,看new_send_email.php文件代码:文章源自陈学虎-https://chenxuehu.com/article/2015/03/4412.html
<?php // +---------------------------------------------------------------------- /** * @author Chenxuehu <chenxuehu0@163.com> * 邮件异步处理文档 * @version * @copyright Copyright (C) 2015 Chenxuehu. * @link http://chenxuehu.com */ // +---------------------------------------------------------------------- // | @Date: 2015-03-02 21:39:05 // | @Last Modified by: Chenxuehu-Office // | @Last Modified time: 2015-03-03 11:23:00 // +---------------------------------------------------------------------- require_once 'core.php'; $m = $_GET['id']; if($m){ $data = require './mailfile/'.$m.'.php'; if(is_array($data)){ foreach($data as $d){ real_send_email($d[0],$d[1],$d[2]); } } $data[] = date("Y-m-m H:i:s")."完成了邮件发送"; $p = var_export($data,ture); $p = "<?php return $p; ?>"; file_put_contents("./mailfile/".$m.".php", $p); } unlink("./mailfile/".$m.".php"); ?>
文章源自陈学虎-https://chenxuehu.com/article/2015/03/4412.html
new_send_email.php这个文件主要就是对传递过来的参数的邮件进行真实的发送,调用real_send_email函数进行发送,发送完成后记录下完成发送的事件,这个主要是为了调试的时候使用,最后通过unlink函数,对文件进行删除工作。文章源自陈学虎-https://chenxuehu.com/article/2015/03/4412.html
这样就实现了邮件的异步发送,主要是需要了解 fsockopen 函数的使用。完美的实现了异步发送邮件,邮件成功发送了,却不留下一点痕迹。文章源自陈学虎-https://chenxuehu.com/article/2015/03/4412.html 文章源自陈学虎-https://chenxuehu.com/article/2015/03/4412.html
评论