QIMS 邮件异步发送实现

  • 2015年3月9日
  • 790
  • A+
所属分类:PHP开发
摘要

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

QIMS 邮件异步发送实现

fsockopen

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

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

 

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


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

 

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

?>
[/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: