前几天空闲,觉得独立博客除了友链,有些朋友来访之外,其实都是孤岛。这也很像所谓的深网(Deep Web),各种搜索引擎的权重都不高,主要在自娱自乐。
想想写了一个功能,叫做博友大召唤术——可以在任意有留言功能的地方@博友,可以很便捷一键@友链中的朋友。
提醒他们:快点来看,劳资更新了!
先感受一下例子吧,滑到这篇文章的末尾,点击评论框处的@按钮。
手机上隐藏了这个功能
不知道试用了之后博友们有没有什么想法,可以聊聊。
授人以鱼不如授人以渔,肯定会有博友让我发个源文件来感受一下,不是我不愿意,然而这不是通用的,首先你的友链要存数据库,可以猜想很多博友的友链都是写死的。其次我没有写成插件,这想必友情链接的功能也要写上去,就只写了个可以自己用的。
很久以前我写过一个自用的系统,为了避免重复造轮子,写了一个收集信息的系统,可以创建表单,然后做管理和统计,也做了各种数据调用接口。可以理解为类似「问卷星」,但是不同的是我可以调用数据,你用问卷星不行。
其实说起来很简单,只要了解过类似模式就应该一眼能看懂。我博客中的友情链接、读书记录就是用的这个,就免得重复写这些接口了。
要实现不手动输入来@博友,那必须要有数据,无论是不是有一个类似我这样的系统都无所谓,只要存数据库了。当然写一个Json也是可行的。就比如以下格式:
linkDate = [{
name: "孤斗",
Email: "550444405@qq.com",
Pic:"xxxxx.jpg",
url:'http://d-d.design'
},{
name: "孤斗2",
Email: "xxxx@xx.xx",
Pic:"xxxxx.jpg",
url:'http://xx.xx'
}]
要@别人,大家的博客都是独立的网站,怎么通知对方呢?没有什么东西可以推送,也不可能发短信,那只能是邮件了。
用SMTP进行邮件传输非常简单,网上也会有很多方法。这里我就直接把自己写的代码给大家。
<!-- 作者:孤斗 -->
<?php
header("Access-Control-Allow-Origin: *"); // 允许任意域名发起的跨域请求
$emailName = $_POST['emailName'];
$toEmail = $_POST['toEmail'];
$toTitle = $_POST['toTitle'];
$toWord = $_POST['toWord'];
function sendMail($to,$title,$content){
//引入PHPMailer的核心文件 使用require_once包含避免出现PHPMailer类重复定义的警告
require_once("./class.phpmailer.php");
require_once("./class.smtp.php");
$mail = new PHPMailer();//实例化PHPMailer核心类
// $mail->SMTPDebug = 1;//是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式
$mail->isSMTP();//使用smtp鉴权方式发送邮件
$mail->SMTPAuth=true;//smtp需要鉴权 这个必须是true
$mail->Host = 'smtp.qq.com';//链接qq域名邮箱的服务器地址
$mail->SMTPSecure = 'ssl';//设置使用ssl加密方式登录鉴权
$mail->Port = 465;//设置ssl连接smtp服务器的远程服务器端口号,以前的默认是25,但是现在新的好像已经不可用了 可选465或587
$mail->CharSet = 'UTF-8';//设置发送的邮件的编码 可选GB2312 我喜欢utf-8 据说utf8在某些客户端收信下会乱码
$mail->FromName = $emailName;//设置发件人姓名(昵称) 任意内容,显示在收件人邮件的发件人邮箱地址前的发件人姓名
$mail->Username ='xxxx@qq.com';//smtp登录的账号 这里填入字符串格式的qq号即可
$mail->Password = 'xxxx';//smtp登录的密码 使用生成的授权码(就刚才叫你保存的最新的授权码)【非常重要:在网页上登陆邮箱后在设置中去获取此授权码】
$mail->From = 'xxxx@qq.com';//设置发件人邮箱地址 这里填入上述提到的“发件人邮箱”
$mail->isHTML(true);//邮件正文是否为html编码 注意此处是一个方法 不再是属性 true或false
$mail->addAddress($to);//设置收件人邮箱地址
$mail->Subject = $title;//添加该邮件的主题
$mail->Body = $content;//添加邮件正文 上方将isHTML设置成了true,则可以是完整的html字符串 如:使用file_get_contents函数读取本地的html文件
//简单的判断与提示信息
if($mail->send()) {
return true;
}else{
return false;
}
}
header("Content-Type:text/html;charset=utf-8");
$flag = sendMail($toEmail,$emailName,$toWord);
if($flag){
echo "发送邮件成功!";
}else{
echo "发送邮件失败!";
}
?>
引用的两个文件
在前端如何调用就不用说了吧。
可能没有人问这个问题,但是还是说一下😂,因为孤斗这个博客我的设计中有蛮多弹框的,普通的Alert肯定是满足不了我的,自己写弹窗还要传事件还要传对象的,想想要封装个能通用的还是比较麻烦,避免造轮子,找到了SweetAlert,非常的好用。API文档也很清晰,大家可以去试一试。
综上,就可以实现@了别人,在提交留言的时候发送邮件通知@的人的功能了,嘿嘿。
林光倒影入窗虚,滟漾犹如帝网珠;俯视松杉成荇藻,始知尺宅即江湖。就你啦,经常拜读你的文章,如有打扰,请见谅,召唤开始!—— @「尺宅即江湖」
啊?哈哈哈,马一浮先生的诗知道的人不多,知道这首的就更不多了。厉害,厉害!可是,我要做什么?
ok 我被通灵术召唤来了
你们好拼啊。。。
我来试试,艾特下自家兄弟哈哈哈—— @「胡智勇」
感觉你姿势没用对呀,应该是这样@的
—— @「胡智勇」
cool ~~
没用错没用错😂我自己代码的问题,@成功了的,只不过登录下@和不登录@样式不太一样,我看看我写了个什么判断,都不记得了
评论@插件 – AT 0.1.1 FOR TYPECHO 0.9
这里好像有一个项目跟你这个好像(σ゚∀゚)σ⁶⁶⁶⁶⁶⁶⁶⁶⁶⁶
是有些许类似哦~
但这个功能最主要的问题就是只能@预设好的人,没有一个所有博友的数据库支持,不太友好
挺好挺好,就是右键禁用想开新标签页很不方便。。
按住ctrl键再点标签就是新窗口,嘿嘿。
确实是,很多人都觉得不方便,我隔天还是把右键限制取消了
我试试这个@功能,但是我看了你的几个友链,我都不认识,总不能@他们吧。
是比较局限,要@我这里没有的博友只能自己输入名字和email了。
要是有一个站点收录站,就可以做一个@所有博友的插件了
是的,这些都需要一个标准化,但是这个功能确实好!
那还说什么,整个收录站。
哈哈,我也想过,等有空的时候想想~
花里胡哨的。—— @「伍子🐍」
哈哈,爱你我的涛~
手机端浏览器上边也能实现就完美了
可以实现的,只是样式我没想好,想想就隐藏了不写了😂
哈哈,我又优化了一下,再召唤一次你~
—— @「xoyo」
哈哈,来召唤一下我这位朋友,感受一波新功能。
—— @「安忆」
还行,就是发件地址是 QQ 号,正文也是纯文本,感觉有点儿不显眼(没有特征)。
嗯,确实,空闲我再来完善下