性价比最高的香港ASP、PHP主机提供商
做网站,就上凡科建站

WordPress 使用 smtp 发送评论提醒邮件

Loading
0
Comodo SLL证书促销 - 免费ssl证书申请_ssl证书购买_ev ssl证书_https证书购买 - GDCA_数安时代

如果你空间不支持正常邮件发送功能的(小猫的空间就是如此),需要使用smtp发送评论邮件的话,那么你就可以继续看下文的教程了。

首先,下载smtpPHP工具,把里面的PHPMailer文件夹丢在你的主题目录里面。

然后再你 functions.php 文件里面加以下代码即可,记得修改对应的邮件参数即可,强烈建议使用163邮箱,因为我用163发smtp那么久没出过什么错,需要的地方我都有注释的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
 * WordPress 使用 smtp 发送评论提醒邮件
 * https://www.wpdaxue.com/wordpress-comment-mail-notify-smtp.html
 */
function comment_mail_notify_editFromClmao($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')) {
		$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; 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>您可以点击 <a href="' . htmlspecialchars(get_comment_link($parent_id)) . '">查看完整的回应内容</a></p>
				<p>欢迎再度光临 <a href="' . get_option('home') . '">' . get_option('blogname') . '</a></p>
				<p>(此邮件由系统发出, 请勿回复.)</p>
			</div>';
		header("content-type:text/html;charset=utf-8");
		ini_set("magic_quotes_runtime",0);
		require get_template_directory().'/PHPMailer/class.phpmailer.php';
		try {
			$mail = new PHPMailer(true);
			$mail->IsSMTP();
			$mail->CharSet='UTF-8';
			$mail->SMTPAuth = true;
			$mail->Port = 25;
			$mail->Host = "smtp.163.com";//邮箱smtp地址,此处以163为例
			$mail->Username = "你的邮箱账号";//你的邮箱账号
			$mail->Password = "你的邮箱密码";//你的邮箱密码
			$mail->From = "你的邮箱账号";//你的邮箱账号
			$mail->FromName = get_option('blogname');
			$to = $to;
			$mail->AddAddress($to);
			$mail->Subject = $subject;
			$mail->Body = $message;
			$mail->WordWrap = 80;
			//$mail->AddAttachment("f:/test.png"); //可以添加附件
			$mail->IsHTML(true);
			$mail->Send();
			} catch (phpmailerException $e) {
			// echo "邮件发送失败:".$e->errorMessage(); //测试的时候可以去掉此行的注释
		}
	}
}
add_action('comment_post', 'comment_mail_notify_editFromClmao');

效果图:

20140426221820

MetInfo | 最适合企业网站建设的cms系统

关于 撒哈拉的小猫

没发现国内有哪个IT论坛可以得稿费的,支持WP大学的发展,多多投稿把,欢迎访问小猫博客:blog.clmao.com

7 条评论

  1. QQ邮箱是不是只需要改服务器地址和端口就好了?为什么我不能用啊……博主求教 :cry:

  2. 研究半天了,,我是万网的空间
    万网给了一个代码不知道怎么用到网站里
    <?
    echo send_mail('xxxx@qq.com','发信测试','测试测试测试测试测试测试');

    function send_mail($to, $subject = 'No subject', $body) {
    $loc_host = "test"; //发信计算机名,可随意
    $smtp_acc = "xxx@163.com"; //Smtp认证的用户名,类似fuweng@im286.com,或者fuweng
    $smtp_pass="xxx"; //Smtp认证的密码,一般等同pop3密码
    $smtp_host="smtp.163.com"; //SMTP服务器地址,类似 smtp.tom.com
    $from="xxx@163.com"; //发信人Email地址,你的发信信箱地址
    $headers = "Content-Type: text/plain; charset=\"gb2312\"\r\nContent-Transfer-Encoding: base64";
    $lb="\r\n"; //linebreak

    $hdr = explode($lb,$headers); //解析后的hdr
    if($body) {$bdy = preg_replace("/^\./","..",explode($lb,$body));}//解析后的Body
    $smtp = array(
    //1、EHLO,期待返回220或者250
    array("EHLO ".$loc_host.$lb,"220,250","HELO error: "),
    //2、发送Auth Login,期待返回334
    array("AUTH LOGIN".$lb,"334","AUTH error:"),
    //3、发送经过Base64编码的用户名,期待返回334
    array(base64_encode($smtp_acc).$lb,"334","AUTHENTIFICATION error : "),
    //4、发送经过Base64编码的密码,期待返回235
    array(base64_encode($smtp_pass).$lb,"235","AUTHENTIFICATION error : "));
    //5、发送Mail From,期待返回250
    $smtp[] = array("MAIL FROM: “.$lb,”250”,”MAIL FROM error: “);
    //6、发送Rcpt To。期待返回250
    $smtp[] = array(“RCPT TO: “.$lb,”250”,”RCPT TO error: “);
    //7、发送DATA,期待返回354
    $smtp[] = array(“DATA”.$lb,”354″,”DATA error: “);
    //8.0、发送From
    $smtp[] = array(“From: “.$from.$lb,””,””);
    //8.2、发送To
    $smtp[] = array(“To: “.$to.$lb,””,””);
    //8.1、发送标题
    $smtp[] = array(“Subject: “.$subject.$lb,””,””);
    //8.3、发送其他Header内容
    foreach($hdr as $h) {$smtp[] = array($h.$lb,””,””);}
    //8.4、发送一个空行,结束Header发送
    $smtp[] = array($lb,””,””);
    //8.5、发送信件主体
    if($bdy) {foreach($bdy as $b) {$smtp[] = array(base64_encode($b.$lb).$lb,””,””);}}
    //9、发送“.”表示信件结束,期待返回250
    $smtp[] = array(“.”.$lb,”250″,”DATA(end)error: “);
    //10、发送Quit,退出,期待返回221
    $smtp[] = array(“QUIT”.$lb,”221″,”QUIT error: “);
    //打开smtp服务器端口
    $fp = @fsockopen($smtp_host, 25);
    if (!$fp) echo “Error: Cannot conect to “.$smtp_host.”
    “;
    while($result = @fgets($fp, 1024)){if(substr($result,3,1) == ” “) { break; }}

    $result_str=””;
    //发送smtp数组中的命令/数据
    foreach($smtp as $req){
    //发送信息
    @fputs($fp, $req[0]);
    //如果需要接收服务器返回信息,则
    if($req[1]){
    //接收信息
    while($result = @fgets($fp, 1024)){
    if(substr($result,3,1) == ” “) { break; }
    };
    if (!strstr($req[1],substr($result,0,3))){
    $result_str.=$req[2].$result.”
    “;
    }
    }
    }
    //关闭连接
    @fclose($fp);
    return $result_str;
    }
    ?>

  3. 我按照你的设置做了一遍,还是不发送邮件。

  4. 为什么我用的xiu主题,加入代码后,整个网站都无法打开

  5. wordpress自带phpmyadmin钩子
    add_action(‘phpmailer_init’, ‘mail_smtp’);

    来自 乱炖 – 研究web http://levi.cg.am

  6. 我想问下:PHPMailer 这是干嘛的?为什么我似乎没有这些文件,也能发呢?

发表评论