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 相关文章推荐
PHP4实际应用经验篇(2)
Oct 09 PHP
array_multisort实现PHP多维数组排序示例讲解
Jan 04 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
Aug 03 PHP
PHP删除目录及目录下所有文件的方法详解
Jun 06 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
Jul 03 PHP
微信扫描二维码登录网站代码示例
Dec 30 PHP
PHP临时文件的安全性分析
Jul 04 PHP
Zend Framework实现将session存储在memcache中的方法
Mar 22 PHP
PHP面向对象程序设计组合模式与装饰模式详解
Dec 02 PHP
thinkPHP5.0框架API优化后的友好性分析
Mar 17 PHP
PHP并发查询MySQL的实例代码
Aug 09 PHP
PHP实现生成模糊图片的方法示例
Dec 21 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
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
php引用传值实例详解学习
2013/11/06 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
Knockoutjs快速入门(经典)
2012/12/24 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
2013/12/13 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
jQuery实现鼠标滑过点击事件音效试听
2015/08/31 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
js+html制作简单验证码
2017/02/16 Javascript
jQuery Chosen通用初始化
2017/03/07 Javascript
深入理解JavaScript继承的多种方式和优缺点
2017/05/12 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
深入探究node之Transform
2017/07/20 Javascript
Vuex中mutations与actions的区别详解
2018/03/01 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
python 统计列表中不同元素的数量方法
2018/06/29 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
Python3中的bytes和str类型详解
2019/05/02 Python
Python爬虫之urllib基础用法教程
2019/10/12 Python
pip install 使用国内镜像的方法示例
2020/04/03 Python
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
JAVA程序员面试题
2012/10/03 面试题
国际贸易专业个人职业生涯规划
2014/02/15 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
购房委托书范本
2014/09/18 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
如何利用python创作字符画
2022/06/25 Python