From 7b3e979fd41b7a2ad73a32777df50d9ffb09b48f Mon Sep 17 00:00:00 2001 From: martinzhou2015 <1009465756@qq.com> Date: Tue, 6 Oct 2015 20:25:13 +0800 Subject: [PATCH] Update 2015-10-06 --- .../Admin/Controller/BlogController.class.php | 101 +++++++ .../Admin/Controller/HallController.class.php | 97 +++++++ .../Admin/Controller/InfoController.class.php | 44 +++ .../Controller/LoginController.class.php | 6 + .../Admin/Controller/PostController.class.php | 29 +- Application/Admin/Model/BlogModel.class.php | 10 + Application/Admin/Model/HallModel.class.php | 9 + Application/Admin/View/Blog/add.html | 35 +++ Application/Admin/View/Blog/index.html | 43 +++ Application/Admin/View/Blog/update.html | 35 +++ Application/Admin/View/Hall/add.html | 17 ++ Application/Admin/View/Hall/index.html | 40 +++ Application/Admin/View/Hall/update.html | 18 ++ Application/Admin/View/Info/index.html | 45 +++ Application/Admin/View/Links/add.html | 2 +- Application/Admin/View/Links/update.html | 2 +- Application/Admin/View/Post/index.html | 2 +- Application/Admin/View/Post/send.html | 27 ++ Application/Admin/View/Public/sidebar.html | 17 +- Application/Common/Conf/config.php | 9 +- Application/Common/Conf/db.php | 2 +- .../Home/Controller/BlogController.class.php | 43 +++ .../Home/Controller/IndexController.class.php | 2 + Application/Home/View/Blog/index.html | 35 +++ Application/Home/View/Blog/view.html | 23 ++ Application/Home/View/Index/index.html | 49 +++- Application/Home/View/Public/footer.html | 20 +- Application/Home/View/Public/header.html | 3 +- Application/User/Conf/config.php | 2 +- .../Controller/ChangeController.class.php | 56 ++++ .../Controller/ForgetController.class.php | 60 ++++ .../User/Controller/InfoController.class.php | 78 ++++++ .../User/Controller/PostController.class.php | 2 +- Application/User/Model/ChangeModel.class.php | 11 + Application/User/Model/InfoModel.class.php | 25 ++ Application/User/View/Change/index.html | 32 +++ Application/User/View/Forget/index.html | 96 +++++++ Application/User/View/Index/index.html | 7 +- Application/User/View/Info/add.html | 33 +++ Application/User/View/Info/index.html | 42 +++ Application/User/View/Info/update.html | 33 +++ Application/User/View/Login/index.html | 21 +- Application/User/View/Public/footer.html | 18 +- Application/User/View/Public/header.html | 3 +- Application/User/View/Reg/index.html | 2 +- DB/srcms.sql | 262 ++++++++++++++++++ Public/Home/css/styles.css | 15 +- Public/Home/pic/douban.png | Bin 0 -> 1054 bytes Public/Home/pic/tencent.png | Bin 0 -> 849 bytes Public/Home/pic/wechat.png | Bin 0 -> 1341 bytes Public/Home/pic/weibo.png | Bin 0 -> 1588 bytes ThinkPHP/Library/Org/Net/Mail.class.php | 1 + 52 files changed, 1484 insertions(+), 80 deletions(-) create mode 100644 Application/Admin/Controller/BlogController.class.php create mode 100644 Application/Admin/Controller/HallController.class.php create mode 100644 Application/Admin/Controller/InfoController.class.php create mode 100644 Application/Admin/Model/BlogModel.class.php create mode 100644 Application/Admin/Model/HallModel.class.php create mode 100644 Application/Admin/View/Blog/add.html create mode 100644 Application/Admin/View/Blog/index.html create mode 100644 Application/Admin/View/Blog/update.html create mode 100644 Application/Admin/View/Hall/add.html create mode 100644 Application/Admin/View/Hall/index.html create mode 100644 Application/Admin/View/Hall/update.html create mode 100644 Application/Admin/View/Info/index.html create mode 100644 Application/Admin/View/Post/send.html create mode 100644 Application/Home/Controller/BlogController.class.php create mode 100644 Application/Home/View/Blog/index.html create mode 100644 Application/Home/View/Blog/view.html create mode 100644 Application/User/Controller/ChangeController.class.php create mode 100644 Application/User/Controller/ForgetController.class.php create mode 100644 Application/User/Controller/InfoController.class.php create mode 100644 Application/User/Model/ChangeModel.class.php create mode 100644 Application/User/Model/InfoModel.class.php create mode 100644 Application/User/View/Change/index.html create mode 100644 Application/User/View/Forget/index.html create mode 100644 Application/User/View/Info/add.html create mode 100644 Application/User/View/Info/index.html create mode 100644 Application/User/View/Info/update.html create mode 100644 DB/srcms.sql create mode 100644 Public/Home/pic/douban.png create mode 100644 Public/Home/pic/tencent.png create mode 100644 Public/Home/pic/wechat.png create mode 100644 Public/Home/pic/weibo.png create mode 100644 ThinkPHP/Library/Org/Net/Mail.class.php diff --git a/Application/Admin/Controller/BlogController.class.php b/Application/Admin/Controller/BlogController.class.php new file mode 100644 index 0000000..4f17314 --- /dev/null +++ b/Application/Admin/Controller/BlogController.class.php @@ -0,0 +1,101 @@ +where($where); + } + + $count = $model->where($where)->count();// 查询满足要求的总记录数 + $Page = new \Extend\Page($count,15);// 实例化分页类 传入总记录数和每页显示的记录数(25) + $show = $Page->show();// 分页显示输出 + $pages = $model->limit($Page->firstRow.','.$Page->listRows)->where($where)->order('id DESC')->select(); + $this->assign('model', $pages); + $this->assign('page',$show); + $this->display(); + } + + /** + * 添加博客 + */ + public function add() + { + //默认显示添加表单 + if (!IS_POST) { + $this->display(); + } + if (IS_POST) { + //如果用户提交数据 + $model = D("Blog"); + if (!$model->create()) { + // 如果创建失败 表示验证没有通过 输出错误提示信息 + $this->error($model->getError()); + exit(); + } else { + if ($model->add()) { + $this->success("添加成功", U('blog/index')); + } else { + $this->error("添加失败"); + } + } + } + } + /** + * 更新博客信息 + * @param [type] $id [单页ID] + * @return [type] [description] + */ + public function update() + { + $id = I('get.id',0,'intval'); + //默认显示添加表单 + if (!IS_POST) { + $model = M('blog')->where('id='.$id)->find(); + $this->assign('page',$model); + $this->display(); + } + if (IS_POST) { + $model = D("Blog"); + if (!$model->create()) { + $this->error($model->getError()); + }else{ + if ($model->save()) { + $this->success("更新成功", U('blog/index')); + } else { + $this->error("更新失败"); + } + } + } + } + /** + * 删除博客 + * @param [type] $id [description] + * @return [type] [description] + */ + public function delete() + { + $id = I('get.id',0,'intval'); + $model = M('blog'); + $result = $model->where("id=".$id)->delete(); + if($result){ + $this->success("删除成功", U('blog/index')); + }else{ + $this->error("删除失败"); + } + } +} diff --git a/Application/Admin/Controller/HallController.class.php b/Application/Admin/Controller/HallController.class.php new file mode 100644 index 0000000..d221615 --- /dev/null +++ b/Application/Admin/Controller/HallController.class.php @@ -0,0 +1,97 @@ +where($where); + } + + $count = $model->where($where)->count();// 查询满足要求的总记录数 + $Page = new \Extend\Page($count,15);// 实例化分页类 传入总记录数和每页显示的记录数(25) + $show = $Page->show();// 分页显示输出 + $hall = $model->limit($Page->firstRow.','.$Page->listRows)->where($where)->order('id DESC')->select(); + $this->assign('model', $hall); + $this->assign('page',$show); + $this->display(); + } + + /** + * 添加贡献者 + + public function add() + { + //默认显示添加表单 + if (!IS_POST) { + $this->display(); + } + if (IS_POST) { + //如果用户提交数据 + $model = D("hall"); + if (!$model->create()) { + // 如果创建失败 表示验证没有通过 输出错误提示信息 + $this->error($model->getError()); + exit(); + } else { + if ($model->add()) { + $this->success("添加成功", U('hall/index')); + } else { + $this->error("添加失败"); + } + } + } + } */ + + /** + * 更新贡献者信息 + */ + public function update() + { + $id = I('get.id',0,'intval'); + //默认显示添加表单 + if (!IS_POST) { + $model = M('hall')->where('id='.$id)->find(); + $this->assign('model',$model); + $this->display(); + } + if (IS_POST) { + $model = D("hall"); + if (!$model->create()) { + $this->error($model->getError()); + }else{ + if ($model->save()) { + $this->success("更新成功", U('hall/index')); + } else { + $this->error("更新失败"); + } + } + } + } + /** + * 删除贡献者 + */ + public function delete() + { + $id = I('get.id',0,'intval'); + $model = M('hall'); + $result = $model->delete($id); + if($result){ + $this->success("删除成功", U('hall/index')); + }else{ + $this->error("删除失败"); + } + } +} diff --git a/Application/Admin/Controller/InfoController.class.php b/Application/Admin/Controller/InfoController.class.php new file mode 100644 index 0000000..55d9fbe --- /dev/null +++ b/Application/Admin/Controller/InfoController.class.php @@ -0,0 +1,44 @@ +where($where); + } + + $count = $model->where($where)->count();// 查询满足要求的总记录数 + $Page = new \Extend\Page($count,15);// 实例化分页类 传入总记录数和每页显示的记录数(25) + $show = $Page->show();// 分页显示输出 + $pages = $model->limit($Page->firstRow.','.$Page->listRows)->where($where)->order('user_id DESC')->select(); + $this->assign('model', $pages); + $this->assign('page',$show); + $this->display(); + } + + public function delete() + { + $id = I('get.id',0,'intval'); + $model = M('info'); + $result = $model->where("user_id=".$id)->delete(); + if($result){ + $this->success("删除成功", U('info/index')); + }else{ + $this->error("删除失败"); + } + } +} diff --git a/Application/Admin/Controller/LoginController.class.php b/Application/Admin/Controller/LoginController.class.php index 34b23e3..3c83364 100644 --- a/Application/Admin/Controller/LoginController.class.php +++ b/Application/Admin/Controller/LoginController.class.php @@ -43,6 +43,12 @@ class LoginController extends Controller { if($member->save($data)){ session('adminId',$user['id']); session('username',$user['username']); + //发送验证码邮件 + import('ORG.Net.Mail'); + $ip = get_client_ip(); + $time = date("Y-m-d h:i:sa"); + $con='您好,您的后台管理账户 '.$username.' 于 '.$time.' 被登录,登录IP地址为 '.$ip.' 如果该操作非您本人操作,可能帐号信息已经被泄露,请您及时修改密码。 '; + SendMail('1009465756@qq.com','应急响应中心后台登录提示',$con,'应急响应中心'); //使用时注意将1009465756@qq.com修改为您的邮箱帐号 $this->success("登陆成功",U('Index/index')); } //定向之后台主页 diff --git a/Application/Admin/Controller/PostController.class.php b/Application/Admin/Controller/PostController.class.php index e2c1c88..9ea6656 100644 --- a/Application/Admin/Controller/PostController.class.php +++ b/Application/Admin/Controller/PostController.class.php @@ -124,4 +124,31 @@ class PostController extends BaseController $this->error("添加积分失败"); } } -} + + /** + * 分发漏洞报告 + * @param [type] $id [description] + * @return [type] [description] + */ + public function send() + { + import('ORG.Net.Mail'); + $id = I('get.id',0,'intval'); + $email = I('post.email'); + $title = I('post.title'); + $tips = I('post.tips'); + if (!IS_POST) { + $model = M('post')->where('id='.$id)->find(); + $this->assign('post',$model); + $this->display(); + } + if (IS_POST) { + $result = SendMail($email,$title,$tips,'应急响应中心'); + if($result){ + $this->success("发送成功", U('post/index')); + }else{ + $this->error("发送失败"); + } + } + } +} \ No newline at end of file diff --git a/Application/Admin/Model/BlogModel.class.php b/Application/Admin/Model/BlogModel.class.php new file mode 100644 index 0000000..358fa27 --- /dev/null +++ b/Application/Admin/Model/BlogModel.class.php @@ -0,0 +1,10 @@ + +
+ +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/Application/Admin/View/Blog/index.html b/Application/Admin/View/Blog/index.html new file mode 100644 index 0000000..e9fdac2 --- /dev/null +++ b/Application/Admin/View/Blog/index.html @@ -0,0 +1,43 @@ + + +
+ +
+ +
+
+
+ + + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + +
编号分类标题操作
{$v.id}{$v.name}{$v.title}编辑 | 删除
+ {$page} +
+ + \ No newline at end of file diff --git a/Application/Admin/View/Blog/update.html b/Application/Admin/View/Blog/update.html new file mode 100644 index 0000000..4ddc9f9 --- /dev/null +++ b/Application/Admin/View/Blog/update.html @@ -0,0 +1,35 @@ + +
+
+
+ + +
+
+ + +
+
+ + +
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/Application/Admin/View/Hall/add.html b/Application/Admin/View/Hall/add.html new file mode 100644 index 0000000..ea70d5f --- /dev/null +++ b/Application/Admin/View/Hall/add.html @@ -0,0 +1,17 @@ + +
+
+
+ + +
+
+ + +
+
+ +
+
+
+ \ No newline at end of file diff --git a/Application/Admin/View/Hall/index.html b/Application/Admin/View/Hall/index.html new file mode 100644 index 0000000..d7f8a05 --- /dev/null +++ b/Application/Admin/View/Hall/index.html @@ -0,0 +1,40 @@ + + +
+ +
+
+
+
+ + + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + +
编号贡献者图片地址操作
{$v.id}{$v.name}{$v.url}编辑 | 删除
+ {$page} +
+ + \ No newline at end of file diff --git a/Application/Admin/View/Hall/update.html b/Application/Admin/View/Hall/update.html new file mode 100644 index 0000000..de12359 --- /dev/null +++ b/Application/Admin/View/Hall/update.html @@ -0,0 +1,18 @@ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+ \ No newline at end of file diff --git a/Application/Admin/View/Info/index.html b/Application/Admin/View/Info/index.html new file mode 100644 index 0000000..b54a288 --- /dev/null +++ b/Application/Admin/View/Info/index.html @@ -0,0 +1,45 @@ + + +
+
+
+
+
+ + + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
编号用户名真实姓名住址联系方式邮编操作
{$v.user_id}{$v.username}{$v.realname}{$v.location}{$v.tel}{$v.zipcode}删除
+ {$page} +
+ + \ No newline at end of file diff --git a/Application/Admin/View/Links/add.html b/Application/Admin/View/Links/add.html index f4639ce..9d84c6f 100644 --- a/Application/Admin/View/Links/add.html +++ b/Application/Admin/View/Links/add.html @@ -6,7 +6,7 @@
- +
diff --git a/Application/Admin/View/Links/update.html b/Application/Admin/View/Links/update.html index 8f47938..7d71ebd 100644 --- a/Application/Admin/View/Links/update.html +++ b/Application/Admin/View/Links/update.html @@ -6,7 +6,7 @@
- +
diff --git a/Application/Admin/View/Post/index.html b/Application/Admin/View/Post/index.html index 3e42850..b98992f 100644 --- a/Application/Admin/View/Post/index.html +++ b/Application/Admin/View/Post/index.html @@ -43,7 +43,7 @@ {$v.time|date="Y/m/d H:i:s",###} {$v.username} {$v.category_title} - 审核 | 删除 + 审核 | 分发 | 删除 diff --git a/Application/Admin/View/Post/send.html b/Application/Admin/View/Post/send.html new file mode 100644 index 0000000..2b0d315 --- /dev/null +++ b/Application/Admin/View/Post/send.html @@ -0,0 +1,27 @@ + +
+
+
+

分发漏洞报告

+
通过邮件快速转发漏洞报告给对应部门,帮助各部门协同响应安全事件

+
+ +
+ + + +
+
+ + + +
+
+ + + +
+ +
+
+ \ No newline at end of file diff --git a/Application/Admin/View/Public/sidebar.html b/Application/Admin/View/Public/sidebar.html index 10072bb..6b2c62c 100644 --- a/Application/Admin/View/Public/sidebar.html +++ b/Application/Admin/View/Public/sidebar.html @@ -8,15 +8,24 @@ + - - + + +
- - \ No newline at end of file diff --git a/Application/Home/View/Public/footer.html b/Application/Home/View/Public/footer.html index f84cf3c..b780724 100644 --- a/Application/Home/View/Public/footer.html +++ b/Application/Home/View/Public/footer.html @@ -1,12 +1,11 @@
-
+
    -
  • -
  • -
  • -
  • +
  • weibo
  • +
  • wechat
  • +
  • douban

Copyright © at Demo Company.All Rights Reserved

@@ -17,15 +16,8 @@
- - - - - + + diff --git a/Application/Home/View/Public/header.html b/Application/Home/View/Public/header.html index 55b7e05..3b2eecd 100644 --- a/Application/Home/View/Public/header.html +++ b/Application/Home/View/Public/header.html @@ -7,7 +7,7 @@ - + @@ -29,6 +29,7 @@ diff --git a/Application/User/Conf/config.php b/Application/User/Conf/config.php index cc42ec6..634c0e7 100644 --- a/Application/User/Conf/config.php +++ b/Application/User/Conf/config.php @@ -1,4 +1,4 @@ '配置值' + ); \ No newline at end of file diff --git a/Application/User/Controller/ChangeController.class.php b/Application/User/Controller/ChangeController.class.php new file mode 100644 index 0000000..1991881 --- /dev/null +++ b/Application/User/Controller/ChangeController.class.php @@ -0,0 +1,56 @@ + 2015-08-03 + * @copyright ©2105-2018 SRCMS + * @homepage http://www.src.pw + * @version 1.0 + */ + + +class ChangeController extends BaseController{ + /** + * 显示更改密码页面 + * @return [type] [description] + */ + public function index() + { + $this->display(); + } + + /** + * 修改密码流程 + */ + public function change() + { + //验证请求方式 + if(!IS_POST)$this->error("非法请求"); + $member = M('member'); + $id = session('userId'); + $oldpassword =I('post.oldpassword','','md5'); + $password =I('post.password','','md5'); + + //验证原密码 + $user = $member->where(array('id'=>$id,'password'=>$oldpassword))->find(); + + if(!$user) { + $this->error('邮箱不存在 :(') ; + } + + //验证账户是否管理员 + if($user['type'] == 2){ + $this->error('前台无法修改管理员密码 :(') ; + } + + + $member-> password=$password; + $result = $member->where(array('id'=>$id,'password'=>$oldpassword))->save(); + if($result){ + $this->success("修改成功",U('login/logout')); + }else{ + $this->error('修改失败 :(') ; + } + } +} \ No newline at end of file diff --git a/Application/User/Controller/ForgetController.class.php b/Application/User/Controller/ForgetController.class.php new file mode 100644 index 0000000..30048ba --- /dev/null +++ b/Application/User/Controller/ForgetController.class.php @@ -0,0 +1,60 @@ + 2015-07-27 + * @copyright ©2105-2018 SRCMS + * @homepage http://www.src.pw + * @version 1.0 + */ + +class ForgetController extends Controller { + //显示找回密码页面 + public function index(){ + $this->display(); + } + //找回密码逻辑 + public function find(){ + if(!IS_POST)$this->error("非法请求"); + $member = M('member'); + $email =I('post.email','','email'); + $username =I('post.username'); + //$code = I('verify','','strtolower'); + //验证验证码是否正确 + //if(!($this->check_verify($code))){ + //$this->error('验证码错误'); + //} + //验证输入邮箱是否存在 + $user = $member->where(array('username'=>$username,'email'=>$email))->find(); + + if(!$user) { + $this->error('邮箱不存在 :(') ; + } + //验证账户是否被禁用 + if($user['status'] == 0){ + $this->error('账号被禁用,无法找回密码 :(') ; + } + + if($user['type'] == 2){ + $this->error('前台无法重置管理员密码 :(') ; + } + + //发送验证码邮件 + import('ORG.Net.Mail'); + $str = '1234567890abcdefghijklmnopqrstuvwxyz'; + $passwd=$str[rand(0,35)].$str[rand(0,35)].$str[rand(0,35)].$str[rand(0,35)].$str[rand(0,35)].$str[rand(0,35)]; + $content = md5($passwd); + $member = M('member'); + $member-> password=$content; + $member ->where(array('username'=>$username,'email'=>$email))->save(); + $con='您好您正在找回密码,您的临时新密码为'.$passwd.'请您妥善保管,登陆平台后请及时修改密码'; + if(SendMail($email,'找回密码',$con,'应急响应中心')){ + $this->success("发送成功",U('login/index')); + }else{ + $this->error('账号被禁用 :(') ; + } + + } + +} \ No newline at end of file diff --git a/Application/User/Controller/InfoController.class.php b/Application/User/Controller/InfoController.class.php new file mode 100644 index 0000000..28ed5aa --- /dev/null +++ b/Application/User/Controller/InfoController.class.php @@ -0,0 +1,78 @@ + 2015-08-02 + * @copyright ©2105-2018 SRCMS + * @homepage http://www.src.pw + * @version 1.0 + */ + +class InfoController extends BaseController{ + + public function index(){ + $id = session('userId'); + $info = M('info')->where('user_id='.$id)->select(); + $this->assign('info',$info); + $this->display(); + } + + /** + * 添加联系方式 + */ + public function add() + { + //默认显示添加表单 + if (!IS_POST) { + $this->display(); + } + if (IS_POST) { + //如果用户提交数据 + $model = D("info"); + $model->user_id = 1; + $model->username = 1; + if (!$model->create()) { + // 如果创建失败 表示验证没有通过 输出错误提示信息 + $this->error($model->getError()); + exit(); + } else { + if ($model->add()) { + $this->success("添加成功", U('info/index')); + } else { + $this->error("添加失败"); + } + } + } + } + + /** + * 更新联系方式 + */ + + public function update() + { + //默认显示添加表单 + if (!IS_POST) { + $this->display(); + } + if (IS_POST) { + //如果用户提交数据 + $model = D("info"); + $model->user_id = 1; + $model->username = 1; + if (!$model->create()) { + // 如果创建失败 表示验证没有通过 输出错误提示信息 + $this->error($model->getError()); + exit(); + } else { + if ($model->save()) { + $this->success("更新成功", U('info/index')); + } else { + $this->error("更新失败"); + } + } + } + } + +} diff --git a/Application/User/Controller/PostController.class.php b/Application/User/Controller/PostController.class.php index 23122f8..4556fcd 100644 --- a/Application/User/Controller/PostController.class.php +++ b/Application/User/Controller/PostController.class.php @@ -9,7 +9,7 @@ use Think\Controller; * @version 1.0 */ -class PostController extends Controller +class PostController extends BaseController { /** * 漏洞报告列表 diff --git a/Application/User/Model/ChangeModel.class.php b/Application/User/Model/ChangeModel.class.php new file mode 100644 index 0000000..7084f4f --- /dev/null +++ b/Application/User/Model/ChangeModel.class.php @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/Application/User/View/Forget/index.html b/Application/User/View/Forget/index.html new file mode 100644 index 0000000..1863458 --- /dev/null +++ b/Application/User/View/Forget/index.html @@ -0,0 +1,96 @@ + + + + + + 应急响应中心 + + + + + + + + + + + + + +
+
+
+
+
    +
  • +
  • +
  • +
  • +
