QIMS 邮件异步发送实现

老虎说测试 脚本开发字数 1851阅读6分10秒阅读模式
摘要邮件发送一直是严重影响用户体验的,加载速度一般都不会快,前期一直没处理这个,现在有时间了,对这个问题进行了修复,下面描述下修复的方法吧。
QIMS 邮件异步发送实现

fsockopen

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

因为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

 最后更新:2021-6-24
  • 版权声明:本文为原创文章,转载请附上原文出处链接及本声明。
  • 转载请注明:QIMS 邮件异步发送实现 | https://chenxuehu.com/article/2015/03/4412.html