最近有客户问模板兔怎么后台群发邮件,然而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;">
填写收件人列表,不同收件人用;(英语分号)隔开,格式如"昵称<mailho@qq.com>;",默认情况下列出了所有当前注册用户,你可以全选删除后自己填写<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、发送邮件:将提交过来的邮件列表进行数组化,遍历数组,向每一个值对应的邮箱发送邮件。
0 个评论