当前位置: 移动技术网 > IT编程>开发语言>PHP > PHP邮件群发机实现代码

PHP邮件群发机实现代码

2017年12月12日  | 移动技术网IT编程  | 我要评论

本色影吧,微信公共号平台登录,叶弘新浪博客

原理:
第一:申请大量的邮箱帐号 腾讯的 126的 163的 新浪的 雅虎的 谷歌的 等等提供smtp服务的
第二:收集你要发送邮件的邮件列表
第三:遍历邮件列表,每一个邮件发送邮件
第四:用linux下定时脚本后台运行 我跑了两天 哈哈 ,因为为了尽可能的保证每一个都发送成功

原理是很简单,但是其中还是遇到很多的问题。

第一:邮件失败的问题,我这里采用两个方式解决,第一把大量的那些邮箱帐号依次去发送,直到成功。然后每次发送500封邮件 后把发送邮箱列表随机打散(避免一个持续失败)。
我用的是phpmailer
多的不多说了上代码了。phpmailer 大家自己搜索下载吧

入口脚本:就是linux 执行的 mail_001.php

<?php 
define('root_path',dirname(__file__)); 
require_once 'library/senderapi.php'; //发送邮件接口 
require_once 'config/senderlistconf.php'; //发送邮件帐号列表 
//读取文本 邮件地址 
shuffle($senderlistconf); 
$filename = "data/email.txt"; 
$fp = fopen($filename,"r"); 
$contents = fread($fp,filesize($filename)); 
$list_email=explode("\r\n",$contents);   
$len=count($list_email); 
fclose($fp); 
//邮件内容为网页上的内容 
$htmlcontent = file_get_contents('http://taobao.1080www.com'); 
// 参数说明(发送到, 邮件主题, 邮件内容, 附加信息, 用户名) 
foreach($list_email as $key=>$value) 
{ 
 $value = trim($value); 
 $rs=explode("@",$value); 
 $user_name = $rs['0']; 
 smtp_mail($value, '秋季补水化妆品_秋季护肤皮肤保养_秋天皮肤干燥怎么办-小常识',$htmlcontent, 'http://taobao.1080www.com/', $user_name,$senderlistconf,0); 
 sleep(3); 
 if($key%200 == 0 && $key>0) 
 { 
  shuffle($senderlistconf); //每200次 吧发送邮件顺序打乱一次 
 } 
} 
die('sendingover.................'."\r\n"); 
?>


封装phpmailer senderapi.php

<?php 
// 请求 phpmailer类 文件 
error_reporting(e_error); 
require_once("phpmailer/phpmailer.class.php"); 
// 写入发送结果函数 
function info_write($filename,$info_log) 
{ 
 $info.= $info_log; 
 $info.="\r\n"; 
 $fp = fopen ($filename,'a'); 
 fwrite($fp,$info); 
 fclose($fp); 
} 
//发送email函数 
function smtp_mail ( $sendto_email, $subject, $body, $extra_hdrs, $user_name,$senderlistconf,$sender=0) { 
 $batch_no = date("y_m_d_h"); 
 $mail = new phpmailer(); 
 $mail->issmtp(); 
 $sender_info = $senderlistconf[$sender]; 
 if(!$sender_info) 'die 发送帐号出错了..............'; // send via smtp 
 $mail->host = $sender_info['host'];      // smtp servers 
 $mail->smtpauth = true;        // turn on smtp authentication 
 $mail->username = $sender_info['username'];       // smtp username  注意:普通邮件认证不需要加 @域名 
 $mail->password = $sender_info['password'];       // smtp password 
 $mail->from = $sender_info['username'];      // 发件人邮箱 
 $mail->fromname = "淘宝推荐---taobao";     // 发件人 ,比如 中国资金管理网 
 $mail->charset = "utf-8";       // 这里指定字符集! 
 $mail->encoding = "base64"; 
 $mail->addaddress($sendto_email,$user_name);  // 收件人邮箱和姓名 
 $mail->addreplyto("ken@cscsws.com","淘宝推荐"); 
  
 //$mail->wordwrap = 50; // set word wrap 
 //$mail->addattachment("/var/tmp/file.tar.gz");             // attachment 附件1 
 //$mail->addattachment("/home/www/images/zhuanti/qiujibushui/qiujibushui_attache.jpg", "new.jpg");           //附件2 
 $mail->ishtml(true);        // send as html 
 $mail->subject = $subject;       
 
 // 邮件内容  可以直接发送html文件 
 $mail->body = $body; 
 $mail->altbody ="text/html"; 
 if($mail->send()) 
 { 
  info_write(root_path.'/log/'.$batch_no."ok.txt","$user_name 发送成功"); 
 } 
 else
 { 
  info_write(root_path.'/log/'.$batch_no."falied.txt","$user_name 失败,发送账号".$sender_info['username'].",错误信息$mail->errorinfo"); 
  if($senderlistconf[$sender+1]) 
  { 
   $sender = smtp_mail ( $sendto_email, $subject, $body, $extra_hdrs, $user_name,$senderlistconf,($sender+1)); 
  } 
 } 
 return $sender; 
}


发送邮件列表示例 senderlistconf.php

<?php 
$senderlistconf = array( 
 
  //搜狐邮箱 
  array('host'=>'smtp.sohu.com','username'=>'youemail@sohu.com','password'=>'yourpassword'), 
  //雅虎邮箱 
  array('host'=>'smtp.mail.yahoo.com','username'=>'youemail@yahoo.cn','password'=>'yourpassword'), 
  //163邮箱 
  array('host'=>'smtp.163.com','username'=>'youemail@163.com','password'=>'yourpassword'), 
  //126邮箱 
  array('host'=>'smtp.126.com','username'=>'youemail@126.com','password'=>'yourpassword'), 
  //qq邮箱 
  array('host'=>'smtp.qq.com','username'=>'youemail@qq.com','password'=>'yourpassword'), 
  //谷歌邮箱 
  array('host'=>'smtp.gmail.com','username'=>'youemail@gmail.com','password'=>'yourpassword'), 
  //139邮箱 
  array('host'=>'smtp.139.com','username'=>'youemail@139.com','password'=>'yourpassword'), 
  //qq邮箱 
  array('host'=>'smtp.qq.com','username'=>'youemail@qq.com','password'=>'(yourpassword'), 
);

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网