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 相关文章推荐
解决控件遮挡问题:关于有窗口元素和无窗口元素
Jan 28 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
Jul 03 PHP
如何使用php绘制在图片上的正余弦曲线
Jun 08 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
Jun 25 PHP
正确的PHP匹配UTF-8中文的正则表达式
May 13 PHP
PHP文件操作方法汇总
Jul 01 PHP
php实现的微信红包算法分析(非官方)
Sep 25 PHP
PHP基于单例模式实现的mysql类
Jan 09 PHP
PHP mysql事务问题实例分析
Jan 18 PHP
php计算多个集合的笛卡尔积实例详解
Feb 16 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
Jun 30 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
May 09 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
PHP中for循环语句的几种变型
2007/03/16 PHP
php pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
PHP安全下载文件的方法
2016/04/07 PHP
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
2017/03/25 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
2019/03/06 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
redux.js详解及基本使用
2019/05/24 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
在vue中使用console.log无效的解决
2020/08/09 Javascript
[08:47]2018国际邀请赛 OG战队举杯时刻
2018/08/29 DOTA
python实现杨氏矩阵查找
2019/03/02 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
Python PyInstaller库基本使用方法分析
2019/12/12 Python
实现Python与STM32通信方式
2019/12/18 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
2021/01/01 Python
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
成人毕业生自我鉴定
2013/10/18 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
推荐信模板
2014/05/09 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
党支部三严三实对照检查材料思想汇报
2014/09/29 职场文书
2014年图书管理员工作总结
2014/12/01 职场文书
主婚人致辞精选
2015/07/28 职场文书
python实现图片九宫格分割的示例
2021/04/25 Python
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL