PHP邮件群发机实现代码


Posted in PHP onFebruary 16, 2016

原理:
第一:申请大量的邮箱帐号 腾讯的 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'), 
);
PHP 相关文章推荐
无数据库的详细域名查询程序PHP版(1)
Oct 09 PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
Aug 12 PHP
PHP代码保护--Zend Guard的使用详解
Jun 03 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
Jun 26 PHP
Yii框架登录流程分析
Dec 03 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
Mar 18 PHP
php函数连续调用实例分析
Jul 30 PHP
PHP实现搜索相似图片
Sep 22 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
Dec 23 PHP
php简单实现单态设计模式的方法分析
Jul 28 PHP
利用PHP如何统计Nginx日志的User Agent数据
Mar 06 PHP
PHP查找一列有序数组是否包含某值的方法
Feb 07 PHP
46 个非常有用的 PHP 代码片段
Feb 16 #PHP
HTML中嵌入PHP的简单方法
Feb 16 #PHP
thinkphp3.2点击刷新生成验证码
Feb 16 #PHP
PHP模拟post提交数据方法汇总
Feb 16 #PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
Feb 16 #PHP
PHP的Yii框架入门使用教程
Feb 15 #PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
Feb 15 #PHP
You might like
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
PHP获取文件相对路径的方法
2015/02/26 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
jQuery 页面 Mask实现代码
2010/01/09 Javascript
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
深入浅析JavaScript中的作用域和上下文
2016/03/26 Javascript
js+html5实现canvas绘制椭圆形图案的方法
2016/05/21 Javascript
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
2018/04/22 Python
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
python读取文件名并改名字的实例
2019/01/07 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
手写一个python迭代器过程详解
2019/08/27 Python
python使用ctypes调用扩展模块的实例方法
2020/01/28 Python
Python环境下安装PyGame和PyOpenGL的方法
2020/03/25 Python
TensorFLow 数学运算的示例代码
2020/04/21 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
世界首屈一指的钓鱼用品商店:TackleDirect
2016/07/26 全球购物
如何查找网页漏洞
2016/06/22 面试题
小学红领巾广播稿(3篇)
2014/09/13 职场文书
万能检讨书开头与结尾怎么写
2015/02/17 职场文书
立案决定书范文
2015/06/24 职场文书
忆童年!用Python实现愤怒的小鸟游戏
2021/06/07 Python
在 SQL 语句中处理 NULL 值的方法
2021/06/07 SQL Server
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python