侧边栏壁纸
  • 累计撰写 112 篇文章
  • 累计收到 171 条评论

【更新】CommentToMail typecho2017&v4.1& Mailer三版本,支持php5.6/7,插件详解

王忘杰
2017-12-26 / 93 评论 / 157,111 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2020年01月19日,已超过485天没有更新,若内容或图片失效,请留言反馈。

20200119更新

官方开发人员对最新开发版适配了异步回调

https://joyqi.com/typecho/typecho-async-service.html

下载地址
https://joyqi.com/usr/uploads/2017/11/3224167191.gz

CommentToMail v4.1 现已发布

QQ截图20171005232940.png

详情查看作者博客
https://blog.uniartisan.com/archives/CommentToMail.html

下载地址
https://blog.uniartisan.com/app/CommentToMail.tar.gz

早期版本中邮件发送失败一个很重要的原因是,异步触发失败导致邮件不能发送,而CommentToMail v4.1另辟蹊径,采用网站监控程序触发的方式发送邮件,实在是高明

使用方法
正常设置插件后,设置key
QQ截图20171005233042.png

完整地址写入网站监控(此处使用360网站监控)
QQ截图20171005233015.png

默认每10分钟触发一次,每10分钟将之前的右键发送一次
QQ截图20171005233004.png

监控的同时正常接受邮件
QQ截图20171005232940.png

CommentToMail typecho 2017版

bug修复&下载地址 https://www.xlogs.cn/archives/49/

SOCKET请求错误后转入CURL方式

if ($fp === false) {
            //self::saveLog("SOCKET错误," . $errno . ':' . $errstr);
            // Socket请求失败,使用Curl
            self::curl($url);
            return false;
        }

CURL方式关闭证书验证以兼容QQ邮箱等安全级别不够的邮箱

public static function curl($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTPGET, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);       // 将curl_exec()获取的信息以文件流的形式返回,不直接输出。  
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1);       // 连接等待时间
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);   // 跳过证书检查
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);    // 从证书中检查SSL加密算法是否存在
    curl_setopt($ch, CURLOPT_TIMEOUT, 1);              // curl允许执行时间
    
    self::saveLog("Curl 方式发送\r\n");
    
    curl_exec($ch);
    curl_close($ch);
    self::saveLog("请求结束\r\n");
}


TIM截图20170610234519.png
Typecho 上使用最广泛的插件是 CommentToMail,最早由 DEFE 开发,后来由 Byends Upd 接手。该插件通过常用的 PHP Mail,SendMail 或者 SMTP 来发送邮件
同时lan tian 制作了基于 Mailgun 云邮API 的 Typecho评论插件分支

TIM图片20170610233406.png

下载地址
百度云 已更新
为什么不用github?因为我不是作者,我会通知作者更新到他的github

更新了什么?
博主我的插件用着明明没问题,你更新了啥?
详情可以点击这里 邮件发送失败:SMTP connect() failed. PHP>=5.6
当我们使用QQ邮箱(非企业邮箱)的时候会发现邮件发不出去,修复了此bug

更新了PHP Mailer版本
关闭了使用SMTP发信的证书认证(QQ邮箱证书加密级别太低)
修改了插件说明(如果这也算的话。。)

支持的版本范围

typecho 0.9 1.0 1.1 开发版(2017-6-11)
php5.4 5.5 5.6 7.0 7.1

为什么要用加密邮箱发送邮件通知?
正常SMTP协议使用的是25端口,但是由于垃圾邮件泛滥,25端口普遍被拦截,因此才使用465的加密SMTP端口

设置图
465端口
TIM截图20170611000740.png
QQ邮箱需要使用授权码而非QQ登录密码

TIM截图20170611000856.png

环境BUG
如果你使用这个插件依然不能发送邮件,那么恭喜你,我把坑都踩完了。。
两种情况
1.测试邮件不能发送
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);
        }

2.测试邮件能发送,但是回复不能触发
同上,检查函数是否被禁用

更大的可能性,这是环境配置问题
如果你是用的是宝塔面板,那么宝塔面板的PHP7.0由于编译问题,函数是无效的。。
请换用PHP7.1或5.6即可

细节
我想知道博主你改了什么,我不放心你的插件,我自己改改可以吗

讨论过程
TIM截图20170611001755.png

此次插件修改是lan tian全权指挥,简称云修改???(没毛病)

Action.phpsendMail()函数中,在