+
+

Copyright © at Demo Company.All Rights Reserved

+

演示站点 版权所有

+

Powered By SRCMS

+
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/Application/User/View/Index/index.html b/Application/User/View/Index/index.html index 06e7a53..f5ae1b8 100644 --- a/Application/User/View/Index/index.html +++ b/Application/User/View/Index/index.html @@ -7,13 +7,8 @@

尊敬的 , 欢迎您进入漏洞报告平台 !


-
+    
-
-
- -
-
\ No newline at end of file diff --git a/Application/User/View/Info/add.html b/Application/User/View/Info/add.html new file mode 100644 index 0000000..c557e95 --- /dev/null +++ b/Application/User/View/Info/add.html @@ -0,0 +1,33 @@ + + + @@ -90,13 +91,12 @@
    -
  • -
  • -
  • -
  • +
  • weibo
  • +
  • wechat
  • +
  • douban

-

Copyright © at Demo Company.All Rights Reserved

+

Copyright © at Demo Company.All Rights Reserved

演示站点 版权所有

Powered By SRCMS

@@ -104,15 +104,10 @@
- - + - + diff --git a/Application/User/View/Public/footer.html b/Application/User/View/Public/footer.html index 0a2ab0a..bade138 100644 --- a/Application/User/View/Public/footer.html +++ b/Application/User/View/Public/footer.html @@ -3,10 +3,9 @@
    -
  • -
  • -
  • -
  • +
  • weibo
  • +
  • wechat
  • +
  • douban

