CommentToMail更新1.2.2版,改用异步方式发送邮件
费了半天劲终于把CommentToMail的邮件发送方式改为异步,不用在前台等待邮件发送完毕才结束评论。PHP的异步很麻烦,google了不少时间才找到解决的办法,就是fsockopen()加自写header模仿post把发邮件的任务提交到另外一个页面。参考《PHP异步工作,提升用户体验》。
跨页面参数本来选取session传递,在本地测试没问题,但是一上服务器就出问题,后来就改为临时文件保存,发送成功后删除,作为小博客来讲应该没有多大影响。
插件下载:http://dl.dbank.com/c02z6im55x#
异步函数
public static function SendMail($filename,$siteUrl) {
$dmpt=parse_url($siteUrl);
$host = $dmpt['host'];
$url=substr($dmpt['path'], 0,-1).__TYPECHO_PLUGIN_DIR__."/CommentToMail/send_mail.php";
file_put_contents('./usr/url.txt', $host.$url);
$post="filename=".$filename;
$header = "POST $url HTTP/1.0\r\n";
$header .= "Host: ".$host."\r\n";
$header .= "Referer: http://".$siteUrl."\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($post) . "\r\n\r\n";
if(ini_get('allow_url_fopen')){
if($fp = @fsockopen ($host, 80, $errno, $errstr, 30)){
fputs ($fp, $header.$post);
fclose($fp);
}else{
file_put_contents('./usr/mail_log.txt', "fsockopen错误");
}
}else{
file_put_contents('./usr/mail_log.txt', "'allow_url_fopen'未开启\n");
}
}
沙发,已经更新了。
换上了,开始没注意更新的内容。。
异步的确实好一些。。
全力支持
我换回 1.2.1 也不能发送邮件 该怎么解决
你自己测试的时候要换个邮箱评论,否则自己给自己评论是不发邮件的。
再则要求fsockopen()支持,也许你的主机禁用了“allow_url_fopen”。
怎么测试我的空间支不支持上面这些功能
cache 目录下有文本 好像是没发出去的邮件
你看下你的/usr/mail_log.txt文件里面的内容
一瞬间,一个测试的评论就不见了。
在改邮件的样式,回了你就能看到了。
难得啊,你也准备弄弄主题了?
不会做主题,就是瞎改改,原来的邮件格式太原始了,看久了影响心情。
漫慢弄,洗洗睡了。呵呵