$mailer->SetFrom($this->_email->from, $this->_email->fromName);
$mailer->AddReplyTo($this->_email->to, $this->_email->toName);
$mailer->Subject = $this->_email->subject;
$mailer->AltBody = $this->_email->altBody;
$mailer->MsgHTML($this->_email->msgHtml);
$mailer->AddAddress($this->_email->to, $this->_email->toName);

这么一大段后插入:

$mailer->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);

CommentToMail 自带的 PHPMailer 太老了,所以加上参数没用。
CommentToMail 的 lib 文件夹里有三个php文件,把它们用 https://github.com/PHPMailer/PHPMailer 上的对应的三个php

class.phpmailer.php开头加上:

require_once 'class.smtp.php';
require_once 'class.pop3.php';

CommentToMail 用了异步触发,就是访客回复时,插件会自己去访问自己的一个页面,然后被访问的那个页面发信。
异步触发中很多步骤都可能出问题,比如php无法访问到网站本身,或者执行到一半关闭连接时发送邮件的程序被关了。这些问题涉及到具体环境配置

完毕

0

评论 (93)

取消
  1. 头像
    在花
    Windows 10 · Google Chrome

    阿里云虚拟主机,万网已经开通函数。SMTP connect() failed

    回复
    1. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ 在花

      文章里有啊,加密的问题

      回复
      1. 头像
        在花
        Windows 10 · Google Chrome
        @ 王忘杰

        阿里云虚拟主机的问题,我今天测试同样的配置,在腾讯云主机上没问题。

        回复
        1. 头像
          王忘杰 作者
          Windows 10 · Google Chrome
          @ 在花

          自从我用官方的插件后,没有再遇到此类问题

          回复
  2. 头像
    TNTcraftHIM
    Windows 10 · Google Chrome

    奇怪的bug,游客收不到消息,查看日志提示:
    插件设置为不发送此类邮件或被评论访客拒收邮件!
    尝试过开关主题内自带的开关,没用...
    设置里看起来也没问题
    测试邮件可以正常接收
    好迷啊

    回复
    1. 头像
      王忘杰 作者
      MacOS · Google Chrome
      @ TNTcraftHIM

      用开发版和官方的邮件插件试试

      回复
  3. 头像
    Leeds
    Windows 10 · Google Chrome

    版本 1.1 (17.10.30)

    Mailer 无法在此版本的typecho下正常工作

    回复
    1. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ Leeds

      用开发版和官方的插件。

      回复
      1. 头像
        Leeds
        Windows 10 · Google Chrome
        @ 王忘杰

        好的,谢谢大佬

        回复
  4. 头像
    籽夏
    Windows 10 · Google Chrome

    对不起,插件目录不可写,无法正常使用此功能

    回复
    1. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ 籽夏

      所以解决办法就是给插件目录增加写入权限

      回复
      1. 头像
        籽夏
        Windows 10 · Google Chrome
        @ 王忘杰

        给了777 ::aru:nose::

        回复
        1. 头像
          王忘杰 作者
          Windows 10 · Google Chrome
          @ 籽夏

          chmod -R 777 网站目录/usr/plugins/

          回复
  5. 头像
    点儿
    Windows 7 · Google Chrome

    ::aru:shy:: 蒙圈了,邮箱困难

    回复
    1. 头像
      点儿
      Windows 7 · Google Chrome
      @ 点儿

      Typecho 版本低,无法使用

      回复
  6. 头像
    uniartisan
    Windows 10 · Google Chrome

    您好我的博客更换了域名从zhiyuanyun.cc换成了https://blog.uniartisan.com/archives/CommentToMail.html
    麻烦您更改一下链接OωO

    回复
    1. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ uniartisan

      吼啊吼啊ヾ(≧∇≦*)ゝ

      回复
  7. 头像
    雨落凋殇
    Windows 7 · Google Chrome

    挺好的,一直在用这个插件

    回复
  8. 头像
    Android · QQ Browser

    测试发送邮件500是什么原因阿???

    回复
    1. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @

      开发版的typecho可以用第一个官方的插件,正常开启伪静态就行了。

      回复
  9. 头像
    浅夏
    Windows 10 · Google Chrome

    想问下 【该网页无法正常运作, 目前无法处理此请求,HTTP ERROR 502】 发送测试邮箱出现的这种情况属于什么问题呢?

    回复
    1. 头像
      kiln
      MacOS · Google Chrome
      @ 浅夏

      我换了文件也是报这个错

      回复
      1. 头像
        浅夏
        Android Oreo · QQ Browser
        @ kiln

        用lovekangkamg那个插件吧

        回复
  10. 头像
    Uniartisan
    iPhone · QQ Browser

    哈哈,趁着有时间更新插件到4.1.1
    下载地址 https://blog.zhiyuanyun.cc/app/CommentToMail.tar.gz
    更新日志
    https://blog.zhiyuanyun.cc/

    回复
  11. 头像
    Loekman
    Windows 7 · Google Chrome

    虽然老版本回复时邮件通知多加载了两秒,但我还是懒得换了。

    回复
  12. 头像
    Noisky
    Windows 7 · Google Chrome

    最新的开发板已经支持异步回调,可以考虑接入官方的异步回调
    https://joyqi.com/typecho/typecho-async-service.html

    回复
    1. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ Noisky

      可是我不会

      回复
  13. 头像
    小姐姐
    Windows 10 · Google Chrome

    哇……整了好久4.0版本一直失败 换了2.版本可以了…………难受(╯﹏╰)

    回复
    1. 头像
      Uniartisan
      iPhone · Safari
      @ 小姐姐

      https://blog.zhiyuanyun.cc/archives/CommentToMail.html
      你可以看看这个

      回复
    2. 头像
      Uniartisan
      iPhone · Safari
      @ 小姐姐

      怎么可能!哇啊啊啊啊啊!
      我自己用没问题的呀,你是卡在哪一步?可以回复我,我在博客中修正....

      回复
    3. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ 小姐姐

      并 不难

      回复
  14. 头像
    Uniaritsan
    iPhone · Safari

    https://blog.zhiyuanyun.cc/archives/CommentToMail.html
    这是我在另一个分支上进行修改的....
    版权信息在插件文件中保留。这个是网址监控运行,不存在兼容性问题

    回复
    1. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ Uniaritsan

      我觉得OK 已更新

      回复
  15. 头像
    红叶
    Windows 10 · FireFox

    邮件发送失败:SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

    回复
    1. 头像
      梁兴健
      Windows 7 · Google Chrome
      @ 红叶

      遇到同样问题

      回复
  16. 头像
    WispX
    Windows 10 · Google Chrome

    https://www.xlogs.cn/archives/49/
    修复https下评论无法通知的问题

    回复
    1. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ WispX

      感谢大佬,文章已更新

      回复
  17. 头像
    StupidPz
    Windows 10 · Google Chrome

    哇,竟然把阿里云的企业邮箱的坑修复了,终于不再提示stmp connect error了

    回复
  18. 头像
    bowen
    Windows 10 · Google Chrome

    我试了一下,同样是http://www.bowen-blog.com/index.php/action/comment-to-mail?send=xxxxx访问这个网址,邮件能正常发出去,但是评论时就发不了。看了日志,发现能正常触发(因为我在socket函数里打印出一些东西来,说明是执行了这个函数的)。就不知道为什么发不了邮件

    回复
    1. 头像
      Uniartisan
      iPhone · QQ Browser
      @ bowen

      https://blog.zhiyuanyun.cc/archives/CommentToMail.html
      你可以看看这个!

      回复
      1. 头像
        bowen
        Windows 10 · Google Chrome
        @ Uniartisan

        其实我之前自己搞成功了,改成同步触发就行。

        回复
    2. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ bowen

      只能解释环境问题,不能异步触发

      回复
      1. 头像
        bowen
        Windows 10 · Google Chrome
        @ 王忘杰

        不能异步触发是啥意思呢?有没有其他解决方法?

        回复
        1. 头像
          王忘杰 作者
          Windows 10 · Google Chrome
          @ bowen

          使用原版程序,原版主题,能够发送即为正常。
          直接访问这个链接或者后台测试,是同步触发,评论后发送邮件是异步触发,邮件和评论不是用一时间完成的

          回复
          1. 头像
            bowen
            Windows 10 · Google Chrome
            @ 王忘杰

            楼主你的空间和域名是在哪里买的?

            回复
            1. 头像
              王忘杰 作者
              Windows 10 · Google Chrome
              @ bowen

              https://9sb.org/38 域名是爱名网收的短域名

              回复
              1. 头像
                bowen
                Android · QQ Browser
                @ 王忘杰

                那主机呢?自己搭的?

                回复
                1. 头像
                  王忘杰 作者
                  Windows 10 · Google Chrome
                  @ bowen

                  看本博客的其他文章

                  回复
  19. 头像
    yufan
    Android · Google Chrome

    插件一用cdn就不行,大佬知道是什么原因吗

    回复
  20. 头像
    ZxSco
    Windows 10 · FireFox

    邮件发送失败:SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
    博主这个问题怎么解决?

    回复
    1. 头像
      ZxSco
      Windows 10 · FireFox
      @ ZxSco

      = = 是服务商禁用了fsockopen()函数

      回复
  21. 头像
    fate
    Windows 10 · Google Chrome

    谢谢分享 2017年8月2日16:28:01 测试可用 ^_^

    回复
  22. 头像
    shunzi
    Windows 7 · Google Chrome

    你好,我用的是企鹅的企业 邮箱,启用了SSL,测试邮件可以发送,评论后不自动发邮件。我去看了下日志,显示如需哦啊:2017-07-31 17:44:14 开始发送请求:https://zhengshun.wang/action/comment-to-mail?send=Q3bqNUK
    SOCKET错误,0: 但是我手动在地址栏访问这段url就可以发送邮件,不知道哪出问题了,望抽时间回复一下!谢谢

    回复
    1. 头像
      清雨
      Android · Google Chrome
      @ shunzi

      这个问题是因为在服务器本地无法用这个域名直接访问你的博客(域名绑定设置有问题),而你手动在远程访问这个UEL链接当然就能触发邮件发送了。

      回复
      1. 头像
        shunzi
        Windows 7 · Google Chrome
        @ 清雨

        问题原因是,网站启用了https ,服务器直接curl 调用https会报错。改成http就好使了。这个问题不知道怎么解决,网址又不想去掉https。。。

        回复
        1. 头像
          清雨
          Android · Google Chrome
          @ shunzi

          SSL证书绑定正确了?如果是HTTPS站点需要在CommentToMail 开启 SSL加密。

          回复
          1. 头像
            shunzi
            Windows 7 · Google Chrome
            @ 清雨

            已经开启ssl了,最终问题是我网站ssl证书弄错了,导致curl识别报错。nginx版的我给写成apache的了。晕死

            回复
    2. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ shunzi

      环境问题,无法解决

      回复
      1. 头像
        shunzi
        Windows 7 · Google Chrome
        @ 王忘杰

        会不会 SSL的问题?我自己的VPS,环境问题我可以自己调,麻烦帮看一下!

        回复
        1. 头像
          王忘杰 作者
          Windows 10 · Google Chrome
          @ shunzi

          测试邮件可以发送后,邮箱和程序就不存在问题了。这是异步触发的问题,这个问题解决不了

          回复
  23. 头像
    保罗
    Windows 8.1 · Google Chrome

    为啥我这里提示“对不起,插件目录不可写,无法正常使用此功能”,我给插件目录设置的是755权限(我用的是 ispconfig 面板)

    回复
    1. 头像
      靳闯博客
      Windows 10 · Google Chrome
      @ 保罗

      好使,装完稍微调试了下ok了,

      回复
    2. 头像
      靳闯博客
      Windows 10 · Google Chrome
      @ 保罗

      没有权限写,你要确认下你上传的插件目录 属主和属组 的权限是否正确,再者就是目录的权限,要递归下权限

      回复
      1. 头像
        保罗
        Windows 7 · Google Chrome
        @ 靳闯博客

        给777都不行好不

        回复
        1. 头像
          靳闯博客
          Windows 10 · Google Chrome
          @ 保罗

          我的刚放进去启用也提示插件目录不可写,我只改了文件夹的属主和属组就完事了,就没改读写权限

          回复
          1. 头像
            Black
            Windows 10 · Google Chrome
            @ 靳闯博客

            请问你是怎么改的?请具体点,我是新手,万分感谢 ::aru:cryingface::

            回复
          2. 头像
            保罗
            Windows 8.1 · Google Chrome
            @ 靳闯博客

            用户和组全都是面板默认的了,不可能是没权限啊,已经 chown -R 和 chgrp -R 一遍了

            回复
    3. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ 保罗

      程序不会判断失误,没有权限就是没有权限

      回复
  24. 头像
    姬长信
    Windows X64 · UC Browser

    成功一次然后就不行了,腾讯企业邮箱SMTP Error: data not accepted.SMTP server error: DATA END command failed Detail: Connection frequency limited

    SMTP code: 550

    回复
    1. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ 姬长信

      官方 http://service.mail.qq.com/cgi-bin/help?subtype=1&id=20022&no=1000722

      回复
  25. 头像
    欧尼酱
    Windows 10 · Google Chrome

    发送失败阿。。
    2017-07-10 18:59:46 开始发送请求:http://www.nothamor.cn/index.php/action/comment-to-mail?send=JJ0QCN8
    Socket 方式发送
    请求结束

    回复
    1. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ 欧尼酱

      参考环境bug 以及使用cdn的情况

      回复
      1. 头像
        欧尼酱
        Windows 10 · Google Chrome
        @ 王忘杰

        emmm,已经参考了环境BUG,都没有问题,至于CDN,我用了百度云,应该是不会有什么影响的吧,到socket方式发送这里就请求结束了是正常就是这样还是socket错误的原因?是kangle的环境

        回复
        1. 头像
          王忘杰 作者
          Windows 10 · Google Chrome
          @ 欧尼酱

          我用宝塔而你用kangle,那就可以认为是kangle有问题;我没有cdn而你又,那就可以认为CDN有问题,这就叫环境bug。不是都没有问题,而且都可能有问题

          回复
          1. 头像
            uniartisna
            Windows 10 · QQ Browser
            @ 王忘杰

            请问如何解决呢?手动访问也是可以的……ssl我用的是宝塔一件申请的,PHP7.1……

            回复
          2. 头像
            uniartisna
            Windows 10 · QQ Browser
            @ 王忘杰

            我也是宝塔,PHP7.1,但是还是有问题,您能远程看一下吗?
            QQ 1297867985 李小虾

            回复
            1. 头像
              王忘杰 作者
              Windows 10 · Google Chrome
              @ uniartisna

              不能

              回复
  26. 头像
    熊二哈
    Windows 7 · Google Chrome

    后台测试发送邮件没问题,回复就不能发送。
    日志提示SOCKET错误,网站使用了魔门云SSL,亲测不开启ssl回复就能发送成功

    回复
    1. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ 熊二哈

      用CDN ssl的情况没有考虑过,但是用httpCDN如果发不出去可以考虑在VPS上绑定域名hosts 域名/ip

      回复
      1. 头像
        熊二哈
        Android · QQ Browser
        @ 王忘杰

        ok,晚上看看

        回复
  27. 头像
    青珏Raingo
    Windows 10 · QQ Browser

    感谢已发信成功

    回复
  28. 头像
    年糕团子猫
    Windows XP · FireFox

    邮件发送失败:SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
    怎么破

    回复
    1. 头像
      年糕团子猫
      Windows XP · FireFox
      @ 年糕团子猫

      解决了

      回复
      1. 头像
        ZxSco
        Windows 10 · FireFox
        @ 年糕团子猫

        邮件发送失败:SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

        这个问题

        回复
  29. 头像
    漏网小鱼
    Windows 10 · QQ Browser

    sendmail无法发送嘛,提示Could not execute: /usr/sbin/sendmail -t -i

    回复
    1. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ 漏网小鱼

      这很正常啊,sendmail是个运行在linux上邮件程序,你需要自己装

      回复
      1. 头像
        漏网小鱼
        Windows 10 · QQ Browser
        @ 王忘杰

        sendmail应该装的,探针里测试能发信的。用的oneinstock一键包

        回复
        1. 头像
          王忘杰 作者
          Windows 10 · Google Chrome
          @ 漏网小鱼

          本文仅解决smtp发信相关问题,其他问题请自行搜索解决

          回复
  30. 头像
    采觅博主
    Windows 10 · FireFox

    测试能发送,评论不能发送,日志:“开始发送请求:https://www.*.*/action/comment-to-mail?send=***
    Socket 方式发送
    请求结束”
    用的是oneinstack环境配置包,我的天typecho发送邮件为什么比wordpress难...

    回复
    1. 头像
      后宫学长
      Windows 10 · Google Chrome
      @ 采觅博主

      我也是这个BUG,真是受够了...

      我是Nginx+Apache,难道是这个原因?

      回复
    2. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ 采觅博主

      参考“环境bug" 这实际上是环境的问题 而且这个插件是异步加载,对于评论没有等待时间

      回复
  31. 头像
    菜菜子
    Windows 7 · Google Chrome

    为毛我测试的时候可以收到消息,但是实际到文章评论的时候就不能用了,有点蛋疼啊,用的163的域名邮箱服务

    回复
    1. 头像
      王忘杰 作者
      Windows 10 · Google Chrome
      @ 菜菜子

      参考环境bug2 插件开启日志记录,在log能看到日志,如果提示sock错误,那是php组件的问题,换个版本编译试试

      回复