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和ACCESS写聊天室(八)
Oct 09 PHP
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
Jun 08 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
Mar 02 PHP
PHP 图片上传代码
Sep 13 PHP
PHP基本语法总结
Sep 06 PHP
windows下配置php5.5开发环境及开发扩展
Dec 25 PHP
php中fsockopen用法实例
Jan 05 PHP
WordPress中邮件的一些修改和自定义技巧
Dec 15 PHP
php实现表单提交上传文件功能
May 28 PHP
浅谈Laravel模板实体转义带来的坑
Oct 22 PHP
PDO实现学生管理系统
Mar 21 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
May 14 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
数据库相关问题
2006/10/09 PHP
PHP教程 预定义变量
2009/10/23 PHP
PHP Stream_*系列函数
2010/08/01 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
php服务器的系统详解
2019/10/12 PHP
Laravel配合jwt使用的方法实例
2020/10/25 PHP
学习ExtJS fit布局使用说明
2009/10/08 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
手写的一个兼容各种浏览器的javascript getStyle函数(获取元素的样式)
2014/06/06 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
vue.js中toast用法及使用toast弹框的实例代码
2018/08/27 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
Vue父子之间值传递的实例教程
2020/07/02 Javascript
python实现dict版图遍历示例
2014/02/19 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
Python面向对象之类和对象实例详解
2018/12/10 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
库房管理员岗位职责
2015/02/12 职场文书
2015政治思想表现评语
2015/03/25 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server