QIMS 邮件异步发送实现

  • A+
所属分类:PHP开发
摘要

邮件发送一直是严重影响用户体验的,加载速度一般都不会快,前期一直没处理这个,现在有时间了,对这个问题进行了修复,下面描述下修复的方法吧。

QIMS 邮件异步发送实现

fsockopen

邮件发送一直是严重影响用户体验的,加载速度一般都不会快,前期一直没处理这个,现在有时间了,对这个问题进行了修复,下面描述下修复的方法吧。

因为QIMS系统使用的是send_email函数进行邮件发送的,为了不做整体的变更,将原send_email函数进行改写,为real_send_email,这样就不用去修改页面邮件函数,较少操作量,然后就重新定义send_email函数,让其异步处理,代码如下:

 

/**
 * [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); } 


为了避免去写数据库,这里就直接将邮件内容写到了文件中,接下来就该真的发送邮件了,看new_send_email.php文件代码:

 

<?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");

?>

new_send_email.php这个文件主要就是对传递过来的参数的邮件进行真实的发送,调用real_send_email函数进行发送,发送完成后记录下完成发送的事件,这个主要是为了调试的时候使用,最后通过unlink函数,对文件进行删除工作。

这样就实现了邮件的异步发送,主要是需要了解 fsockopen 函数的使用。完美的实现了异步发送邮件,邮件成功发送了,却不留下一点痕迹。

  • 我的微信
  • 加我请备注缘由
  • weinxin
  • 我的微信公众号
  • 轻松随便关注
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

关闭震动