php邮件发送类推荐 PHPMailer:smtp法
星期四, 五月 26th, 2011这里说明下 我用的是SMTP 其他方法的请继续 GOOGLE
刚拿到的时候 测试了下发信 无异常 支持HTML
但是SMTP 发送的过程中 需要先于SMTP 服务器建立连接 然后发信
这个过程可能需要1-3秒 可能会导致网页响应较长时间
所以呢. 我们建立一个表用于存放发送的邮件队列
每次发送邮件是将 邮件内容加入表中
然后 用CRON 每分钟检查下表 若存在 则 队列发送
目前在起哄网上使用中.用于发送EMAIL认证邮件
-- -- 表的结构 `qlj_sendmail` -- CREATE TABLE IF NOT EXISTS `qlj_sendmail` ( `id` int(11) NOT NULL AUTO_INCREMENT, `email` varchar(50) DEFAULT NULL, `subject` varchar(120) DEFAULT NULL, `body` text, `error` tinyint(1) NOT NULL DEFAULT '0', `dateline` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
#!/usr/local/php/bin/php -q <?php include_once('mysql.class.php'); include_once('class.phpmailer.php'); $mail = new PHPMailer(); $db = new DB; $db->connect('', '', '', ''); $mail->IsSMTP(); $mail->Host = ""; //SMTP服务器 $mail->Username = "no-reply@qihoon.com"; $mail->Password = ""; $mail->FromName = "起哄网信使"; $mail->SMTPAuth = true; $mail->From = $mail->Username; $mail->CharSet = "utf8"; $mail->Encoding = "base64"; $mail->AddAddress($sendto_email); $result=$db->query("SELECT id,email,subject,body FROM `qlj_sendmail` where error='0' LIMIT 0 , 30"); if($db->num_rows($result)<1) exit(); while ($row =$db->fetch_array($result)) { $mail->AltBody ="text/html"; $mail->Subject = $row['subject']; $mail->MsgHTML($row['body']); $mail->AddAddress($row["email"], $row["full_name"]); if(!$mail->Send()) { //$errorid[]=array(id=>$row['id'],error=>$mail->ErrorInfo);//本来想记录出错信息的.但是表是INT 不浪费字段了. $errid[]=$row['id']; } else { $okid[]=$row['id']; } $mail->ClearAddresses(); } if(count($okid)>0){ $sok=implode(',',$okid); $db->query("delete from `qlj_sendmail` where id in($sok) ;"); } if(count($errid)>0){ $serr=implode(',',$errid); $db->query("update `qlj_sendmail` set error='1' where id in($serr) ;"); } ?>
最后在 CRONTAB中 加入 每分钟的计划任务
*/1 * * * * /usr/local/php/bin/php /home/yingouqlj/send_mail.php
参考官方实例.
