PHP SMTP发送邮件函数 - 逝去的青春

PHP SMTP发送邮件函数

作者:jao 发布于:2012-12-16 0:17 分类:PHP教程

001 <?php
002 bfconfig = Array (
003     'sitename' => '网站名称',
004         );
005       
006     $mail = Array (
007         'state' => 1,
008         'server' => 'smtp.abc.com',
009         'port' => 25,
010         'auth' => 1,
011         'username' => 'admin@abc.com',
012         'password' => '123456',
013         'charset' => 'gbk',
014         'mailfrom' => 'admin@abc.com'
015         );
016       
017     function sendmail($mail_to$mail_subject$mail_message) {
018       
019         global $mail$bfconfig;
020       
021      date_default_timezone_set('PRC');
022       
023         $mail_subject '=?'.$mail['charset'].'?B?'.base64_encode($mail_subject).'?=';
024         $mail_message chunk_split(base64_encode(preg_replace("/(^|(\r\n))(\.)/""\1.\3",$mail_message)));
025       
026         $headers .= "";
027         $headers .= "MIME-Version:1.0\r\n";
028         $headers .= "Content-type:text/html\r\n";
029         $headers .= "Content-Transfer-Encoding: base64\r\n";
030         $headers .= "From: ".$bfconfig['sitename']."<".$mail['mailfrom'].">\r\n";
031         $headers .= "Date: ".date("r")."\r\n";
032         list($msec$sec) = explode(" ", microtime());
033         $headers .= "Message-ID: <".date("YmdHis"$sec).".".($msec * 1000000).".".$mail['mailfrom'].">\r\n";
034       
035         if(!$fp fsockopen($mail['server'], $mail['port'], $errno$errstr, 30)) {
036             exit("CONNECT - Unable to connect to the SMTP server");
037         }
038       
039         stream_set_blocking($fp, true);
040       
041         $lastmessage fgets($fp, 512);
042         if(substr($lastmessage, 0, 3) != '220') {
043             exit("CONNECT - ".$lastmessage);
044         }
045       
046         fputs($fp, ($mail['auth'] ? 'EHLO' 'HELO')." befen\r\n");
047         $lastmessage fgets($fp, 512);
048         if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) {
049             exit("HELO/EHLO - ".$lastmessage);
050         }
051       
052         while(1) {
053             if(substr($lastmessage, 3, 1) != '-' || empty($lastmessage)) {
054                 break;
055             }
056             $lastmessage fgets($fp, 512);
057         }
058       
059         if($mail['auth']) {
060             fputs($fp"AUTH LOGIN\r\n");
061             $lastmessage fgets($fp, 512);
062             if(substr($lastmessage, 0, 3) != 334) {
063                 exit($lastmessage);
064             }
065       
066             fputs($fpbase64_encode($mail['username'])."\r\n");
067             $lastmessage fgets($fp, 512);
068             if(substr($lastmessage, 0, 3) != 334) {
069                 exit("AUTH LOGIN - ".$lastmessage);
070             }
071       
072             fputs($fpbase64_encode($mail['password'])."\r\n");
073             $lastmessage fgets($fp, 512);
074             if(substr($lastmessage, 0, 3) != 235) {
075                 exit("AUTH LOGIN - ".$lastmessage);
076             }
077       
078             $email_from $mail['mailfrom'];
079         }
080       
081         fputs($fp"MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/""\\1"$email_from).">\r\n");
082         $lastmessage fgets($fp, 512);
083         if(substr($lastmessage, 0, 3) != 250) {
084             fputs($fp"MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/""\\1"$email_from).">\r\n");
085             $lastmessage fgets($fp, 512);
086             if(substr($lastmessage, 0, 3) != 250) {
087                 exit("MAIL FROM - ".$lastmessage);
088             }
089         }
090       
091         foreach(explode(','$mail_toas $touser) {
092             $touser = trim($touser);
093             if($touser) {
094                 fputs($fp"RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/""\\1"$touser).">\r\n");
095                 $lastmessage fgets($fp, 512);
096                 if(substr($lastmessage, 0, 3) != 250) {
097                     fputs($fp"RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/""\\1",$touser).">\r\n");
098                     $lastmessage fgets($fp, 512);
099                     exit("RCPT TO - ".$lastmessage);
100                 }
101             }
102         }
103       
104         fputs($fp"DATA\r\n");
105         $lastmessage fgets($fp, 512);
106         if(substr($lastmessage, 0, 3) != 354) {
107             exit("DATA - ".$lastmessage);
108         }
109   
110         fputs($fp$headers);
111         fputs($fp"To: ".$mail_to."\r\n");
112         fputs($fp"Subject: $mail_subject\r\n");
113         fputs($fp"\r\n\r\n");
114         fputs($fp"$mail_message\r\n.\r\n");
115         $lastmessage fgets($fp, 512);
116         if(substr($lastmessage, 0, 3) != 250) {
117             exit("END - ".$lastmessage);
118         }
119       
120         fputs($fp"QUIT\r\n");
121 ?>

标签: php教程 PHP

et_highlighter
Copyright © 2012-2013 逝去的青春 蜀ICP备13029051号-1 手机版 安全联盟 Theme by Admin73 sitemap