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远程连接MYSQL数据库非常慢的解决方法
Jul 05 PHP
php循环检测目录是否存在并创建(循环创建目录)
Jan 06 PHP
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
Mar 29 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
May 09 PHP
php结合表单实现一些简单功能的例子
Jun 04 PHP
php中配置文件操作 如config.php文件的读取修改等操作
Jul 07 PHP
带密匙的php加密解密示例分享
Jan 29 PHP
PHP面向对象教程之自定义类
Jun 10 PHP
Yii2如何批量添加数据
May 17 PHP
PHP之将POST数据转化为字符串的实现代码
Nov 03 PHP
详解PHP处理字符串类似indexof的方法函数
Jun 11 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
Jul 20 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
Win2003+apache+PHP+SqlServer2008 配置生产环境
2014/07/29 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
JS控件的生命周期介绍
2012/10/22 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
AngularJS ng-change 指令的详解及简单实例
2016/07/30 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
React中jquery引用的实现方法
2017/09/12 jQuery
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
9102了,你还不会移动端真机调试吗
2019/03/25 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
tornado框架blog模块分析与使用
2013/11/21 Python
使用Python中PDB模块中的命令来调试Python代码的教程
2015/03/30 Python
对于Python编程中一些重用与缩减的建议
2015/04/14 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
Django模板Templates使用方法详解
2019/07/19 Python
python的slice notation的特殊用法详解
2019/12/27 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
捷克电器和DJ设备网上商店:Electronic-star
2017/07/18 全球购物
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
法学专业应届生求职信
2013/10/16 职场文书
优秀研究生自我鉴定
2013/12/04 职场文书
护理个人求职信范文
2014/01/08 职场文书
机关会计岗位职责
2014/04/08 职场文书
公共场所标语
2014/06/30 职场文书
大学生学习计划书
2014/09/15 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电