阿里云Workpress邮件发送问题?

阿里云还真大方,可以免费申请到2年的虚拟主机。在这之前用过美国服务器但是慢,后来又转到新网(为此我一定要吐槽一下新网,能把虚拟机做到比美国服务器访问还慢还算服了,就搭一个WP;客服在回调时直接让我换个高档的空间,滚犊子,新网永远进入我的黑名单)。

当然我们还是回归主题,阿里云的虚拟空间非常不错,访问也很快。而唯一的问题在发送邮箱这件事上很是保守,唯一能发送成功的只能是SMTP+fsockopen。如果你想完整的解决点评审核邮件通知、评论回复邮件通知评论人的话,那么你必须做几下几件事。

1、开启阿里云fsockopen

进入【主机管理平台】-【高级环境设置】-【PHP.INI设置】。

2、安装Configure SMTP插件

这一步可以帮助我们在WP里当采用SMTP发送邮件时所采用的SMTP设置信息,否则!@#¥%……&*()我也不知道怎么修改代码才能指定SMTP;总之,必须安装它。

3、强制WP采用fsockopen来创建smtp连接

修改 /wp-includes/class-smtp.php 里头的(按最新版本WP大概在276行)

$this->smtp_conn = @stream_socket_client(
    $host . ":" . $port,
    $errno,
    $errstr,
    $timeout,
    STREAM_CLIENT_CONNECT,
    $socket_context
);

$this->smtp_conn = @fsockopen($host,$port,$errno,$errstr,$timeout);

当升级WP版本时,这个步骤还得再做一遍,反正我是没招,升级WP版本时注意一下吧。

4、评论回复邮件通知评论人

我的BLOG主题是自己开发的,如果你采用的主题未实现该功能的话;那么只需要在主题所在目录下,找到 functions.php ,然后最尾部加上:

/* 所有回复都发邮件 */
function comment_mail_notify($comment_id) {
    $comment = get_comment($comment_id);
    $parent_id = $comment->comment_parent ? $comment->comment_parent : '';
    $spam_confirmed = $comment->comment_approved;
    if (($parent_id != '') && ($spam_confirmed != 'spam')) {
        $wp_email = 'no-reply@' . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME'])); //e-mail 发出点, no-reply 可改为可用的 e-mail.
        $to = trim(get_comment($parent_id)->comment_author_email);
        $subject = '您在 [' . get_option("blogname") . '] BLOG的留言有了回复';
        $message = '
            <p>' . trim(get_comment($parent_id)->comment_author) . ', 您好!</p>
            <p style="color:#999;">您曾在《' . get_the_title($comment->comment_post_ID) . '》的留言:</p>
            <p style="background-color:#fafafa; border:1px solid #eee; padding:0 15px; border-radius:5px; padding: 8px;">' . trim(get_comment($parent_id)->comment_content) . '</p>
            <p style="color:#999;">' . trim($comment->comment_author) . ' 给您的回复:</p>
            <p style="background-color:#fafafa; border:1px solid #eee; padding:0 15px; border-radius:5px; padding: 8px;">' . trim($comment->comment_content) . '</p>
            <p style="color:#999;">您可以<a href="' . htmlspecialchars(get_comment_link($parent_id,array("type" => "all"))) . '">查看回复的完整內容</a>。</p>
            <p style="color:#999;">(此邮件由系统自动发送,请勿回复.)</p>';
        $from = "From: \"" . get_option('blogname') . "\" <$wp_email>";
        $headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
        wp_mail( $to, $subject, $message, $headers );
    }
}
add_action('comment_post', 'comment_mail_notify');

5、数据库备份

找了非常多,能够备份并发送到指定邮箱中的,目前只有 WordPress Database Backup 插件。当然它有个不好就是无法连通媒体文件一起备份。哎,没有多余的FTP空间真心伤不起,而用邮箱附件来做备份真心方便,QQ邮箱给的空间还是非常大的。

WordPress 编辑器和代码高亮

在搭建WordPress时,考虑到会发布一些代码,选择编辑器和代码高亮是我这次搭建的主要部分。最受大家青睐TinyMCE Advanced+WP-Syntax组合,这两个插件做得非常棒,特别是WP-Syntax它还包含一个叫WP-Syntax-Button插件,将WP-Syntax用可视化按钮形式集成到编辑器。而最后为什么我放弃WP-Syntax主要原因是他基于服务端,很明了她将会产生非常多的垃圾代码。

最终我使用TinyMCE Advanced+Google Syntax Highlighter for WordPress(简称:GSH),她非常可爱在支持语言相对于WP-Syntax少得多,但是相信已经足够你用了,并且他是基于客户端。唯一不足的是就没有一个GSH Button直接集成到编辑器中。说真的如果你看到这篇文章那么你有福了,我已经将Button直接集成到GSH当中。

一、GSH直接集成类似WP-Syntax-Button插件做法

  1. 将WP-Syntax-Button插件包含的源码复制到google-syntax-highlighter。
  2. 将wp-syntax-button.php内容COPY到google_syntax_highlighter.php中并更改editor_plugin.js路径。
  3. 修改window.php文件,将WP-Syntax语言列表换成GSH所支持语言。
  4. 最后更改tinymce.js文件中的一句话:
    tagtext = '<pre class="' + langname + '" title="code" ';

PS:观察细心的朋友会发现,我将GSH规定的name改成title,这是为什么呢?

二、让一切完全可视化

不管是WP-Syntax-Button还是Google Syntax Highlighter for WordPress当从可视化切换到HTML再切换回来,那么就无法正常显示高亮代码,主要原因是编辑器自动过滤:name等属性,其实还只是我个人猜测,但应该没有错,我没有去考证。

所以就出现我将name属性改成title,这样就确保不管我在可视化和HTML之间如何切换都能正常高亮代码。

三、把shBrush***.js文件合成一个

做优化的朋友都知道将多个文件合并为了减HTTP请求,所以在这次修改的时候我尝试把所有跟高亮代码语言脚本合成一个,在我使用过程中并没有发现问题。

四、下载

这里提供本站的google-syntax-highlighter插件包,不想去更改的同学直接使用,直接上传到plugins目录下,到后台做个激活即可。

参考资料

  1. TinyMCE Advanced
  2. Google Syntax Highlighter for WordPress
  3. 10个Wordpress增强型编辑器
  4. 关于WordPress高亮代码插件的比较

© 2017 卡片机色彩 沪ICP备13032872号-3

Theme by cipchk

to top