乌徒帮技术范WordPressWordPress开发 › wordpress群发邮件功能

wordpress群发邮件功能

分类:WordPress开发

今天突发奇想,希望将乌徒帮一周的精彩文章通过邮件的形式发送给已经注册了的朋友。然而wordpress并没有提供这种功能,所以我自己做了一个,实现了在后台群发邮件给所有注册成员的wordpress群发邮件功能,甚至发给非注册成员。

不过,乌徒帮做的并不过分,功能是群发,而对于独一个收到邮件的用户不是这样,他们应该感觉是点对点的邮件发送。那么到底怎么实现的呢?请看源代码:

<?php
/**
* 通过本文件向站内所有用户发送邮件
* 以下只是本站的一个实例,你需要结合库内的其他功能自己深入开发,例如开发为后台的某项发邮件功能
* 本文暂且实现在后台向所有用户发送一份本周精选的邮件
*/

function mail_to_user($to,$subject,$message){
// $to 是向哪个邮箱发信 ,$message 是发信的内容,可以是HTML $subject 这封邮件的主题
$wp_email = 'no-reply@'.preg_replace('#^www\.#','',strtolower($_SERVER['SERVER_NAME']));
$from = get_option('blogname')."<$wp_email>";
$headers = "$from \n Content-Type: text/html; charset=".get_option('blog_charset')."\n";
wp_mail($to,$subject,$message,$headers);
}

add_action('admin_menu', 'mail_to_user_admin_menu');
function mail_to_user_admin_menu(){
if(!empty($_POST)):
$page = @$_POST['page'];
$action = @$_POST['action'];
$mail_to = @$_POST['mail_to_user_who'];
$mail_subject = trim(@$_POST['mail_to_user_subject']);
$mail_content = stripcslashes(stripslashes(@$_POST['mail_to_user_content']));
$str = $mail_to;
$str = trim($str);
$str = ereg_replace("\t","",$str);
$str = ereg_replace("\r\n","",$str);
$str = ereg_replace("\r","",$str);
$str = ereg_replace("\n","",$str);
$str = ereg_replace(" ","",$str);
$mail_to = trim($str);
$mail_to = explode(';',$mail_to);
if($page == @$_GET['page'] && $action == 'send-mail'){
check_admin_referer('mail-to-user');
if($mail_subject == '' || $mail_content == '' || $mail_to == ''){
wp_redirect('admin.php?page='.$page.'&mailed=empty');
exit;
}else{
update_option('mail_to_user_subject',$mail_subject) or add_option('mail_to_user_subject',$mail_subject);
update_option('mail_to_user_content',$mail_content) or add_option('mail_to_user_content',$mail_content);
foreach($mail_to as $to){
mail_to_user($to,$mail_subject,$mail_content);
}
wp_redirect('admin.php?page='.$page.'&mailed=true');
exit;
}
}
endif;
add_users_page('群发邮件','群发邮件','edit_users','mail_to_user_admin','mail_to_user_admin');
}
function mail_to_user_admin(){
if(@$_GET['mailed'] == 'true')echo '<div id="message" class="updated fade"><p><strong>操作成功,请查看自己的邮箱检查发送是否成功,不要重新发送相同内容。</strong></p></div>';
if(@$_GET['mailed'] == 'empty')echo '<div id="message" class="updated fade"><p><strong>操作失败,请检查是否有内容为空</strong></p></div>';
global $wpdb;
$maillist = '';
$users = $wpdb->get_results("SELECT ID,user_email,display_name FROM $wpdb->users WHERE user_status = '0'");
foreach($users as $user){$maillist .= $user->display_name.'<'.$user->user_email.'>;'."\n";}
?>
<div class="wrap">
<form method="post">
<h2 class="nav-tab-wrapper">向用户发送邮件</h2>
<div class="metabox-holder">
<div class="postbox">
<div class="inside" style="border-bottom: 1px solid #CCC;margin: 0;padding: 8px 10px;">
<input type="text" class="regular-text" value="" name="mail_to_user_subject" /> 填写邮件的主题,上一个主题:<?php echo stripslashes(get_option('mail_to_user_subject')); ?>
</div>
<div class="inside" style="border-bottom: 1px solid #CCC;margin: 0;padding: 8px 10px;">
填写邮件内容,可以是HTML代码<br />
<textarea class="large-text code" style="word-break:break-all;width:80%;height:200px;" rows="4" name="mail_to_user_content"><?php echo stripcslashes(stripslashes(get_option('mail_to_user_content'))); ?></textarea>
</div>
<div class="inside" style="border-bottom: 1px solid #CCC;margin: 0;padding: 8px 10px;">
填写收件人列表,不同收件人用;(英语分号)隔开,格式如"昵称&lt;mailho@qq.com&gt;;",默认情况下列出了所有当前注册用户,你可以全选删除后自己填写<br />
<textarea class="large-text code" style="word-break:break-all;width:80%;height:100px;" rows="4" name="mail_to_user_who"><?php echo $maillist; ?></textarea>
</div>
</div>
</div>
<p class="submit">
<input name="save" type="submit" class="button-primary" value="发送" />
<input type="hidden" name="action" value="send-mail" />
<input type="hidden" name="page" value="<?php echo $_GET['page']; ?>" />
<?php wp_nonce_field('mail-to-user'); ?>
</p>
</form>
<?php
}

将这个文件mail_to_user.php include进主题目录下的functions.php中:

include_once('./mail_to_user.php');

即可在后台启用该功能。实现的大致思路如下:

1、利用wordpress邮件发送函数wp_mail实现邮件发送;

2、添加后台页面,该页面会出现在后台“用户”菜单下;

3、只设置了主题文本框,邮件内容文本框,要发送的邮件列表三个项目;

4、提交时进行一些判断,符合条件才能发送邮件;

5、发送邮件:将提交过来的邮件列表进行数组化,遍历数组,向每一个值对应的邮箱发送邮件。

源码下载:http://vdisk.weibo.com/s/4cqpp

填写个人信息,赶快回复吧!