Copyright © at Demo Company.All Rights Reserved

@@ -17,16 +16,5 @@
- - - - - - - \ No newline at end of file diff --git a/Application/User/View/Public/header.html b/Application/User/View/Public/header.html index 78f12cc..e1e0034 100644 --- a/Application/User/View/Public/header.html +++ b/Application/User/View/Public/header.html @@ -30,7 +30,8 @@
  • 个人中心
  • 漏洞列表
  • 报告漏洞
  • - +
  • 礼品兑换
  • +
  • 联系方式
  • diff --git a/Application/User/View/Reg/index.html b/Application/User/View/Reg/index.html index e145280..885e771 100644 --- a/Application/User/View/Reg/index.html +++ b/Application/User/View/Reg/index.html @@ -82,7 +82,7 @@

  • -

    Copyright © at Demo Company.All Rights Reserved

    +

    Copyright © at Demo Company.All Rights Reserved

    演示站点 版权所有

    Powered By SRCMS

    diff --git a/DB/srcms.sql b/DB/srcms.sql new file mode 100644 index 0000000..48cbfc5 --- /dev/null +++ b/DB/srcms.sql @@ -0,0 +1,262 @@ +-- phpMyAdmin SQL Dump +-- version phpStudy 2014 +-- http://www.phpmyadmin.net +-- +-- 主机: localhost +-- 生成日期: 2015 年 10 月 06 日 18:50 +-- 服务器版本: 5.5.40 +-- PHP 版本: 5.3.29 + +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; + +-- +-- 数据库: `srcms` +-- + +-- -------------------------------------------------------- + +-- +-- 表的结构 `blog` +-- + +CREATE TABLE IF NOT EXISTS `blog` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `title` varchar(100) NOT NULL, + `name` varchar(100) NOT NULL, + `content` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=gbk AUTO_INCREMENT=2 ; + +-- +-- 转存表中的数据 `blog` +-- + +INSERT INTO `blog` (`id`, `title`, `name`, `content`) VALUES +(1, '示例博客', '移动安全', '<p>示例博客内容</p>'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `category` +-- + +CREATE TABLE IF NOT EXISTS `category` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `pid` int(11) DEFAULT NULL COMMENT '父分类ID', + `name` varchar(20) DEFAULT NULL COMMENT '分类别名', + `title` varchar(100) DEFAULT NULL COMMENT '分类标题', + `keywords` varchar(255) DEFAULT NULL COMMENT '分类关键词', + `description` varchar(255) DEFAULT NULL COMMENT '分类描述', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ; + +-- +-- 转存表中的数据 `category` +-- + +INSERT INTO `category` (`id`, `pid`, `name`, `title`, `keywords`, `description`) VALUES +(1, 0, 'default', '默认分类', '默认分类', '默认分类描述'), +(2, 0, 'Webvul', 'Web漏洞', '', ''), +(3, 0, 'PC Clinet', 'PC客户端漏洞', '', ''), +(4, 0, 'Sever', '服务器漏洞', '', ''), +(5, 0, 'Mobile Clinet', '移动客户端漏洞', '', ''), +(6, 2, 'SQLinjection', 'SQL注入', '', ''), +(7, 2, 'XSS', 'XSS', '', ''), +(8, 2, 'CSRF', 'CSRF', '', ''), +(9, 5, 'IOS', 'IOS', '', ''), +(10, 5, 'wordpress', 'Android', 'Android', ''), +(11, 3, 'Overflow', '溢出', '', ''), +(12, 3, 'DDOS', '拒绝服务', '', ''), +(13, 7, 'DOM XSS', '基于DOM的XSS', '', ''), +(14, 7, 'Stored XSS', '存储型XSS', '', ''), +(15, 2, 'Logic', '逻辑漏洞', '', ''); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `hall` +-- + +CREATE TABLE IF NOT EXISTS `hall` ( + `id` int(10) NOT NULL, + `name` varchar(10) NOT NULL, + `url` varchar(100) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=gbk; + +-- +-- 转存表中的数据 `hall` +-- + +INSERT INTO `hall` (`id`, `name`, `url`) VALUES +(0, 'Lucy', 'http://api.randomuser.me/portraits/thumb/women/12.jpg'), +(1, 'David', 'http://api.randomuser.me/portraits/thumb/men/95.jpg'), +(2, 'Lily', 'http://api.randomuser.me/portraits/thumb/women/67.jpg'), +(3, 'Martin', 'http://api.randomuser.me/portraits/thumb/men/27.jpg'), +(4, 'Kelly', 'http://api.randomuser.me/portraits/thumb/women/15.jpg'), +(5, 'Sam', 'http://api.randomuser.me/portraits/thumb/men/18.jpg'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `info` +-- + +CREATE TABLE IF NOT EXISTS `info` ( + `user_id` int(11) NOT NULL, + `username` varchar(20) NOT NULL, + `realname` varchar(20) CHARACTER SET gbk NOT NULL, + `location` varchar(50) CHARACTER SET gbk NOT NULL, + `tel` varchar(11) CHARACTER SET gbk NOT NULL, + `zipcode` varchar(6) CHARACTER SET gbk NOT NULL, + PRIMARY KEY (`user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- 转存表中的数据 `info` +-- + +INSERT INTO `info` (`user_id`, `username`, `realname`, `location`, `tel`, `zipcode`) VALUES +(1, 'admin', '周三', '江苏', '18190112345', '214191'), +(2, 'martin', '王二', '江苏', '18712345612', '214000'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `links` +-- + +CREATE TABLE IF NOT EXISTS `links` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `title` varchar(100) DEFAULT NULL, + `url` varchar(100) DEFAULT NULL, + `sort` int(5) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; + +-- +-- 转存表中的数据 `links` +-- + +INSERT INTO `links` (`id`, `title`, `url`, `sort`) VALUES +(1, 'iPhone6', 'http://2.srcmsdemo.sinaapp.com/iphone.jpg', 100), +(2, 'iPhone6 Plus', 'http://2.srcmsdemo.sinaapp.com/iphone.jpg', 100), +(3, 'MacBook', 'http://2.srcmsdemo.sinaapp.com/iphone.jpg', 100), +(4, 'MacBook Air', 'http://2.srcmsdemo.sinaapp.com/iphone.jpg', 100); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `member` +-- + +CREATE TABLE IF NOT EXISTS `member` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `username` varchar(20) DEFAULT NULL, + `email` varchar(100) DEFAULT NULL, + `password` varchar(32) DEFAULT NULL, + `avatar` varchar(255) DEFAULT NULL COMMENT '头像', + `create_at` varchar(11) DEFAULT '0', + `update_at` varchar(11) DEFAULT '0', + `login_ip` varchar(20) DEFAULT NULL, + `status` tinyint(1) DEFAULT '1' COMMENT '0:禁止登陆 1:正常', + `type` tinyint(1) DEFAULT '1' COMMENT '1:前台用户 2:管理员 ', + `jifen` int(10) NOT NULL, + PRIMARY KEY (`id`), + KEY `username` (`username`) USING BTREE, + KEY `password` (`password`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; + +-- +-- 转存表中的数据 `member` +-- + +INSERT INTO `member` (`id`, `username`, `email`, `password`, `avatar`, `create_at`, `update_at`, `login_ip`, `status`, `type`, `jifen`) VALUES +(1, 'admin', '1009465756@qq.com', '21232f297a57a5a743894a0e4a801fc3', NULL, '1436679338', '315763479', '0.0.0.0', 1, 2, 0), +(2, 'martin', '1009465756@qq.com', '21232f297a57a5a743894a0e4a801fc3', NULL, '1438016593', '1440839143', '0.0.0.0', 1, 1, 105); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `page` +-- + +CREATE TABLE IF NOT EXISTS `page` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(100) NOT NULL, + `name` varchar(100) DEFAULT NULL, + `content` text, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; + +-- +-- 转存表中的数据 `page` +-- + +INSERT INTO `page` (`id`, `title`, `name`, `content`) VALUES +(1, '2015年应急响应中心漏洞奖励细节', 'SRC--001', '<p><span style="font-size: 18px;"><strong>基本原则</strong></span></p><p>我们对于保护用户利益,帮助小米安全提升的白帽子黑客,我们给予感谢和回馈。</p><p>我们反对和谴责一切以漏洞测试为借口,利用安全漏洞进行破坏、损害用户利益的黑客行为,包括但不限于利用漏洞盗取用户资料、入侵业务系统、修改、窃取相关系统资料、恶意传播漏洞或数据。对于发生上述行为的、我们司将追究其法律责任。</p><p><br/></p><p><span style="font-size: 18px;"><strong>漏洞处理流程</strong></span></p><p>对于每一个级别的漏洞,我们会根据漏洞利用的技术难度、漏洞造成的影响等进行综合考虑,分成不同的层次,并给与相应积分。</p><p>根据漏洞出现的业务等级,漏洞危害程度分为高危、中危、低危、忽略四个级别,每个级别涵盖的漏洞以及评分标准如下:</p><p><br/></p><p><strong>高危:</strong></p><p>直接获取系统权限(服务器权限、客户端权限)的漏洞。包括但不限于远程任意命令执行、代码执行、任意文件上传获取Webshell、缓冲区溢出、SQL注入获取系统权限、服务器解析漏洞、文件包含漏洞等。</p><p>严重的逻辑设计缺陷。包括但不限于任意账号登陆、任意账号密码修改、短信邮件验证的绕过。</p><p>严重的敏感信息泄露。包括但不限于严重的SQL注入、任意文件包含等。</p><p>越权访问。包括但不限于绕过验证直接访问后台、后台登录弱口令、SSH弱口令,数据库弱口令等。</p><p><br/></p><p><strong>中危:</strong></p><p>需要交互才能获取用户身份信息的漏洞。包括存储型XSS等。</p><p>普通逻辑设计缺陷。包括但不限于无限制短信邮件等发送等。</p><p>非重点产品线、利用难度较大的SQL注入漏洞等。</p><p><br/></p><p><strong>低危:</strong></p><p>一般信息泄露漏洞。包括但不限于路径泄露、SVN文件泄露、LOG文件泄露、Phpinfo等。</p><p>无法利用或者难以利用的漏洞,包括但不限于反射型XSS和只能弹自己的XSS。</p><p><br/></p><p><strong>忽略:</strong></p><p>不涉及安全问题的bug。包括但不限于产品功能缺陷、页面乱码、样式混编等。</p><p>无法重现的漏洞、不能直接体现漏洞的其他问题。包括但不限于纯属用户猜测的问题。</p><p><br/></p>'), +(2, '2015年应急响应中心漏洞收集流程', 'SRC--002', '<p><strong>白帽子定义:</strong></p><p>白帽子指通过先知平台参与漏洞提交过程的安全专家,能够识别计算机系统或网络系统中的安全漏洞,但并不会恶意利用,而是公布漏洞,帮助厂商在被其他人恶意利用之前修补漏洞,维护计算机和互联网安全。</p><p><br/></p><p><strong>漏洞收集流程:</strong></p><p>1. 登录并完善资料</p><p>白帽子使用应急响应中心账号登录平台并完善资料,请确保资料真实有效,并及时更新。</p><p><br/></p><p>2. 提交漏洞</p><p>白帽子根据漏洞提交页面指引,提交安全漏洞信息。请务必详尽,漏洞描述越具体,越便于我们准确进行应急响应。</p><p><br/></p><p>3. 审核漏洞</p><p>漏洞提交后48小时内(法定节假日顺延),我们会对收到的漏洞按照《漏洞验收标准》进行评估同时确定奖励额度。</p><p><br/></p>'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `post` +-- + +CREATE TABLE IF NOT EXISTS `post` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(255) DEFAULT NULL, + `content` text, + `time` varchar(11) DEFAULT '0', + `cate_id` int(11) DEFAULT NULL, + `user_id` int(11) DEFAULT NULL, + `type` tinyint(1) DEFAULT '1' COMMENT '1:普通,2:置顶,3:热门,4:推荐', + PRIMARY KEY (`id`), + KEY `cate_id` (`cate_id`), + KEY `user_id` (`user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; + +-- +-- 转存表中的数据 `post` +-- + +INSERT INTO `post` (`id`, `title`, `content`, `time`, `cate_id`, `user_id`, `type`) VALUES +(1, '示例漏洞报告', '<p>这里是示例漏洞报告的内容.</p>', '1438043542', 2, 2, 1); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `setting` +-- + +CREATE TABLE IF NOT EXISTS `setting` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `key` varchar(255) NOT NULL DEFAULT '', + `value` varchar(255) NOT NULL DEFAULT '', + `description` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `key` (`key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ; + +-- +-- 转存表中的数据 `setting` +-- + +INSERT INTO `setting` (`id`, `key`, `value`, `description`) VALUES +(1, 'site-name', '演示站点', '站点名'), +(2, 'site-keywords', '关键词1,关键词2', '关键词'), +(3, 'site-description', '站点描述信息', '站点描述'), +(4, 'site-tongji', '<script> console.log("统计代码")</script>', '统计代码'), +(5, 'site-icp', '123456', 'ICP备案号'), +(6, 'site-url', 'http://www.src.pw', '站点地址'); + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/Public/Home/css/styles.css b/Public/Home/css/styles.css index 767a4ad..0ea9902 100644 --- a/Public/Home/css/styles.css +++ b/Public/Home/css/styles.css @@ -1,13 +1,10 @@ /* -- custom css for Bootstrap 3.x --*/ -/* move special fonts to HTML head for better performance */ -@import url('http://fonts.googleapis.com/css?family=Open+Sans:200,300,400,600'); - html, body { height: 100%; width: 100%; - font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif; + font-family:微软雅黑; } /* fix bs3 horizontal scrollbar bug */ @@ -65,7 +62,7 @@ img.grayscale { .navbar-bold { background-color:#11cc45; - font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; + font-family:微软雅黑; } .navbar-bold li a:hover, .navbar-bold li.active { @@ -85,7 +82,7 @@ img.grayscale { color:#fff; margin-left:-5px; margin-bottom:5px; - font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; + font-family:微软雅黑; } .header .lead { @@ -95,7 +92,7 @@ img.grayscale { .header { height: 80%; - background: #11cc45 url('http://www.bootply.com/assets/example/pt_squares_lg.png') repeat center center fixed; + background: #11cc45 url('http://2.srcmsdemo.sinaapp.com/pt_squares_lg.png') repeat center center fixed; } .blurb { @@ -108,7 +105,7 @@ img.grayscale { } .bright { - background: #7fbbda url('http://www.bootply.com/assets/example/bg_suburb.jpg') no-repeat center center fixed; + background: #7fbbda url('http://2.srcmsdemo.sinaapp.com/bg_suburb.jpg') no-repeat center center fixed; color:#fff; } @@ -143,7 +140,7 @@ img.grayscale { padding-top:7%; height: 100%; width: 100%; - background: url('http://www.bootply.com/assets/example/bg_suburb.jpg') no-repeat center center fixed; + background: url('http://2.srcmsdemo.sinaapp.com/bg_suburb.jpg') no-repeat center center fixed; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; diff --git a/Public/Home/pic/douban.png b/Public/Home/pic/douban.png new file mode 100644 index 0000000000000000000000000000000000000000..8170cf256fc67d0d7d9dfe8875eb9a37929b4a26 GIT binary patch literal 1054 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-GzZ+Rj;xUkjGiz z5m^kRE5LZ}*Qf*r2F6LAE{-7{$B$mM&z>A8!uH|5Z_*^QMPXg8uG7~fl?KZkas0q+ zu|3|Qps1`=&{aluE*BrGy`xKv=>LaPns!`S=(WYy^Y-fr`}6M|+4n@Y>Ri$Lhj!2R zoG*S?t*1TfQO~_CO6)dWvmB?K=KA?y3ft;BI z`J3gBT=Umv{r7LKTdMk8z3xxYrn2ir_nQ~{Pq?<=ap%^~*dGfgs~(*9)w%0fCMVar zjNebzKb{u6a{rH&SvQ*|KmOUa@AdZG7Hbo)e>-s7ZuR47zSiG_XIz<5y|(Rl@^QJu zd#gEv4Ml%E<~vtqFZBDJP+oSbr@-3P4;z~upR8Q)=IN51ccy2ZXV+zPJn0(0c4u0k z$d)|CReh3D-p+Rs`OnU3Dy{hPO_b5KxOwG{7k9thpSfbri}C>9@AVb? zA4#<8m^nRs5x=adH|9t0BHi%0vqaxLw12skx${Zk?4!VFQY~?fC`m~yNwrEYN(E93 zMh1qax(1fIMg}2r2<1{PKZ2EEt6f#MdSAvZrIGp!Q0hCf|?=YbmhKsFTT zrD?F8{w< zA59I|ZYwK~)XemZ5(X19)A%f_OF%W^NajG*glDFdWPp^MnVr=SR3eF_#5XfHwWP8j zl>zK3{erx7`%PhfXy*8a097#B{x-!!E-vYv0c@LZ=(4?J-ymV- zAjO^2vck5W0Oiu7Ud_U)p$oq<)p;Cu-?@d`3efErMbY@I? z9EbU<&~(3$r;)-o|6jL$h}!rlaAsxvJe><$Ug~YO+Gcv$>n+c{Rm;1Q4`00QP~UU@ z^4!?gO92lLt?Ub0x%z=LgHPHkVNH+QKo6;wxJHzuB$lLFB^RXvDF!10LsMM?b6q3T z5FB&Q>tfv(U59H8fBNG&EDFurP}^Gf{w9Z)mBIQBqQ1 zrLSLJUapr3(gnmoU3&RN>8w0+Oo1j#fJ_d_D9uf>vU15!F3nBNE3vW)04gnJFkJqB zw?3L0u-#Tx9;un>86^xxrUncP9_j$qh$EQ;RTG|>Qj)=7WNaM6zSK* zJ2{nX6$$}LMl+$cSeQXbOA9@qI~mtJz6i91!PC{xWt~$(69CsS9dG~u literal 0 HcmV?d00001 diff --git a/Public/Home/pic/wechat.png b/Public/Home/pic/wechat.png new file mode 100644 index 0000000000000000000000000000000000000000..385af594064a99c65992633c9a8b8da484b12c8b GIT binary patch literal 1341 zcmeAS@N?(olHy`uVBq!ia0vp^YCtT{!2%=|9m^en6id3JuOkD)#(wTUiL5}rLb6AY zF9SmrP+>z01H&(%P{RubhEf9thF1v;3|2E37{m+a>2N4tzZS#a4dHBsJX&SxjvnO9HY}7Yg#8 zT9y&iV{JY`f?3;eM?vz0{S7TF$yrKsie;Uz-1G+4H=2mfz2OpI7{TXF5}{YJRh>)s~D4Ifo_)s(-Oa^T-gK^nHu- zx|u@vjNe&2)?K}M@vOJszuWj!`n=xmohufyJ8vm#fN^rn^r=?^bp66u&-P4GmbzqM zd8OLjeM$eT!fVZ)B~H&vv@^vNE~tH&93)lHzx(6PJ!=)xw|81hGrpGC`*`EiW#>$; zI9DZa51f7QFkABN_KEj@cc$!LStDq=?WREX)_D_;tMzVttEroDY0{5Zmi^)D)~@B^ z{9@<7>oIHT#&uV3s(N3wI)%?IzZ8FRHAj!? zB9F=4eKWS46qXARj#iKTH23hY(+4K5+IsbEsr?WA)Y1#H-_39R8s=F0)^xh~ml;<~ zqff}|zWA{@Ja(`v1D|xhDnU@)$hyWu376} z{4JCjGQDlnXUoIib)NM~#Iw9{vzxc>yTq^B#Fb^)y5aioy`KIH2>f+w!`fqeUT?^b zSQI#!O?=I1p4lHlEtgK;5|*K}Rxi!w-+SHl`yOlOr91r1OP==O^EZigO;)m7fAdWG zyy)_>;K2PADxXywL%+Q;HDeDl%JO<~`=*;<$}!fkjPGkg!?brS&2X5nTc-8GV8f0Z zr!GX5e)QM4@NPn`@u~kRFYgoxc<{9YQ?Y7^YeY#(Vo9o1a#1RfVlXl=G}Se*)HN~) zF*LL?FajcN0}Cqy1KkrPvM3sI^HVa@DsgLwnR;d+P=g=HhT{CRlJdl&R0hx7#Pn3( z#PrPMYy~qt3q1>6Lj#3CLolpinIK(24AiBU zUzEnc}IZ!p>nJFb13}(iLTUq<|0+mQ2De=wBO)aS`NM!)KO1~g4-F{P; zADTJ7AwX3Oh9)LP=7tuAMn>%H0vXI24K80%SjJ2_>3{5}^b9fc$v8sy24 zmYI_Z30-^4K4J5?p*dx_Z-j`22WQ%mvv4FO#ld`8=wFH literal 0 HcmV?d00001 diff --git a/Public/Home/pic/weibo.png b/Public/Home/pic/weibo.png new file mode 100644 index 0000000000000000000000000000000000000000..4db21c526f91b69d915eb73f0eb0a41655e042c3 GIT binary patch literal 1588 zcmZ8gdo)ERHuh@dPpV8{;1t!`{RD^x%Yk^_uO;7yH;>~j14h{003i_ zFC!Su_Gm2pP7i%sc38!uNl)y__5`3J)o6^bkJdH<-(WTXn->GHEfIi^XlvV30AdLM z41@y!X98dmom~^;h7NQh{CyYz6z%(gh*mSAeOD{dX6R%buD^I10Nnx>!;|ZK?TD5o zH2pwXR!!Sou#RP)d~wo26W5P z43cD|NX+R0CsLS&#(GW>&hka{!T{^Fchqa%zI%7^P0ax%<^9CWS8eO)OcJS^Ki%wKE`T4P&GTssp&c0PT+*)9$i0rT)Q2y27Hcq`c+Ga98 z;L4_@`Z_+%SiQpobMl8CwZxI}$HUHh4D$$XjVQ6@IXH9a`u@V&OH%Q)*>Uflt)Br%(v-xZs$i4no2~Lxs1ZDVMEzv9l6et4WYZ(IE%#CnrpJ>FK*@h zy_)^5kY1RpbN*!SQ$<2Jpfnp*>hlv84FB=yjVw0LG03SraDzL}T0RN~I$|R7S2mWG z_sWuoc5mPw+H3mpw14Qsu~}Kh+B>{I>*pc`or_w#L+1Rx+{I4u!egf>U#MYW1c|Ge ze)YB(=UbNh8n^J%N}_9*#XVnJ)wNjbXB^^eC(qpL7x%z$vijg zqn}Bk4+9c*RM3*=OSd*F+nN)s=jm2nY%@zPb)8#V^ZJ|xQfJ%ceRfa$O{bQiPsgOz z%v|0UNmj9yL2a(~iYaqva3G~KiI7JPY@&z_rn?*JeGXc%|4_sFn5CIdxNrS66@!l@ z`#%jD{1%Y5v4Nkx)T@cMhBImuKz5^doHLI<=_UylDu($>%rZ+jHm~Fb4}8xfwZe

    Q!#GI}xE)l_}$gkKD{oxnz{IVT(L5M(cPZ1A^{q7UXM2+CA@$-ax#n$H9I{ zo&7AyrbhH5+o`-mRYJZBfdw%LngEdixnK#dSfUG;2*G3;OmcN1P+&^g-E65#~^?u=Zg_GUn~_w+E8#*92E-@ zY=R()%_b^k9ffT3uRTPwk*HMBFdnZ~t8vl^78)oEr-%{j&&+l~l`SWfxsq6U1Pn72 zf>=2crGnuVC{zic{PFYnZ!nYIFzky+#S#@Dx)4B4zcY%ln45JHzNSO z0m+|EPuC5bg^t6fjCsKexceptions=($exceptions==true);}public function IsHTML($ishtml=true){if($ishtml){$this->ContentType='text/html';}else{$this->ContentType='text/plain';}}public function IsSMTP(){$this->Mailer='smtp';}public function IsMail(){$this->Mailer='mail';}public function IsSendmail(){if(!stristr(ini_get('sendmail_path'),'sendmail')){$this->Sendmail='/var/qmail/bin/sendmail';}$this->Mailer='sendmail';}public function IsQmail(){if(stristr(ini_get('sendmail_path'),'qmail')){$this->Sendmail='/var/qmail/bin/sendmail';}$this->Mailer='sendmail';}public function AddAddress($address,$name=''){return $this->AddAnAddress('to',$address,$name);}public function AddCC($address,$name=''){return $this->AddAnAddress('cc',$address,$name);}public function AddBCC($address,$name=''){return $this->AddAnAddress('bcc',$address,$name);}public function AddReplyTo($address,$name=''){return $this->AddAnAddress('ReplyTo',$address,$name);}private function AddAnAddress($kind,$address,$name=''){if(!preg_match('/^(to|cc|bcc|ReplyTo)$/',$kind)){echo 'Invalid recipient array: '.kind;return false;}$address=trim($address);$name=trim(preg_replace('/[\r\n]+/','',$name));if(!self::ValidateAddress($address)){$this->SetError($this->Lang('invalid_address').': '.$address);if($this->exceptions){throw new phpmailerException($this->Lang('invalid_address').': '.$address);}echo $this->Lang('invalid_address').': '.$address;return false;}if($kind!='ReplyTo'){if(!isset($this->all_recipients[strtolower($address)])){array_push($this->$kind,array($address,$name));$this->all_recipients[strtolower($address)]=true;return true;}}else{if(!array_key_exists(strtolower($address),$this->ReplyTo)){$this->ReplyTo[strtolower($address)]=array($address,$name);return true;}}return false;}public function SetFrom($address,$name='',$auto=1){$address=trim($address);$name=trim(preg_replace('/[\r\n]+/','',$name));if(!self::ValidateAddress($address)){$this->SetError($this->Lang('invalid_address').': '.$address);if($this->exceptions){throw new phpmailerException($this->Lang('invalid_address').': '.$address);}echo $this->Lang('invalid_address').': '.$address;return false;}$this->From=$address;$this->FromName=$name;if($auto){if(empty($this->ReplyTo)){$this->AddAnAddress('ReplyTo',$address,$name);}if(empty($this->Sender)){$this->Sender=$address;}}return true;}public static function ValidateAddress($address){if(function_exists('filter_var')){if(filter_var($address,FILTER_VALIDATE_EMAIL)===FALSE){return false;}else{return true;}}else{return preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/',$address);}}public function Send(){try{if((count($this->to)+count($this->cc)+count($this->bcc))<1){throw new phpmailerException($this->Lang('provide_address'),self::STOP_CRITICAL);}if(!empty($this->AltBody)){$this->ContentType='multipart/alternative';}$this->error_count=0;$this->SetMessageType();$header=$this->CreateHeader();$body=$this->CreateBody();if(empty($this->Body)){throw new phpmailerException($this->Lang('empty_message'),self::STOP_CRITICAL);}if($this->DKIM_domain&&$this->DKIM_private){$header_dkim=$this->DKIM_Add($header,$this->Subject,$body);$header=str_replace("\r\n","\n",$header_dkim).$header;}switch($this->Mailer){case 'sendmail':return $this->SendmailSend($header,$body);case 'smtp':return $this->SmtpSend($header,$body);default:return $this->MailSend($header,$body);}}catch(phpmailerException$e){$this->SetError($e->getMessage());if($this->exceptions){throw $e;}echo $e->getMessage()."\n";return false;}}protected function SendmailSend($header,$body){if($this->Sender!=''){$sendmail=sprintf("%s -oi -f %s -t",escapeshellcmd($this->Sendmail),escapeshellarg($this->Sender));}else{$sendmail=sprintf("%s -oi -t",escapeshellcmd($this->Sendmail));}if($this->SingleTo===true){foreach($this->SingleToArray as $key=>$val){if(!@$mail=popen($sendmail,'w')){throw new phpmailerException($this->Lang('execute').$this->Sendmail,self::STOP_CRITICAL);}fputs($mail,"To: ".$val."\n");fputs($mail,$header);fputs($mail,$body);$result=pclose($mail);$isSent=($result==0)?1:0;$this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body);if($result!=0){throw new phpmailerException($this->Lang('execute').$this->Sendmail,self::STOP_CRITICAL);}}}else{if(!@$mail=popen($sendmail,'w')){throw new phpmailerException($this->Lang('execute').$this->Sendmail,self::STOP_CRITICAL);}fputs($mail,$header);fputs($mail,$body);$result=pclose($mail);$isSent=($result==0)?1:0;$this->doCallback($isSent,$this->to,$this->cc,$this->bcc,$this->Subject,$body);if($result!=0){throw new phpmailerException($this->Lang('execute').$this->Sendmail,self::STOP_CRITICAL);}}return true;}protected function MailSend($header,$body){$toArr=array();foreach($this->to as $t){$toArr[]=$this->AddrFormat($t);}$to=implode(', ',$toArr);$params=sprintf("-oi -f %s",$this->Sender);if($this->Sender!=''&&strlen(ini_get('safe_mode'))<1){$old_from=ini_get('sendmail_from');ini_set('sendmail_from',$this->Sender);if($this->SingleTo===true&&count($toArr)>1){foreach($toArr as $key=>$val){$rt=@mail($val,$this->EncodeHeader($this->SecureHeader($this->Subject)),$body,$header,$params);$isSent=($rt==1)?1:0;$this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body);}}else{$rt=@mail($to,$this->EncodeHeader($this->SecureHeader($this->Subject)),$body,$header,$params);$isSent=($rt==1)?1:0;$this->doCallback($isSent,$to,$this->cc,$this->bcc,$this->Subject,$body);}}else{if($this->SingleTo===true&&count($toArr)>1){foreach($toArr as $key=>$val){$rt=@mail($val,$this->EncodeHeader($this->SecureHeader($this->Subject)),$body,$header,$params);$isSent=($rt==1)?1:0;$this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body);}}else{$rt=@mail($to,$this->EncodeHeader($this->SecureHeader($this->Subject)),$body,$header);$isSent=($rt==1)?1:0;$this->doCallback($isSent,$to,$this->cc,$this->bcc,$this->Subject,$body);}}if(isset($old_from)){ini_set('sendmail_from',$old_from);}if(!$rt){throw new phpmailerException($this->Lang('instantiate'),self::STOP_CRITICAL);}return true;}protected function SmtpSend($header,$body){$bad_rcpt=array();if(!$this->SmtpConnect()){throw new phpmailerException($this->Lang('smtp_connect_failed'),self::STOP_CRITICAL);}$smtp_from=($this->Sender=='')?$this->From:$this->Sender;if(!$this->smtp->Mail($smtp_from)){throw new phpmailerException($this->Lang('from_failed').$smtp_from,self::STOP_CRITICAL);}foreach($this->to as $to){if(!$this->smtp->Recipient($to[0])){$bad_rcpt[]=$to[0];$isSent=0;$this->doCallback($isSent,$to[0],'','',$this->Subject,$body);}else{$isSent=1;$this->doCallback($isSent,$to[0],'','',$this->Subject,$body);}}foreach($this->cc as $cc){if(!$this->smtp->Recipient($cc[0])){$bad_rcpt[]=$cc[0];$isSent=0;$this->doCallback($isSent,'',$cc[0],'',$this->Subject,$body);}else{$isSent=1;$this->doCallback($isSent,'',$cc[0],'',$this->Subject,$body);}}foreach($this->bcc as $bcc){if(!$this->smtp->Recipient($bcc[0])){$bad_rcpt[]=$bcc[0];$isSent=0;$this->doCallback($isSent,'','',$bcc[0],$this->Subject,$body);}else{$isSent=1;$this->doCallback($isSent,'','',$bcc[0],$this->Subject,$body);}}if(count($bad_rcpt)>0){$badaddresses=implode(', ',$bad_rcpt);throw new phpmailerException($this->Lang('recipients_failed').$badaddresses);}if(!$this->smtp->Data($header.$body)){throw new phpmailerException($this->Lang('data_not_accepted'),self::STOP_CRITICAL);}if($this->SMTPKeepAlive==true){$this->smtp->Reset();}return true;}public function SmtpConnect(){if(is_null($this->smtp)){$this->smtp=new SMTP();}$this->smtp->do_debug=$this->SMTPDebug;$hosts=explode(';',$this->Host);$index=0;$connection=$this->smtp->Connected();try{while($indexPort;}$tls=($this->SMTPSecure=='tls');$ssl=($this->SMTPSecure=='ssl');if($this->smtp->Connect(($ssl?'ssl://':'').$host,$port,$this->Timeout)){$hello=($this->Helo!=''?$this->Helo:$this->ServerHostname());$this->smtp->Hello($hello);if($tls){if(!$this->smtp->StartTLS()){throw new phpmailerException($this->Lang('tls'));}$this->smtp->Hello($hello);}$connection=true;if($this->SMTPAuth){if(!$this->smtp->Authenticate($this->Username,$this->Password)){throw new phpmailerException($this->Lang('authenticate'));}}}$index++;if(!$connection){throw new phpmailerException($this->Lang('connect_host'));}}}catch(phpmailerException$e){$this->smtp->Reset();throw $e;}return true;}public function SmtpClose(){if(!is_null($this->smtp)){if($this->smtp->Connected()){$this->smtp->Quit();$this->smtp->Close();}}}function SetLanguage($langcode='en',$lang_path='language/'){$PHPMAILER_LANG=array();$PHPMAILER_LANG['authenticate']='SMTP 错误:登录失败。';$PHPMAILER_LANG['connect_host']='SMTP 错误:无法连接到 SMTP 主机。';$PHPMAILER_LANG['data_not_accepted']='SMTP 错误:数据不被接受。';$PHPMAILER_LANG['encoding']='未知编码: ';$PHPMAILER_LANG['execute']='无法执行:';$PHPMAILER_LANG['file_access']='无法访问文件:';$PHPMAILER_LANG['file_open']='文件错误:无法打开文件:';$PHPMAILER_LANG['from_failed']='发送地址错误:';$PHPMAILER_LANG['instantiate']='未知函数调用。';$PHPMAILER_LANG['mailer_not_supported']='发信客户端不被支持。';$PHPMAILER_LANG['provide_address']='必须提供至少一个收件人地址。';$PHPMAILER_LANG['recipients_failed']='SMTP 错误:收件人地址错误:';$l=true;$this->language=$PHPMAILER_LANG;return ($l==true);}public function GetTranslations(){return $this->language;}public function AddrAppend($type,$addr){$addr_str=$type.': ';$addresses=array();foreach($addr as $a){$addresses[]=$this->AddrFormat($a);}$addr_str.=implode(', ',$addresses);$addr_str.=$this->LE;return $addr_str;}public function AddrFormat($addr){if(empty($addr[1])){return $this->SecureHeader($addr[0]);}else{return $this->EncodeHeader($this->SecureHeader($addr[1]),'phrase')." <".$this->SecureHeader($addr[0]).">";}}public function WrapText($message,$length,$qp_mode=false){$soft_break=($qp_mode)?sprintf(" =%s",$this->LE):$this->LE;$is_utf8=(strtolower($this->CharSet)=="utf-8");$message=$this->FixEOL($message);if(substr($message,-1)==$this->LE){$message=substr($message,0,-1);}$line=explode($this->LE,$message);$message='';for($i=0;$i$length)){$space_left=$length-strlen($buf)-1;if($e!=0){if($space_left>20){$len=$space_left;if($is_utf8){$len=$this->UTF8CharBoundary($word,$len);}elseif(substr($word,$len-1,1)=="="){$len--;}elseif(substr($word,$len-2,1)=="="){$len-=2;}$part=substr($word,0,$len);$word=substr($word,$len);$buf.=' '.$part;$message.=$buf.sprintf("=%s",$this->LE);}else{$message.=$buf.$soft_break;}$buf='';}while(strlen($word)>0){$len=$length;if($is_utf8){$len=$this->UTF8CharBoundary($word,$len);}elseif(substr($word,$len-1,1)=="="){$len--;}elseif(substr($word,$len-2,1)=="="){$len-=2;}$part=substr($word,0,$len);$word=substr($word,$len);if(strlen($word)>0){$message.=$part.sprintf("=%s",$this->LE);}else{$buf=$part;}}}else{$buf_o=$buf;$buf.=($e==0)?$word:(' '.$word);if(strlen($buf)>$length and $buf_o!=''){$message.=$buf_o.$soft_break;$buf=$word;}}}$message.=$buf.$this->LE;}return $message;}public function UTF8CharBoundary($encodedText,$maxLength){$foundSplitPos=false;$lookBack=3;while(!$foundSplitPos){$lastChunk=substr($encodedText,$maxLength-$lookBack,$lookBack);$encodedCharPos=strpos($lastChunk,"=");if($encodedCharPos!==false){$hex=substr($encodedText,$maxLength-$lookBack+$encodedCharPos+1,2);$dec=hexdec($hex);if($dec<128){$maxLength=($encodedCharPos==0)?$maxLength:$maxLength-($lookBack-$encodedCharPos);$foundSplitPos=true;}elseif($dec>=192){$maxLength=$maxLength-($lookBack-$encodedCharPos);$foundSplitPos=true;}elseif($dec<192){$lookBack+=3;}}else{$foundSplitPos=true;}}return $maxLength;}public function SetWordWrap(){if($this->WordWrap<1){return ;}switch($this->message_type){case 'alt':case 'alt_attachments':$this->AltBody=$this->WrapText($this->AltBody,$this->WordWrap);break;default:$this->Body=$this->WrapText($this->Body,$this->WordWrap);break;}}public function CreateHeader(){$result='';$uniq_id=md5(uniqid(time()));$this->boundary[1]='b1_'.$uniq_id;$this->boundary[2]='b2_'.$uniq_id;$result.=$this->HeaderLine('Date',self::RFCDate());if($this->Sender==''){$result.=$this->HeaderLine('Return-Path',trim($this->From));}else{$result.=$this->HeaderLine('Return-Path',trim($this->Sender));}if($this->Mailer!='mail'){if($this->SingleTo===true){foreach($this->to as $t){$this->SingleToArray[]=$this->AddrFormat($t);}}else{if(count($this->to)>0){$result.=$this->AddrAppend('To',$this->to);}elseif(count($this->cc)==0){$result.=$this->HeaderLine('To','undisclosed-recipients:;');}}}$from=array();$from[0][0]=trim($this->From);$from[0][1]=$this->FromName;$result.=$this->AddrAppend('From',$from);if(count($this->cc)>0){$result.=$this->AddrAppend('Cc',$this->cc);}if((($this->Mailer=='sendmail')||($this->Mailer=='mail'))&&(count($this->bcc)>0)){$result.=$this->AddrAppend('Bcc',$this->bcc);}if(count($this->ReplyTo)>0){$result.=$this->AddrAppend('Reply-to',$this->ReplyTo);}if($this->Mailer!='mail'){$result.=$this->HeaderLine('Subject',$this->EncodeHeader($this->SecureHeader($this->Subject)));}if($this->MessageID!=''){$result.=$this->HeaderLine('Message-ID',$this->MessageID);}else{$result.=sprintf("Message-ID: <%s@%s>%s",$uniq_id,$this->ServerHostname(),$this->LE);}$result.=$this->HeaderLine('X-Priority',$this->Priority);$result.=$this->HeaderLine('X-Mailer','PHPMailer '.$this->Version.' (phpmailer.sourceforge.net)');if($this->ConfirmReadingTo!=''){$result.=$this->HeaderLine('Disposition-Notification-To','<'.trim($this->ConfirmReadingTo).'>');}for($index=0;$indexCustomHeader);$index++){$result.=$this->HeaderLine(trim($this->CustomHeader[$index][0]),$this->EncodeHeader(trim($this->CustomHeader[$index][1])));}if(!$this->sign_key_file){$result.=$this->HeaderLine('MIME-Version','1.0');$result.=$this->GetMailMIME();}return $result;}public function GetMailMIME(){$result='';switch($this->message_type){case 'plain':$result.=$this->HeaderLine('Content-Transfer-Encoding',$this->Encoding);$result.=sprintf("Content-Type: %s; charset=\"%s\"",$this->ContentType,$this->CharSet);break;case 'attachments':case 'alt_attachments':if($this->InlineImageExists()){$result.=sprintf("Content-Type: %s;%s\ttype=\"text/html\";%s\tboundary=\"%s\"%s",'multipart/related',$this->LE,$this->LE,$this->boundary[1],$this->LE);}else{$result.=$this->HeaderLine('Content-Type','multipart/mixed;');$result.=$this->TextLine("\tboundary=\"".$this->boundary[1].'"');}break;case 'alt':$result.=$this->HeaderLine('Content-Type','multipart/alternative;');$result.=$this->TextLine("\tboundary=\"".$this->boundary[1].'"');break;}if($this->Mailer!='mail'){$result.=$this->LE.$this->LE;}return $result;}public function CreateBody(){$body='';if($this->sign_key_file){$body.=$this->GetMailMIME();}$this->SetWordWrap();switch($this->message_type){case 'alt':$body.=$this->GetBoundary($this->boundary[1],'','text/plain','');$body.=$this->EncodeString($this->AltBody,$this->Encoding);$body.=$this->LE.$this->LE;$body.=$this->GetBoundary($this->boundary[1],'','text/html','');$body.=$this->EncodeString($this->Body,$this->Encoding);$body.=$this->LE.$this->LE;$body.=$this->EndBoundary($this->boundary[1]);break;case 'plain':$body.=$this->EncodeString($this->Body,$this->Encoding);break;case 'attachments':$body.=$this->GetBoundary($this->boundary[1],'','','');$body.=$this->EncodeString($this->Body,$this->Encoding);$body.=$this->LE;$body.=$this->AttachAll();break;case 'alt_attachments':$body.=sprintf("--%s%s",$this->boundary[1],$this->LE);$body.=sprintf("Content-Type: %s;%s"."\tboundary=\"%s\"%s",'multipart/alternative',$this->LE,$this->boundary[2],$this->LE.$this->LE);$body.=$this->GetBoundary($this->boundary[2],'','text/plain','').$this->LE;$body.=$this->EncodeString($this->AltBody,$this->Encoding);$body.=$this->LE.$this->LE;$body.=$this->GetBoundary($this->boundary[2],'','text/html','').$this->LE;$body.=$this->EncodeString($this->Body,$this->Encoding);$body.=$this->LE.$this->LE;$body.=$this->EndBoundary($this->boundary[2]);$body.=$this->AttachAll();break;}if($this->IsError()){$body='';}elseif($this->sign_key_file){try{$file=tempnam('','mail');file_put_contents($file,$body);$signed=tempnam("","signed");if(@openssl_pkcs7_sign($file,$signed,"file://".$this->sign_cert_file,array("file://".$this->sign_key_file,$this->sign_key_pass),NULL)){@unlink($file);@unlink($signed);$body=file_get_contents($signed);}else{@unlink($file);@unlink($signed);throw new phpmailerException($this->Lang("signing").openssl_error_string());}}catch(phpmailerException$e){$body='';if($this->exceptions){throw $e;}}}return $body;}private function GetBoundary($boundary,$charSet,$contentType,$encoding){$result='';if($charSet==''){$charSet=$this->CharSet;}if($contentType==''){$contentType=$this->ContentType;}if($encoding==''){$encoding=$this->Encoding;}$result.=$this->TextLine('--'.$boundary);$result.=sprintf("Content-Type: %s; charset = \"%s\"",$contentType,$charSet);$result.=$this->LE;$result.=$this->HeaderLine('Content-Transfer-Encoding',$encoding);$result.=$this->LE;return $result;}private function EndBoundary($boundary){return $this->LE.'--'.$boundary.'--'.$this->LE;}private function SetMessageType(){if(count($this->attachment)<1&&strlen($this->AltBody)<1){$this->message_type='plain';}else{if(count($this->attachment)>0){$this->message_type='attachments';}if(strlen($this->AltBody)>0&&count($this->attachment)<1){$this->message_type='alt';}if(strlen($this->AltBody)>0&&count($this->attachment)>0){$this->message_type='alt_attachments';}}}public function HeaderLine($name,$value){return $name.': '.$value.$this->LE;}public function TextLine($value){return $value.$this->LE;}public function AddAttachment($path,$name='',$encoding='base64',$type='application/octet-stream'){try{if(!@is_file($path)){throw new phpmailerException($this->Lang('file_access').$path,self::STOP_CONTINUE);}$filename=basename($path);if($name==''){$name=$filename;}$this->attachment[]=array(0=>$path,1=>$filename,2=>$name,3=>$encoding,4=>$type,5=>false,6=>'attachment',7=>0);}catch(phpmailerException$e){$this->SetError($e->getMessage());if($this->exceptions){throw $e;}echo $e->getMessage()."\n";if($e->getCode()==self::STOP_CRITICAL){return false;}}return true;}public function GetAttachments(){return $this->attachment;}private function AttachAll(){$mime=array();$cidUniq=array();$incl=array();foreach($this->attachment as $attachment){$bString=$attachment[5];if($bString){$string=$attachment[0];}else{$path=$attachment[0];}if(in_array($attachment[0],$incl)){continue;}$filename=$attachment[1];$name=$attachment[2];$encoding=$attachment[3];$type=$attachment[4];$disposition=$attachment[6];$cid=$attachment[7];$incl[]=$attachment[0];if($disposition=='inline'&&isset($cidUniq[$cid])){continue;}$cidUniq[$cid]=true;$mime[]=sprintf("--%s%s",$this->boundary[1],$this->LE);$mime[]=sprintf("Content-Type: %s; name=\"%s\"%s",$type,$this->EncodeHeader($this->SecureHeader($name)),$this->LE);$mime[]=sprintf("Content-Transfer-Encoding: %s%s",$encoding,$this->LE);if($disposition=='inline'){$mime[]=sprintf("Content-ID: <%s>%s",$cid,$this->LE);}$mime[]=sprintf("Content-Disposition: %s; filename=\"%s\"%s",$disposition,$this->EncodeHeader($this->SecureHeader($name)),$this->LE.$this->LE);if($bString){$mime[]=$this->EncodeString($string,$encoding);if($this->IsError()){return '';}$mime[]=$this->LE.$this->LE;}else{$mime[]=$this->EncodeFile($path,$encoding);if($this->IsError()){return '';}$mime[]=$this->LE.$this->LE;}}$mime[]=sprintf("--%s--%s",$this->boundary[1],$this->LE);return join('',$mime);}private function EncodeFile($path,$encoding='base64'){try{if(!is_readable($path)){throw new phpmailerException($this->Lang('file_open').$path,self::STOP_CONTINUE);}if(function_exists('get_magic_quotes')){function get_magic_quotes(){return false;}}if(PHP_VERSION<6){$magic_quotes=get_magic_quotes_runtime();set_magic_quotes_runtime(0);}$file_buffer=file_get_contents($path);$file_buffer=$this->EncodeString($file_buffer,$encoding);if(PHP_VERSION<6){set_magic_quotes_runtime($magic_quotes);}return $file_buffer;}catch(Exception$e){$this->SetError($e->getMessage());return '';}}public function EncodeString($str,$encoding='base64'){$encoded='';switch(strtolower($encoding)){case 'base64':$encoded=chunk_split(base64_encode($str),76,$this->LE);break;case '7bit':case '8bit':$encoded=$this->FixEOL($str);if(substr($encoded,-(strlen($this->LE)))!=$this->LE)$encoded.=$this->LE;break;case 'binary':$encoded=$str;break;case 'quoted-printable':$encoded=$this->EncodeQP($str);break;default:$this->SetError($this->Lang('encoding').$encoding);break;}return $encoded;}public function EncodeHeader($str,$position='text'){$x=0;switch(strtolower($position)){case 'phrase':if(!preg_match('/[\200-\377]/',$str)){$encoded=addcslashes($str,"\0..\37\177\\\"");if(($str==$encoded)&&!preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/',$str)){return ($encoded);}else{return ("\"$encoded\"");}}$x=preg_match_all('/[^\040\041\043-\133\135-\176]/',$str,$matches);break;case 'comment':$x=preg_match_all('/[()"]/',$str,$matches);case 'text':default:$x+=preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/',$str,$matches);break;}if($x==0){return ($str);}$maxlen=75-7-strlen($this->CharSet);if(strlen($str)/3<$x){$encoding='B';if(function_exists('mb_strlen')&&$this->HasMultiBytes($str)){$encoded=$this->Base64EncodeWrapMB($str);}else{$encoded=base64_encode($str);$maxlen-=$maxlen%4;$encoded=trim(chunk_split($encoded,$maxlen,"\n"));}}else{$encoding='Q';$encoded=$this->EncodeQ($str,$position);$encoded=$this->WrapText($encoded,$maxlen,true);$encoded=str_replace('='.$this->LE,"\n",trim($encoded));}$encoded=preg_replace('/^(.*)$/m'," =?".$this->CharSet."?$encoding?\\1?=",$encoded);$encoded=trim(str_replace("\n",$this->LE,$encoded));return $encoded;}public function HasMultiBytes($str){if(function_exists('mb_strlen')){return (strlen($str)>mb_strlen($str,$this->CharSet));}else{return false;}}public function Base64EncodeWrapMB($str){$start="=?".$this->CharSet."?B?";$end="?=";$encoded="";$mb_length=mb_strlen($str,$this->CharSet);$length=75-strlen($start)-strlen($end);$ratio=$mb_length/strlen($str);$offset=$avgLength=floor($length*$ratio*.75);for($i=0;$i<$mb_length;$i+=$offset){$lookBack=0;do{$offset=$avgLength-$lookBack;$chunk=mb_substr($str,$i,$offset,$this->CharSet);$chunk=base64_encode($chunk);$lookBack++;}while(strlen($chunk)>$length);$encoded.=$chunk.$this->LE;}$encoded=substr($encoded,0,-strlen($this->LE));return $encoded;}public function EncodeQPphp($input='',$line_max=76,$space_conv=false){$hex=array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');$lines=preg_split('/(?:\r\n|\r|\n)/',$input);$eol="\r\n";$escape='=';$output='';while(list(,$line)=each($lines)){$linlen=strlen($line);$newline='';for($i=0;$i<$linlen;$i++){$c=substr($line,$i,1);$dec=ord($c);if(($i==0)&&($dec==46)){$c='=2E';}if($dec==32){if($i==($linlen-1)){$c='=20';}elseif($space_conv){$c='=20';}}elseif(($dec==61)||($dec<32)||($dec>126)){$h2=floor($dec/16);$h1=floor($dec%16);$c=$escape.$hex[$h2].$hex[$h1];}if((strlen($newline)+strlen($c))>=$line_max){$output.=$newline.$escape.$eol;$newline='';if($dec==46){$c='=2E';}}$newline.=$c;}$output.=$newline.$eol;}return $output;}public function EncodeQP($string,$line_max=76,$space_conv=false){if(function_exists('quoted_printable_encode')){return quoted_printable_encode($string);}$filters=stream_get_filters();if(!in_array('convert.*',$filters)){return $this->EncodeQPphp($string,$line_max,$space_conv);}$fp=fopen('php://temp/','r+');$string=preg_replace('/\r\n?/',$this->LE,$string);$params=array('line-length'=>$line_max,'line-break-chars'=>$this->LE);$s=stream_filter_append($fp,'convert.quoted-printable-encode',STREAM_FILTER_READ,$params);fputs($fp,$string);rewind($fp);$out=stream_get_contents($fp);stream_filter_remove($s);$out=preg_replace('/^\./m','=2E',$out);fclose($fp);return $out;}public function EncodeQ($str,$position='text'){$encoded=preg_replace('/[\r\n]*/','',$str);switch(strtolower($position)){case 'phrase':$encoded=preg_replace("/([^A-Za-z0-9!*+\/ -])/e","'='.sprintf('%02X', ord('\\1'))",$encoded);break;case 'comment':$encoded=preg_replace("/([\(\)\"])/e","'='.sprintf('%02X', ord('\\1'))",$encoded);case 'text':default:$encoded=preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e',"'='.sprintf('%02X', ord('\\1'))",$encoded);break;}$encoded=str_replace(' ','_',$encoded);return $encoded;}public function AddStringAttachment($string,$filename,$encoding='base64',$type='application/octet-stream'){$this->attachment[]=array(0=>$string,1=>$filename,2=>basename($filename),3=>$encoding,4=>$type,5=>true,6=>'attachment',7=>0);}public function AddEmbeddedImage($path,$cid,$name='',$encoding='base64',$type='application/octet-stream'){if(!@is_file($path)){$this->SetError($this->Lang('file_access').$path);return false;}$filename=basename($path);if($name==''){$name=$filename;}$this->attachment[]=array(0=>$path,1=>$filename,2=>$name,3=>$encoding,4=>$type,5=>false,6=>'inline',7=>$cid);return true;}public function InlineImageExists(){foreach($this->attachment as $attachment){if($attachment[6]=='inline'){return true;}}return false;}public function ClearAddresses(){foreach($this->to as $to){unset($this->all_recipients[strtolower($to[0])]);}$this->to=array();}public function ClearCCs(){foreach($this->cc as $cc){unset($this->all_recipients[strtolower($cc[0])]);}$this->cc=array();}public function ClearBCCs(){foreach($this->bcc as $bcc){unset($this->all_recipients[strtolower($bcc[0])]);}$this->bcc=array();}public function ClearReplyTos(){$this->ReplyTo=array();}public function ClearAllRecipients(){$this->to=array();$this->cc=array();$this->bcc=array();$this->all_recipients=array();}public function ClearAttachments(){$this->attachment=array();}public function ClearCustomHeaders(){$this->CustomHeader=array();}protected function SetError($msg){$this->error_count++;if($this->Mailer=='smtp' and !is_null($this->smtp)){$lasterror=$this->smtp->getError();if(!empty($lasterror) and array_key_exists('smtp_msg',$lasterror)){$msg.='

    '.$this->Lang('smtp_error').$lasterror['smtp_msg']."

    \n";}}$this->ErrorInfo=$msg;}public static function RFCDate(){$tz=date('Z');$tzs=($tz<0)?'-':'+';$tz=abs($tz);$tz=(int)($tz/3600)*100+($tz%3600)/60;$result=sprintf("%s %s%04d",date('D, j M Y H:i:s'),$tzs,$tz);return $result;}private function ServerHostname(){if(!empty($this->Hostname)){$result=$this->Hostname;}elseif(isset($_SERVER['SERVER_NAME'])){$result=$_SERVER['SERVER_NAME'];}else{$result='localhost.localdomain';}return $result;}private function Lang($key){if(count($this->language)<1){$this->SetLanguage('en');}if(isset($this->language[$key])){return $this->language[$key];}else{return 'Language string failed to load: '.$key;}}public function IsError(){return ($this->error_count>0);}private function FixEOL($str){$str=str_replace("\r\n","\n",$str);$str=str_replace("\r","\n",$str);$str=str_replace("\n",$this->LE,$str);return $str;}public function AddCustomHeader($custom_header){$this->CustomHeader[]=explode(':',$custom_header,2);}public function MsgHTML($message,$basedir=''){preg_match_all("/(src|background)=\"(.*)\"/Ui",$message,$images);if(isset($images[2])){foreach($images[2] as $i=>$url){if(!preg_match('#^[A-z]+://#',$url)){$filename=basename($url);$directory=dirname($url);($directory=='.')?$directory='':'';$cid='cid:'.md5($filename);$ext=pathinfo($filename,PATHINFO_EXTENSION);$mimeType=self::_mime_types($ext);if(strlen($basedir)>1&&substr($basedir,-1)!='/'){$basedir.='/';}if(strlen($directory)>1&&substr($directory,-1)!='/'){$directory.='/';}if($this->AddEmbeddedImage($basedir.$directory.$filename,md5($filename),$filename,'base64',$mimeType)){$message=preg_replace("/".$images[1][$i]."=\"".preg_quote($url,'/')."\"/Ui",$images[1][$i]."=\"".$cid."\"",$message);}}}}$this->IsHTML(true);$this->Body=$message;$textMsg=trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s','',$message)));if(!empty($textMsg)&&empty($this->AltBody)){$this->AltBody=html_entity_decode($textMsg);}if(empty($this->AltBody)){$this->AltBody='To view this email message, open it in a program that understands HTML!'."\n\n";}}public static function _mime_types($ext=''){$mimes=array('hqx'=>'application/mac-binhex40','cpt'=>'application/mac-compactpro','doc'=>'application/msword','bin'=>'application/macbinary','dms'=>'application/octet-stream','lha'=>'application/octet-stream','lzh'=>'application/octet-stream','exe'=>'application/octet-stream','class'=>'application/octet-stream','psd'=>'application/octet-stream','so'=>'application/octet-stream','sea'=>'application/octet-stream','dll'=>'application/octet-stream','oda'=>'application/oda','pdf'=>'application/pdf','ai'=>'application/postscript','eps'=>'application/postscript','ps'=>'application/postscript','smi'=>'application/smil','smil'=>'application/smil','mif'=>'application/vnd.mif','xls'=>'application/vnd.ms-excel','ppt'=>'application/vnd.ms-powerpoint','wbxml'=>'application/vnd.wap.wbxml','wmlc'=>'application/vnd.wap.wmlc','dcr'=>'application/x-director','dir'=>'application/x-director','dxr'=>'application/x-director','dvi'=>'application/x-dvi','gtar'=>'application/x-gtar','php'=>'application/x-httpd-php','php4'=>'application/x-httpd-php','php3'=>'application/x-httpd-php','phtml'=>'application/x-httpd-php','phps'=>'application/x-httpd-php-source','js'=>'application/x-javascript','swf'=>'application/x-shockwave-flash','sit'=>'application/x-stuffit','tar'=>'application/x-tar','tgz'=>'application/x-tar','xhtml'=>'application/xhtml+xml','xht'=>'application/xhtml+xml','zip'=>'application/zip','mid'=>'audio/midi','midi'=>'audio/midi','mpga'=>'audio/mpeg','mp2'=>'audio/mpeg','mp3'=>'audio/mpeg','aif'=>'audio/x-aiff','aiff'=>'audio/x-aiff','aifc'=>'audio/x-aiff','ram'=>'audio/x-pn-realaudio','rm'=>'audio/x-pn-realaudio','rpm'=>'audio/x-pn-realaudio-plugin','ra'=>'audio/x-realaudio','rv'=>'video/vnd.rn-realvideo','wav'=>'audio/x-wav','bmp'=>'image/bmp','gif'=>'image/gif','jpeg'=>'image/jpeg','jpg'=>'image/jpeg','jpe'=>'image/jpeg','png'=>'image/png','tiff'=>'image/tiff','tif'=>'image/tiff','css'=>'text/css','html'=>'text/html','htm'=>'text/html','shtml'=>'text/html','txt'=>'text/plain','text'=>'text/plain','log'=>'text/plain','rtx'=>'text/richtext','rtf'=>'text/rtf','xml'=>'text/xml','xsl'=>'text/xml','mpeg'=>'video/mpeg','mpg'=>'video/mpeg','mpe'=>'video/mpeg','qt'=>'video/quicktime','mov'=>'video/quicktime','avi'=>'video/x-msvideo','movie'=>'video/x-sgi-movie','doc'=>'application/msword','word'=>'application/msword','xl'=>'application/excel','eml'=>'message/rfc822');return (!isset($mimes[strtolower($ext)]))?'application/octet-stream':$mimes[strtolower($ext)];}public function set($name,$value=''){try{if(isset($this->$name)){$this->$name=$value;}else{throw new phpmailerException($this->Lang('variable_set').$name,self::STOP_CRITICAL);}}catch(Exception$e){$this->SetError($e->getMessage());if($e->getCode()==self::STOP_CRITICAL){return false;}}return true;}public function SecureHeader($str){$str=str_replace("\r",'',$str);$str=str_replace("\n",'',$str);return trim($str);}public function Sign($cert_filename,$key_filename,$key_pass){$this->sign_cert_file=$cert_filename;$this->sign_key_file=$key_filename;$this->sign_key_pass=$key_pass;}public function DKIM_QP($txt){$tmp="";$line="";for($i=0;$iDKIM_private);if($this->DKIM_passphrase!=''){$privKey=openssl_pkey_get_private($privKeyStr,$this->DKIM_passphrase);}else{$privKey=$privKeyStr;}if(openssl_sign($s,$signature,$privKey)){return base64_encode($signature);}}public function DKIM_HeaderC($s){$s=preg_replace("/\r\n\s+/"," ",$s);$lines=explode("\r\n",$s);foreach($lines as $key=>$line){list($heading,$value)=explode(":",$line,2);$heading=strtolower($heading);$value=preg_replace("/\s+/"," ",$value);$lines[$key]=$heading.":".trim($value);}$s=implode("\r\n",$lines);return $s;}public function DKIM_BodyC($body){if($body=='')return "\r\n";$body=str_replace("\r\n","\n",$body);$body=str_replace("\n","\r\n",$body);while(substr($body,strlen($body)-4,4)=="\r\n\r\n"){$body=substr($body,0,strlen($body)-2);}return $body;}public function DKIM_Add($headers_line,$subject,$body){$DKIMsignatureType='rsa-sha1';$DKIMcanonicalization='relaxed/simple';$DKIMquery='dns/txt';$DKIMtime=time();$subject_header="Subject: $subject";$headers=explode("\r\n",$headers_line);foreach($headers as $header){if(strpos($header,'From:')===0){$from_header=$header;}elseif(strpos($header,'To:')===0){$to_header=$header;}}$from=str_replace('|','=7C',$this->DKIM_QP($from_header));$to=str_replace('|','=7C',$this->DKIM_QP($to_header));$subject=str_replace('|','=7C',$this->DKIM_QP($subject_header));$body=$this->DKIM_BodyC($body);$DKIMlen=strlen($body);$DKIMb64=base64_encode(pack("H*",sha1($body)));$ident=($this->DKIM_identity=='')?'':" i=".$this->DKIM_identity.";";$dkimhdrs="DKIM-Signature: v=1; a=".$DKIMsignatureType."; q=".$DKIMquery."; l=".$DKIMlen."; s=".$this->DKIM_selector.";\r\n"."\tt=".$DKIMtime."; c=".$DKIMcanonicalization.";\r\n"."\th=From:To:Subject;\r\n"."\td=".$this->DKIM_domain.";".$ident."\r\n"."\tz=$from\r\n"."\t|$to\r\n"."\t|$subject;\r\n"."\tbh=".$DKIMb64.";\r\n"."\tb=";$toSign=$this->DKIM_HeaderC($from_header."\r\n".$to_header."\r\n".$subject_header."\r\n".$dkimhdrs);$signed=$this->DKIM_Sign($toSign);return "X-PHPMAILER-DKIM: phpmailer.worxware.com\r\n".$dkimhdrs.$signed."\r\n";}protected function doCallback($isSent,$to,$cc,$bcc,$subject,$body){if(!empty($this->action_function)&&function_exists($this->action_function)){$params=array($isSent,$to,$cc,$bcc,$subject,$body);call_user_func_array($this->action_function,$params);}}}class phpmailerException extends Exception{public function errorMessage(){$errorMsg=''.$this->getMessage()."
    \n";return $errorMsg;}}class SMTP{public $SMTP_PORT=25;public $CRLF="\r\n";public $do_debug;public $do_verp=false;private $smtp_conn;private $error;private $helo_rply;public function __construct(){$this->smtp_conn=0;$this->error=null;$this->helo_rply=null;$this->do_debug=0;}public function Connect($host,$port=0,$tval=30){$this->error=null;if($this->connected()){$this->error=array("error"=>"Already connected to a server");return false;}if(empty($port)){$port=$this->SMTP_PORT;}$this->smtp_conn=@fsockopen($host,$port,$errno,$errstr,$tval);if(empty($this->smtp_conn)){$this->error=array("error"=>"Failed to connect to server","errno"=>$errno,"errstr"=>$errstr);if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": $errstr ($errno)".$this->CRLF.'
    ';}return false;}if(substr(PHP_OS,0,3)!="WIN")socket_set_timeout($this->smtp_conn,$tval,0);$announce=$this->get_lines();if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$announce.$this->CRLF.'
    ';}return true;}public function StartTLS(){$this->error=null;if(!$this->connected()){$this->error=array("error"=>"Called StartTLS() without being connected");return false;}fputs($this->smtp_conn,"STARTTLS".$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$rply.$this->CRLF.'
    ';}if($code!=220){$this->error=array("error"=>"STARTTLS not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'
    ';}return false;}if(!stream_socket_enable_crypto($this->smtp_conn,true,STREAM_CRYPTO_METHOD_TLS_CLIENT)){return false;}return true;}public function Authenticate($username,$password){fputs($this->smtp_conn,"AUTH LOGIN".$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($code!=334){$this->error=array("error"=>"AUTH not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'
    ';}return false;}fputs($this->smtp_conn,base64_encode($username).$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($code!=334){$this->error=array("error"=>"Username not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'
    ';}return false;}fputs($this->smtp_conn,base64_encode($password).$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($code!=235){$this->error=array("error"=>"Password not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'
    ';}return false;}return true;}public function Connected(){if(!empty($this->smtp_conn)){$sock_status=socket_get_status($this->smtp_conn);if($sock_status["eof"]){if($this->do_debug>=1){echo "SMTP -> NOTICE:".$this->CRLF."EOF caught while checking if connected";}$this->Close();return false;}return true;}return false;}public function Close(){$this->error=null;$this->helo_rply=null;if(!empty($this->smtp_conn)){fclose($this->smtp_conn);$this->smtp_conn=0;}}public function Data($msg_data){$this->error=null;if(!$this->connected()){$this->error=array("error"=>"Called Data() without being connected");return false;}fputs($this->smtp_conn,"DATA".$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$rply.$this->CRLF.'
    ';}if($code!=354){$this->error=array("error"=>"DATA command not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'
    ';}return false;}$msg_data=str_replace("\r\n","\n",$msg_data);$msg_data=str_replace("\r","\n",$msg_data);$lines=explode("\n",$msg_data);$field=substr($lines[0],0,strpos($lines[0],":"));$in_headers=false;if(!empty($field)&&!strstr($field," ")){$in_headers=true;}$max_line_length=998;while(list(,$line)=@each($lines)){$lines_out=null;if($line==""&&$in_headers){$in_headers=false;}while(strlen($line)>$max_line_length){$pos=strrpos(substr($line,0,$max_line_length)," ");if(!$pos){$pos=$max_line_length-1;$lines_out[]=substr($line,0,$pos);$line=substr($line,$pos);}else{$lines_out[]=substr($line,0,$pos);$line=substr($line,$pos+1);}if($in_headers){$line="\t".$line;}}$lines_out[]=$line;while(list(,$line_out)=@each($lines_out)){if(strlen($line_out)>0){if(substr($line_out,0,1)=="."){$line_out=".".$line_out;}}fputs($this->smtp_conn,$line_out.$this->CRLF);}}fputs($this->smtp_conn,$this->CRLF.".".$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$rply.$this->CRLF.'
    ';}if($code!=250){$this->error=array("error"=>"DATA not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'
    ';}return false;}return true;}public function Hello($host=''){$this->error=null;if(!$this->connected()){$this->error=array("error"=>"Called Hello() without being connected");return false;}if(empty($host)){$host="localhost";}if(!$this->SendHello("EHLO",$host)){if(!$this->SendHello("HELO",$host)){return false;}}return true;}private function SendHello($hello,$host){fputs($this->smtp_conn,$hello." ".$host.$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($this->do_debug>=2){echo "SMTP -> FROM SERVER: ".$rply.$this->CRLF.'
    ';}if($code!=250){$this->error=array("error"=>$hello." not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'
    ';}return false;}$this->helo_rply=$rply;return true;}public function Mail($from){$this->error=null;if(!$this->connected()){$this->error=array("error"=>"Called Mail() without being connected");return false;}$useVerp=($this->do_verp?"XVERP":"");fputs($this->smtp_conn,"MAIL FROM:<".$from.">".$useVerp.$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$rply.$this->CRLF.'
    ';}if($code!=250){$this->error=array("error"=>"MAIL not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'
    ';}return false;}return true;}public function Quit($close_on_error=true){$this->error=null;if(!$this->connected()){$this->error=array("error"=>"Called Quit() without being connected");return false;}fputs($this->smtp_conn,"quit".$this->CRLF);$byemsg=$this->get_lines();if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$byemsg.$this->CRLF.'
    ';}$rval=true;$e=null;$code=substr($byemsg,0,3);if($code!=221){$e=array("error"=>"SMTP server rejected quit command","smtp_code"=>$code,"smtp_rply"=>substr($byemsg,4));$rval=false;if($this->do_debug>=1){echo "SMTP -> ERROR: ".$e["error"].": ".$byemsg.$this->CRLF.'
    ';}}if(empty($e)||$close_on_error){$this->Close();}return $rval;}public function Recipient($to){$this->error=null;if(!$this->connected()){$this->error=array("error"=>"Called Recipient() without being connected");return false;}fputs($this->smtp_conn,"RCPT TO:<".$to.">".$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$rply.$this->CRLF.'
    ';}if($code!=250&&$code!=251){$this->error=array("error"=>"RCPT not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'
    ';}return false;}return true;}public function Reset(){$this->error=null;if(!$this->connected()){$this->error=array("error"=>"Called Reset() without being connected");return false;}fputs($this->smtp_conn,"RSET".$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$rply.$this->CRLF.'
    ';}if($code!=250){$this->error=array("error"=>"RSET failed","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'
    ';}return false;}return true;}public function SendAndMail($from){$this->error=null;if(!$this->connected()){$this->error=array("error"=>"Called SendAndMail() without being connected");return false;}fputs($this->smtp_conn,"SAML FROM:".$from.$this->CRLF);$rply=$this->get_lines();$code=substr($rply,0,3);if($this->do_debug>=2){echo "SMTP -> FROM SERVER:".$rply.$this->CRLF.'
    ';}if($code!=250){$this->error=array("error"=>"SAML not accepted from server","smtp_code"=>$code,"smtp_msg"=>substr($rply,4));if($this->do_debug>=1){echo "SMTP -> ERROR: ".$this->error["error"].": ".$rply.$this->CRLF.'
    ';}return false;}return true;}public function Turn(){$this->error=array("error"=>"This method, TURN, of the SMTP "."is not implemented");if($this->do_debug>=1){echo "SMTP -> NOTICE: ".$this->error["error"].$this->CRLF.'
    ';}return false;}public function getError(){return $this->error;}private function get_lines(){$data="";while($str=@fgets($this->smtp_conn,515)){if($this->do_debug>=4){echo "SMTP -> get_lines(): \$data was \"$data\"".$this->CRLF.'
    ';echo "SMTP -> get_lines(): \$str is \"$str\"".$this->CRLF.'
    ';}$data.=$str;if($this->do_debug>=4){echo "SMTP -> get_lines(): \$data is \"$data\"".$this->CRLF.'
    ';}if(substr($str,3,1)==" "){break;}}return $data;}}function SendMail($address,$title,$message,$fromname='NONE'){$mail= new PHPMailer();$mail->IsSMTP();$mail->CharSet=C('MAIL_CHARSET');$mail->AddAddress($address);$mail->Body=$message;$mail->From= C('MAIL_ADDRESS');$mail->FromName=$fromname;$mail->Subject=$title;$mail->Host=C('MAIL_SMTP');$mail->SMTPAuth=C('MAIL_AUTH');$mail->Username=C('MAIL_LOGINNAME');$mail->Password=C('MAIL_PASSWORD'); $mail->IsHTML(C('MAIL_HTML'));return($mail->Send());}?> \ No newline at end of file