WordPress无法发送邮件,配置SMTP实现邮件备份、评论邮件通知

  • A+
所属分类:未分类
摘要

wordpress设置邮件系统可以完成很多事情,比如备份数据库,邮件提醒,找回密码等等,对于管理wordpress提供了便利。

wordpress邮件系统,跟主机有着直接关系,如果主机不支持mail()函数,或者没有安装邮件系统,那么都不会收到邮件提示的。碰到这种情况,有多种方式设置邮件系统。

如果对邮件系统没有要求,那么选购主机时不用关注这方面。

一、不支持mail()函数的主机

不论是否支持mail()的主机,都可以使用第三方的邮件系统,只需要安装个插件即可,比如WP-Mail-SMTP,请按照下边的WP-Mail-SMTP中文汉化图设置,我把不常用的QQ小号邮箱作为wordpress发送接收邮件桥梁,SMTP host一栏修改为smtp.qq.com。

wordpress无法发送邮件

点击Send Test,收到一封WP Mail SMTP: Test mail to 123456@qq.com的邮件,代表邮件系统配置成功了。

PS:

WordPress一个强大的功能就是邮件提醒,也许有些博主从来没使用过邮件提醒,但这个自动发送邮件的功能确实为博主带来了便利。

1、邮件备份

安装WordPress Database Backup插件,可以自动定时备份数据库,设置备份时间频率和发送到指定的邮箱,不用为网站数据库丢失而担心。

2、密码找回

如果网站密码忘记了,可以在网站/wp-admin下,输入博客注册邮箱,收取邮件激活链接来修改密码。

3、评论回复

wordpress自带了回复功能,在评论功能中有两个管理选项,博客设置→评论→何时发送电子邮件,“有人发表评论时”,“有评论等待审核时”,勾选后,有访问者评论就会邮件通知管理员。

4、管理员回复访问者评论通知

可以安装Comment Reply Notification,当博主回复访问者评论时,可以设置是否通知访问者,这个插件有三种通知方式,一种是由访客决定是否要回应邮件通知(有勾选栏),一种由由管理者决定在什麽条件下发邮件,一种所有评论回复都发送邮件。第一种比较人性化。也可以使用代码<?php下边粘贴,修改functions.php文件记得备份functions.php。

在博客留言,向博主请教有关技巧方面的问题时,都希望第一时间得到博主的回复。

/* 开始*/

function comment_mail_notify($comment_id) {

$admin_notify = '1'; // admin 要不要收回复通知 ( '1'=要 ; '0'=不要 )

$admin_email = get_bloginfo ('admin_email'); // $admin_email 可改为你指定的 e-mail.

$comment = get_comment($comment_id);

$comment_author_email = trim($comment->comment_author_email);

$parent_id = $comment->comment_parent ? $comment->comment_parent : '';

global $wpdb;

if ($wpdb->query("Describe {$wpdb->comments} comment_mail_notify") == '')

$wpdb->query("ALTER TABLE {$wpdb->comments} ADD COLUMN comment_mail_notify TINYINT NOT NULL DEFAULT 0;");

if (($comment_author_email != $admin_email && isset($_POST['comment_mail_notify'])) || ($comment_author_email == $admin_email && $admin_notify == '1'))

$wpdb->query("UPDATE {$wpdb->comments} SET comment_mail_notify='1' WHERE comment_ID='$comment_id'");

$notify = $parent_id ? get_comment($parent_id)->comment_mail_notify : '0';

$spam_confirmed = $comment->comment_approved;

if ($parent_id != '' && $spam_confirmed != 'spam' && $notify == '1') {

$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") . '] 的留言有了回复';

$message = '

<div style="background-color:#eef2fa; border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px;">

<p>' . trim(get_comment($parent_id)->comment_author) . ', 您好!</p>

<p>您曾在《' . get_the_title($comment->comment_post_ID) . '》的留言:<br />'

. trim(get_comment($parent_id)->comment_content) . '</p>

<p>' . trim($comment->comment_author) . ' 给您的回复:<br />'

. trim($comment->comment_content) . '<br /></p>

<p>您可以点击查看回复的完整內容</p>

<p>还要再度光临 ' . get_option('blogname') . '</p>

<p>(此邮件由系统自动发送,请勿回复.)</p>

</div>';

$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 );

//echo 'mail to ', $to, '<br/> ' , $subject, $message; // for testing

}

}

add_action('comment_post', 'comment_mail_notify');

/* 自动加勾选栏 */

function add_checkbox() {

echo '<input type="checkbox" name="comment_mail_notify" id="comment_mail_notify" value="comment_mail_notify" checked="checked" style="margin-left:20px;" /><label for="comment_mail_notify">有人回复时邮件通知我</label>';

}

add_action('comment_form', 'add_checkbox');

二、云主机或VPS安装sendmail

主机当然还是支持mail()函数的好,因为第一种方法有弊端,万一网站被盗,邮箱账号密码也就被盗了。支持mail()函数的主机自带的邮件系统,但有的主机依然收不到有问题,代表sendmail类似的邮件系统没有安装好,就需要重新安装。CentOS下sendmail安装方法如下。

1、安装 sendmail,登录SSH,直接输入下边命令,回车。

yum install sendmail -ychkconfig sendmail onservice sendmail start

2、重启php-fpm。

/etc/init.d/php-fpm restart

3、查看sendmai启动状态。

/etc/init.d/sendmail status

4、如果显示stop则是停止状态,显示running 则处于运行中。

/etc/init.d/sendmail start

5、下边则是配置sendmail的绝对路径,这需要修改php.ini,可以使用WinSCP软件登录,找到/usr/local/php/etc/php.ini中如下路径代码。

;sendmail_path =

6、把它修改成下边变的代码,需要注意的是sendmail_path =前边的;也要去掉。

sendmail_path = /usr/sbin/sendmail -t -i

7、重启sendmail后,你会发现邮件功能恢复了,网站发邮件已经没有问题了,但发送起来很慢。

/etc/init.d/sendmail restart

8、配置好了,你会发现邮件慢,是因为sendmail监听并非自己的主机名,这需要配置/etc/hosts,查看hosts,会发现如下代码。

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost
::1 localhost6.localdomain6 localhost6
10.161.171.116 AY131027121035791AY13

2、需要添加云主机的hostname(添加的内容以蓝色字体标识),把云主机名AY131027121035791AY13换成自己的就行了。

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost
::1 localhost6.localdomain6 localhost6 AY131027121035791AY13
10.161.171.116 AY131027121035791AY13
localhost AY131027121035791AY13

3、重新启动sendmail,nginx,php-fpm,邮件功能就正常使用了。

service nginx restart
service php-fpm restart
service sendmail restart

4、如果嫌弃sendmail不安全或占内存,可以关闭它。如果你用的阿里云主机,可以使用自带的邮件组件,这也需要配置。

/etc/init.d/sendmail stop

一般来说,第三方邮件系统绰绰有余,只有正式的企业网、门户网、论坛网,才会使用自己的邮箱系统。

发表评论

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen: