PHP邮件群发机实现代码
原理:
第一:申请大量的邮箱帐号腾讯的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_emailas$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");
?>
封装phpmailersenderApi.php
<?php
//请求PHPmailer类文件
error_reporting(E_ERROR);
require_once("phpmailer/phpmailer.class.php");
//写入发送结果函数
functioninfo_write($filename,$info_log)
{
$info.=$info_log;
$info.="\r\n";
$fp=fopen($filename,'a');
fwrite($fp,$info);
fclose($fp);
}
//发送Email函数
functionsmtp_mail($sendto_email,$subject,$body,$extra_hdrs,$user_name,$senderListConf,$sender=0){
$batch_no=date("Y_m_d_H");
$mail=newPHPMailer();
$mail->IsSMTP();
$sender_info=$senderListConf[$sender];
if(!$sender_info)'die发送帐号出错了..............';//sendviaSMTP
$mail->Host=$sender_info['Host'];//SMTPservers
$mail->SMTPAuth=true;//turnonSMTPauthentication
$mail->Username=$sender_info['Username'];//SMTPusername注意:普通邮件认证不需要加@域名
$mail->Password=$sender_info['Password'];//SMTPpassword
$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;//setwordwrap
//$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);//sendasHTML
$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'),
);