原理:
第一:申请大量的邮箱帐号 腾讯的 126的 163的 新浪的 雅虎的 谷歌的 等等提供smtp服务的
第二:收集你要发送邮件的邮件列表
第三:遍历邮件列表,每一个邮件发送邮件
第四:用linux下定时脚本后台运行 我跑了两天 哈哈 ,因为为了尽可能的保证每一个都发送成功
原理是很简单,但是其中还是遇到很多的问题。
第一:邮件失败的问题,我这里采用两个方式解决,第一把大量的那些邮箱帐号依次去发送,直到成功。然后每次发送500封邮件 后把发送邮箱列表随机打散(避免一个持续失败)。
我用的是phpmailer
多的不多说了上代码了。phpmailer 大家自己搜索下载吧
入口脚本:就是linux 执行的 mail_001.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<?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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
<?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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?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' ),
);
|