当前博客邮件发送功能修复CommentToMail折腾
缘起
先是看到了一篇博文上写到了使用LoveKKComment实现了评论回复邮件提醒才一敲脑袋,哦豁,好像还真忘了这个功能,遂又是一个不休的夜晚。
LoveKKComment
LoveKKComment是一款Typecho邮件通知类插件,支持SMTP、Send Cloud、阿里云邮件推送三种邮件通知方式。然而我这里安装配置之后,一点儿反应都没有,转而投向CommentToMail,然而却又是个大坑。
- 安装,配置邮件服务器,测试邮件发送成功后,便到了模拟测试评论回复的环节。
- 然而不幸的是,尽管每次都没有返回邮件发送失败的消息,但只有博主能够收到评论的邮件,评论者并不能收到被回复的邮件提醒!!!
开启邮件发送日志,发现插件设置为不发送此类邮件或被评论访客拒收邮件!,一路追根溯源,逼着我阅读PHP源码才发现了在Plugin.php这块:
//是否接收邮件 if (isset($_POST['receiveMail']) && 'yes' == $_POST['receiveMail']) { $cfg['banMail'] = 0; } else { $cfg['banMail'] = 1; }
然而主题中不接收回复邮件通知按钮的元素名为banmail,所以应改为
//是否接收邮件 if (isset($_POST['banmail']) && 'stop' == $_POST['banmail']) { $cfg['banMail'] = 1; } else { $cfg['banMail'] = 0; }
- 其实到之后才发现在早期CommentToMail 2.0.1里便是如此= =,这才是原来的逻辑。
环境BUG
如果使用这个插件依然不能发送邮件,那么恭喜,我把坑都踩完了。。
两种情况
测试邮件不能发送smtp端口465 用户名 授权码 ssl加密勾选,邮件是否进入垃圾桶(使用QQ邮箱好处就是不用进垃圾桶,例如100@qq.com这种)。
上源码,插件使用fsockopen,pfsockopen,stream_socket_client三种方式发送邮件,检查对应函数是否被禁止。if (function_exists('fsockopen')) { $fp = @fsockopen ($scheme . $host, $port, $errno, $errstr, 30); } elseif (function_exists('pfsockopen')) { $fp = @pfsockopen ($scheme . $host, $port, $errno, $errstr, 30); } else { $fp = stream_socket_client($scheme . $host . ":$port", $errno, $errstr, 30); }
- 测试邮件能发送,但是回复不能触发,同上,检查函数是否被禁用,更大的可能性,这是环境配置问题,如果你是用的是宝塔面板,那么宝塔面板的PHP7.0或者7.3由于编译问题,函数是无效的。请换用PHP7.1或5.6即可。
- 以上都不能解决问题,那就使用CommentToMail4.1版本
注:CommentToMail 用了异步触发,就是访客回复时,插件会自己去访问自己的一个页面,然后被访问的那个页面发信。
异步触发中很多步骤都可能出问题,比如php无法访问到网站本身,或者执行到一半关闭连接时发送邮件的程序被关了。这些问题涉及到具体环境配置。
本文共 628 个字数,平均阅读时长 ≈ 2分钟
喜欢就支持一下吧
本站为个人博客,博客所发布的一切破解补丁、注册机和注册信息及软件的文章仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
本站信息来自网络,版权争议与本站无关,您必须在下载后的24个小时之内从您的电脑中彻底删除上述内容。
访问和下载本站内容,说明您已同意上述条款。
本站不贩卖软件,所有内容不作为商业行为。如果有侵犯您的权益请点击“关于”联系WFXL,核实后会及时删除
版权属于:轩灵
作品采用《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
评论 抢沙发