php--sendMail

<html>
<body>
<?php  
  class   smtp  
  {  
  /*   Public   Variables   */  
  var   $smtp_port;  
  var   $time_out;  
  var   $host_name;  
  var   $log_file;  
  var   $relay_host;  
  var   $debug;  
  var   $auth;  
  var   $user;  
  var   $pass;  
   
  /*   Private   Variables   */    
  var   $sock;  
   
  /*   Constractor   */  
  function   smtp($relay_host   =   "",   $smtp_port   =   25,$auth   =   false,$user,$pass)  
  {  
  $this->debug   =   FALSE;  
  $this->smtp_port   =   $smtp_port;  
  $this->relay_host   =   $relay_host;  
  $this->time_out   =   30;   //is   used   in   fsockopen()    
  $this->auth   =   $auth;//auth  
  $this->user   =   $user;  
  $this->pass   =   $pass;  
  $this->host_name   =   "localhost";   //is   used   in   HELO   command    
  $this->log_file   =   "";  
  $this->sock   =   FALSE;  
  }  
   
  /*   Main   Function   */  
  function   sendmail($to,   $from,   $subject   =   "",   $body   =   "",   $mailtype,   $cc   =   "",   $bcc   =   "",   $additional_headers   =   "")  
  {  
  $mail_from   =   $this->get_address($this->strip_comment($from));  
  $body   =   ereg_replace("(^|(\r\n))(\.)",   "\1.\3",   $body);  
  $header   .=   "MIME-Version:1.0\r\n";  
  if($mailtype=="HTML")  
  {  
  $header   .=   "Content-Type:text/html\r\n";  
  }  
  $header   .=   "To:   ".$to."\r\n";  
  if   ($cc   !=   "")    
  {  
  $header   .=   "Cc:   ".$cc."\r\n";  
  }  
  $header   .=   "From:   $from<".$from.">\r\n";  
  $header   .=   "Subject:   ".$subject."\r\n";  
  $header   .=   $additional_headers;  
  $header   .=   "Date:   ".date("r")."\r\n";  
  $header   .=   "X-Mailer:By   Redhat   (PHP/".phpversion().")\r\n";  
  list($msec,   $sec)   =   explode("   ",   microtime());  
  $header   .=   "Message-ID:   <".date("YmdHis",   $sec).".".($msec*1000000).".".$mail_from.">\r\n";  
  $TO   =   explode(",",   $this->strip_comment($to));  
   
  if   ($cc   !=   "")    
  {  
  $TO   =   array_merge($TO,   explode(",",   $this->strip_comment($cc)));  
  }  
  if   ($bcc   !=   "")    
  {  
  $TO   =   array_merge($TO,   explode(",",   $this->strip_comment($bcc)));  
  }  
  $sent   =   TRUE;  
  foreach   ($TO   as   $rcpt_to)    
  {  
  $rcpt_to   =   $this->get_address($rcpt_to);  
  if   (!$this->smtp_sockopen($rcpt_to))    
  {  
  $this->log_write("Error:   Cannot   send   email   to   ".$rcpt_to."\n");  
  $sent   =   FALSE;  
  continue;  
  }  
  if   ($this->smtp_send($this->host_name,   $mail_from,   $rcpt_to,   $header,   $body))    
  {  
  $this->log_write("E-mail   has   been   sent   to   <".$rcpt_to.">\n");  
  }    
  else    
  {  
  $this->log_write("Error:   Cannot   send   email   to   <".$rcpt_to.">\n");  
  $sent   =   FALSE;  
  }  
  fclose($this->sock);  
  $this->log_write("Disconnected   from   remote   host\n");  
  }  
  return   $sent;  
  }  
   
  /*   Private   Functions   */  
  function   smtp_send($helo,   $from,   $to,   $header,   $body   =   "")  
  {  
  if   (!$this->smtp_putcmd("HELO",   $helo))    
  {  
  return   $this->smtp_error("sending   HELO   command");  
  }  
   
  #auth  
  if($this->auth)  
  {  
  if   (!$this->smtp_putcmd("AUTH   LOGIN",   base64_encode($this->user)))    
  {  
  return   $this->smtp_error("sending   HELO   command");  
  }  
  if   (!$this->smtp_putcmd("",   base64_encode($this->pass)))    
  {  
  return   $this->smtp_error("sending   HELO   command");  
  }  
  }  
  if   (!$this->smtp_putcmd("MAIL",   "FROM:<".$from.">"))    
  {  
  return   $this->smtp_error("sending   MAIL   FROM   command");  
  }  
  if   (!$this->smtp_putcmd("RCPT",   "TO:<".$to.">"))    
  {  
  return   $this->smtp_error("sending   RCPT   TO   command");  
  }  
  if   (!$this->smtp_putcmd("DATA"))  
  {  
  return   $this->smtp_error("sending   DATA   command");  
  }  
  if   (!$this->smtp_message($header,   $body))    
  {  
  return   $this->smtp_error("sending   message");  
  }  
  if   (!$this->smtp_eom())  
  {  
  return   $this->smtp_error("sending   <CR><LF>.<CR><LF>   [EOM]");  
  }  
  if   (!$this->smtp_putcmd("QUIT"))    
  {  
  return   $this->smtp_error("sending   QUIT   command");  
  }  
  return   TRUE;  
  }  
   
  function   smtp_sockopen($address)  
  {  
  if   ($this->relay_host   ==   "")    
  {  
  return   $this->smtp_sockopen_mx($address);  
  }    
  else  
  {  
  return   $this->smtp_sockopen_relay();  
  }  
  }  
   
  function   smtp_sockopen_relay()  
  {  
  $this->log_write("Trying   to   ".$this->relay_host.":".$this->smtp_port."\n");  
  $this->sock   =   @fsockopen($this->relay_host,   $this->smtp_port,   $errno,   $errstr,   $this->time_out);  
  if   (!($this->sock   &&   $this->smtp_ok()))    
  {  
  $this->log_write("Error:   Cannot   connenct   to   relay   host   ".$this->relay_host."\n");  
  $this->log_write("Error:   ".$errstr."   (".$errno.")\n");  
  return   FALSE;  
  }  
  $this->log_write("Connected   to   relay   host   ".$this->relay_host."\n");  
  return   TRUE;;  
  }  
   
  function   smtp_sockopen_mx($address)  
  {  
  $domain   =   ereg_replace("^.+@([^@]+)$",   "\1",   $address);  
  if   (!@getmxrr($domain,   $MXHOSTS))    
  {  
  $this->log_write("Error:   Cannot   resolve   MX   \"".$domain."\"\n");  
  return   FALSE;  
  }  
  foreach   ($MXHOSTS   as   $host)    
  {  
  $this->log_write("Trying   to   ".$host.":".$this->smtp_port."\n");  
  $this->sock   =   @fsockopen($host,   $this->smtp_port,   $errno,   $errstr,   $this->time_out);  
  if   (!($this->sock   &&   $this->smtp_ok()))    
  {  
  $this->log_write("Warning:   Cannot   connect   to   mx   host   ".$host."\n");  
  $this->log_write("Error:   ".$errstr."   (".$errno.")\n");  
  continue;  
  }  
  $this->log_write("Connected   to   mx   host   ".$host."\n");  
  return   TRUE;  
  }  
  $this->log_write("Error:   Cannot   connect   to   any   mx   hosts   (".implode(",   ",   $MXHOSTS).")\n");  
  return   FALSE;  
  }  
   
  function   smtp_message($header,   $body)  
  {  
  fputs($this->sock,   $header."\r\n".$body);  
  $this->smtp_debug(">   ".str_replace("\r\n",   "\n".">   ",   $header."\n>   ".$body."\n>   "));  
  return   TRUE;  
  }  
   
  function   smtp_eom()  
  {  
  fputs($this->sock,   "\r\n.\r\n");  
  $this->smtp_debug(".   [EOM]\n");  
  return   $this->smtp_ok();  
  }  
   
  function   smtp_ok()  
  {  
  $response   =   str_replace("\r\n",   "",   fgets($this->sock,   512));  
  $this->smtp_debug($response."\n");  
  if   (!ereg("^[23]",   $response))    
  {  
  fputs($this->sock,   "QUIT\r\n");  
  fgets($this->sock,   512);  
  $this->log_write("Error:   Remote   host   returned   \"".$response."\"\n");  
  return   FALSE;  
  }  
  return   TRUE;  
  }  
   
  function   smtp_putcmd($cmd,   $arg   =   "")  
  {  
  if   ($arg   !=   "")    
  {  
  if($cmd=="")    
  {  
  $cmd   =   $arg;  
  }  
  else  
  {  
  $cmd   =   $cmd."   ".$arg;  
  }  
  }  
  fputs($this->sock,   $cmd."\r\n");  
  $this->smtp_debug(">   ".$cmd."\n");  
  return   $this->smtp_ok();  
  }  
   
  function   smtp_error($string)  
  {  
  $this->log_write("Error:   Error   occurred   while   ".$string.".\n");  
  return   FALSE;  
  }  
   
  function   log_write($message)  
  {  
  $this->smtp_debug($message);  
  if   ($this->log_file   ==   "")  
  {  
  return   TRUE;  
  }  
  $message   =   date("M   d   H:i:s   ").get_current_user()."[".getmypid()."]:   ".$message;  
  if   (!@file_exists($this->log_file)   ||   !($fp   =   @fopen($this->log_file,   "a")))    
  {  
  $this->smtp_debug("Warning:   Cannot   open   log   file   \"".$this->log_file."\"\n");  
  return   FALSE;;  
  }  
  flock($fp,   LOCK_EX);  
  fputs($fp,   $message);  
  fclose($fp);  
  return   TRUE;  
  }  
   
  function   strip_comment($address)  
  {  
  $comment   =   "\([^()]*\)";  
  while   (ereg($comment,   $address))    
  {  
  $address   =   ereg_replace($comment,   "",   $address);  
  }  
  return   $address;  
  }  
   
  function   get_address($address)  
  {  
  $address   =   ereg_replace("([   \t\r\n])+",   "",   $address);  
  $address   =   ereg_replace("^.*<(.+)>.*$",   "\1",   $address);  
  return   $address;  
  }  
   
  function   smtp_debug($message)  
  {  
  if   ($this->debug)    
  {  
  echo   $message;  
  }  
  }  
   
  }  
 
 
  $smtpserver   =   "smtp.126.com";//SMTP服务器  
  $smtpserverport   =   25;//SMTP服务器端口  
  $smtpusermail   =   "##########@126.com";//SMTP服务器的用户邮箱  
  $smtpemailto   =   "###########@qq.com";//发送给谁  
  $smtpuser   =   "EEEEEEEEEE@126.com";//SMTP服务器的用户帐号  
  $smtppass   =   "#########";//SMTP服务器的用户密码  
  $mailsubject   =   "中文";//邮件主题  
  $mailbody   =   "<h1>中文rgser</h1>";//邮件内容  
  $mailtype   =   "HTML";//邮件格式(HTML/TXT),TXT为文本邮件  
  ##########################################  
  $smtp   =   new   smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.  
  $smtp->debug   =   TRUE;//是否显示发送的调试信息  
  $smtp->sendmail($smtpemailto,   $smtpusermail,   $mailsubject,   $mailbody,   $mailtype);  

  ?>


</body>
</html>

posted on 2012-05-02 22:13 青蛙學堂 阅读(688) 评论(0)  编辑 收藏 引用 所属分类: PHP

只有注册用户登录后才能发表评论。
<2012年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(7)

随笔分类

随笔档案

收藏夹

青蛙学堂

最新评论

阅读排行榜

评论排行榜