| 
       我想使用邮件接收类的朋友可能比较少,但是发送邮件的类使用的朋友比较多啊,下面我来分别给大家介绍PHP邮件接收与发送类实现程序详解,希望对大家所有帮助哦。 
主要的改进如下: 
1、新增了listMessages方法,用于列表邮件列表,且带有分页功能,更加方便调用: 
	
	-  
 
	-  
 
	-  
 
	-  
 
	-  
 
	-  
 
	- function listMessages($page = 1, $per_page = 25, $sort = null){} 
 
	 
 
2、新增了两个编码转换的方法,主要用于对邮件的相关信息进行编码转换,调用方法如下: 
	
	- include("receivemail.class.php"); 
 
	- $obj = receiveMail('abc@abc.com','xxxxxx','abc@abc.com','pop.abc.com','pop3','110', false); 
 
	- $obj->connect(); 
 
	- $maillist = $obj->listMessages(); 
 
	- print_r($maillist); 
 
	- 运行结果大致如下: 
 
	- Array 
 
	- ( 
 
	-     [res] => Array 
 
	-         ( 
 
	-          [0] => stdClass Object 
 
	-           ( 
 
	-            [subject] => 解决PHP邮件接收类的乱码问题 
 
	-            [from] => xxx <xxx@phper.org.cn> 
 
	-            [to] => abc <abc@abc.com> 
 
	-            [date] => Mon, 28 Jan 2013 14:23:06 +0800 (CST) 
 
	-            [message_id] => <2afc51061915f95-00004.Richmail.00037000523146269922@xxx.com> 
 
	-                     [size] => 42259 
 
	-                     [uid] => 1 
 
	-                     [msgno] => 1 
 
	-                     [recent] => 1 
 
	-                     [flagged] => 0 
 
	-                     [answered] => 0 
 
	-                     [deleted] => 0 
 
	-                     [seen] => 0 
 
	-                     [draft] => 0 
 
	-                     [body] => 邮件内容 
 
	-           ) 
 
	-         ) 
 
	-  [start] => 1 
 
	-     [limit] => 25 
 
	-     [sorting] => Array 
 
	-         ( 
 
	-             [by] =>  
 
	-             [direction] =>  
 
	-         ) 
 
	-     [total] => 47 
 
	-     [pages] => 2 
 
	- ) 
 
	 
 
receivemail.class.php类文件,代码如下: 
	
	- <?php 
 
	- class receiveMail 
 
	- { 
 
	-  var $server=''; 
 
	-  var $username=''; 
 
	-  var $password=''; 
 
	-  
 
	-  var $marubox='';      
 
	-  
 
	-  var $email='';    
 
	-  
 
	-  function receiveMail($username,$password,$EmailAddress,$mailserver='localhost',$servertype='pop',$port='110',$ssl = false)  
 
	-  { 
 
	-   if($servertype=='imap') 
 
	-   { 
 
	-    if($port=='') $port='143';  
 
	-    $strConnect='{'.$mailserver.':'.$port. '}INBOX';  
 
	-   } 
 
	-   else 
 
	-   { 
 
	-    $strConnect='{'.$mailserver.':'.$port. '/pop3'.($ssl ? "/ssl" : "").'}INBOX';  
 
	-   } 
 
	-   $this->server   = $strConnect; 
 
	-   $this->username   = $username; 
 
	-   $this->password   = $password; 
 
	-   $this->email   = $EmailAddress; 
 
	-  } 
 
	-  
 
	-  function connect()  
 
	-  { 
 
	-   $this->marubox=@imap_open($this->server,$this->username,$this->password); 
 
	-    
 
	-   if(!$this->marubox) 
 
	-   { 
 
	-    echo "Error: Connecting to mail server"; 
 
	-    exit; 
 
	-   } 
 
	-  } 
 
	-  
 
	-  function listMessages($page = 1, $per_page = 25, $sort = null)  
 
	-   { 
 
	-        $limit = ($per_page * $page); 
 
	-        $start = ($limit - $per_page) + 1; 
 
	-        $start = ($start < 1) ? 1 : $start; 
 
	-        $limit = (($limit - $start) != ($per_page-1)) ? ($start + ($per_page-1)) : $limit; 
 
	-        $info = imap_check($this->marubox); 
 
	-        $limit = ($info->Nmsgs < $limit) ? $info->Nmsgs : $limit; 
 
	-  
 
	-        if(true === is_array($sort))  
 
	-        { 
 
	-            $sorting = array( 
 
	-                'direction' => array( 'asc' => 0, 'desc' => 1), 
 
	-                'by'        => array('date' => SORTDATE, 'arrival' => SORTARRIVAL, 
 
	-                                    'from' => SORTFROM, 'subject' => SORTSUBJECT, 'size' => SORTSIZE)); 
 
	-            $by = (true === is_int($by = $sorting['by'][$sort[0]])) ? $by : $sorting['by']['date']; 
 
	-            $direction = (true === is_int($direction = $sorting['direction'][$sort[1]])) ? $direction : $sorting['direction']['desc']; 
 
	-            $sorted = imap_sort($this->marubox, $by, $direction); 
 
	-            $msgs = array_chunk($sorted, $per_page); 
 
	-            $msgs = $msgs[$page-1]; 
 
	-        } 
 
	-        else  
 
	-        { 
 
	-            $msgs = range($start, $limit);  
 
	-        } 
 
	-        $result = imap_fetch_overview($this->marubox, implode($msgs, ','), 0); 
 
	-        if(false === is_array($result)) return false; 
 
	-  
 
	-        foreach ($result as $k => $r) 
 
	-        { 
 
	-          $result[$k]->subject = $this->_imap_utf8($r->subject); 
 
	-          $result[$k]->from = $this->_imap_utf8($r->from); 
 
	-          $result[$k]->to = $this->_imap_utf8($r->to); 
 
	-    $result[$k]->body = $this->getBody($r->msgno); 
 
	-        } 
 
	-         
 
	-        if(true === is_array($sorted))  
 
	-        { 
 
	-            $tmp_result = array(); 
 
	-            foreach($result as $r) 
 
	-            { 
 
	-              $tmp_result[$r->msgno] = $r; 
 
	-            } 
 
	-  
 
	-            $result = array(); 
 
	-            foreach($msgs as $msgno)  
 
	-            { 
 
	-     $result[] = $tmp_result[$msgno]; 
 
	-            } 
 
	-        } 
 
	-  
 
	-        $return = array('res' => $result, 
 
	-                        'start' => $start, 
 
	-                        'limit' => $limit, 
 
	-                        'sorting' => array('by' => $sort[0], 'direction' => $sort[1]), 
 
	-                        'total' => imap_num_msg($this->marubox)); 
 
	-        $return['pages'] = ceil($return['total'] / $per_page); 
 
	-        return $return; 
 
	-    } 
 
	-  
 
	-  function getHeaders($mid)  
 
	-  { 
 
	-   if(!$this->marubox) 
 
	-    return false; 
 
	-   $mail_header=imap_header($this->marubox,$mid); 
 
	-   $sender=$mail_header->from[0]; 
 
	-   $sender_replyto=$mail_header->reply_to[0]; 
 
	-   if(strtolower($sender->mailbox)!='mailer-daemon' && strtolower($sender->mailbox)!='postmaster') 
 
	-   { 
 
	-    $mail_details=array( 
 
	-      'from'=>strtolower($sender->mailbox).'@'.$sender->host, 
 
	-      'fromName'=>$sender->personal, 
 
	-      'toOth'=>strtolower($sender_replyto->mailbox).'@'.$sender_replyto->host, 
 
	-      'toNameOth'=>$sender_replyto->personal, 
 
	-      'subject'=>$mail_header->subject, 
 
	-      'to'=>strtolower($mail_header->toaddress) 
 
	-     ); 
 
	-   } 
 
	-   return $mail_details; 
 
	-  } 
 
	-  
 
	-  function get_mime_type(&$structure)  
 
	-  {  
 
	-   $primary_mime_type = array("TEXT", "MULTIPART", "MESSAGE", "APPLICATION", "AUDIO", "IMAGE", "VIDEO", "OTHER");  
 
	-    
 
	-   if($structure->subtype) {  
 
	-    return $primary_mime_type[(int) $structure->type] . '/' . $structure->subtype;  
 
	-   }  
 
	-   return "TEXT/PLAIN";  
 
	-  }  
 
	-  
 
	-  function get_part($stream, $msg_number, $mime_type, $structure = false, $part_number = false)  
 
	-  {  
 
	-   if(!$structure) {  
 
	-    $structure = imap_fetchstructure($stream, $msg_number);  
 
	-   }  
 
	-   if($structure) {  
 
	-    if($mime_type == $this->get_mime_type($structure)) 
 
	-    {  
 
	-     if(!$part_number)  
 
	-     {  
 
	-      $part_number = "1";  
 
	-     }  
 
	-     $text = imap_fetchbody($stream, $msg_number, $part_number);  
 
	-     if($structure->encoding == 3)  
 
	-     {  
 
	-      return imap_base64($text);  
 
	-     }  
 
	-     else if($structure->encoding == 4)  
 
	-     {  
 
	-      return imap_qprint($text);  
 
	-     }  
 
	-     else 
 
	-     {  
 
	-      return $text;  
 
	-     }  
 
	-    }  
 
	-    if($structure->type == 1)   
 
	-    {  
 
	-     while(list($index, $sub_structure) = each($structure->parts)) 
 
	-     {  
 
	-      if($part_number) 
 
	-      {  
 
	-       $prefix = $part_number . '.';  
 
	-      }  
 
	-      $data = $this->get_part($stream, $msg_number, $mime_type, $sub_structure, $prefix . ($index + 1));  
 
	-      if($data) 
 
	-      {  
 
	-       return $data;  
 
	-      }  
 
	-     }  
 
	-    }  
 
	-   }  
 
	-   return false;  
 
	-  }  
 
	-  
 
	-  function getTotalMails()  
 
	-  { 
 
	-   if(!$this->marubox) 
 
	-    return false; 
 
	-   $headers=imap_headers($this->marubox); 
 
	-   return count($headers); 
 
	-  } 
 
	-  function GetAttach($mid,$path)  
 
	-  { 
 
	-   if(!$this->marubox) 
 
	-   { 
 
	-    return false; 
 
	-   } 
 
	-   $struckture = imap_fetchstructure($this->marubox,$mid); 
 
	-   $ar=""; 
 
	-   if($struckture->parts) 
 
	-         { 
 
	-    foreach($struckture->parts as $key => $value) 
 
	-    { 
 
	-     $enc=$struckture->parts[$key]->encoding; 
 
	-     if($struckture->parts[$key]->ifdparameters) 
 
	-     { 
 
	-      $name=$struckture->parts[$key]->dparameters[0]->value; 
 
	-      $message = imap_fetchbody($this->marubox,$mid,$key+1); 
 
	-      switch ($enc) 
 
	-      { 
 
	-       case 0: 
 
	-        $message = imap_8bit($message); 
 
	-        break; 
 
	-       case 1: 
 
	-        $message = imap_8bit ($message); 
 
	-        break; 
 
	-       case 2: 
 
	-        $message = imap_binary ($message); 
 
	-        break; 
 
	-       case 3: 
 
	-        $message = imap_base64 ($message);  
 
	-        break; 
 
	-       case 4: 
 
	-        $message = quoted_printable_decode($message); 
 
	-        break; 
 
	-       case 5: 
 
	-        $message = $message; 
 
	-        break; 
 
	-      } 
 
	-      $fp=fopen($path.$name,"w"); 
 
	-      fwrite($fp,$message); 
 
	-      fclose($fp); 
 
	-      $ar=$ar.$name.","; 
 
	-     } 
 
	-      
 
	-     if($struckture->parts[$key]->parts) 
 
	-     { 
 
	-      foreach($struckture->parts[$key]->parts as $keyb => $valueb) 
 
	-      { 
 
	-       $enc=$struckture->parts[$key]->parts[$keyb]->encoding; 
 
	-       if($struckture->parts[$key]->parts[$keyb]->ifdparameters) 
 
	-       { 
 
	-        $name=$struckture->parts[$key]->parts[$keyb]->dparameters[0]->value; 
 
	-        $partnro = ($key+1).".".($keyb+1); 
 
	-        $message = imap_fetchbody($this->marubox,$mid,$partnro); 
 
	-        switch ($enc) 
 
	-        { 
 
	-         case 0: 
 
	-            $message = imap_8bit($message); 
 
	-          break; 
 
	-         case 1: 
 
	-            $message = imap_8bit ($message); 
 
	-          break; 
 
	-         case 2: 
 
	-            $message = imap_binary ($message); 
 
	-          break; 
 
	-         case 3: 
 
	-            $message = imap_base64 ($message); 
 
	-          break; 
 
	-         case 4: 
 
	-            $message = quoted_printable_decode($message); 
 
	-          break; 
 
	-         case 5: 
 
	-            $message = $message; 
 
	-          break; 
 
	-        } 
 
	-        $fp=fopen($path.$name,"w"); 
 
	-        fwrite($fp,$message); 
 
	-        fclose($fp); 
 
	-        $ar=$ar.$name.","; 
 
	-       } 
 
	-      } 
 
	-     }     
 
	-    } 
 
	-   } 
 
	-   $ar=substr($ar,0,(strlen($ar)-1)); 
 
	-   return $ar; 
 
	-  } 
 
	-  
 
	-  function getBody($mid)  
 
	-  { 
 
	-   if(!$this->marubox) 
 
	-   { 
 
	-    return false; 
 
	-   } 
 
	-   $body = $this->get_part($this->marubox, $mid, "TEXT/HTML"); 
 
	-   if ($body == "") 
 
	-   { 
 
	-    $body = $this->get_part($this->marubox, $mid, "TEXT/PLAIN"); 
 
	-   } 
 
	-   if ($body == "")  
 
	-   { 
 
	-    return ""; 
 
	-   } 
 
	-   return $this->_iconv_utf8($body); 
 
	-  } 
 
	-  
 
	-  function deleteMails($mid)  
 
	-  { 
 
	-   if(!$this->marubox) 
 
	-    return false; 
 
	-  
 
	-   imap_delete($this->marubox,$mid); 
 
	-  } 
 
	-  
 
	-  function close_mailbox()  
 
	-  { 
 
	-   if(!$this->marubox) 
 
	-    return false; 
 
	-   imap_close($this->marubox,CL_EXPUNGE); 
 
	-  } 
 
	-  
 
	-  function _imap_utf8($text) 
 
	-  { 
 
	-   if(preg_match('/=?([a-zA-z0-9-]+)?(.*)?=/i', $text, $match)) 
 
	-   { 
 
	-    $text = imap_utf8($text); 
 
	-    if(strtolower(substr($match[1], 0, 2)) == 'gb') 
 
	-    { 
 
	-     $text = iconv('gbk', 'utf-8', $text); 
 
	-    } 
 
	-    return $text; 
 
	-   } 
 
	-   return $this->_iconv_utf8($text); 
 
	-  } 
 
	-  
 
	-  function _iconv_utf8($text) 
 
	-  { 
 
	-   $s1 = iconv('gbk', 'utf-8', $text); 
 
	-   $s0 = iconv('utf-8', 'gbk', $s1); 
 
	-   if($s0 == $text) 
 
	-   { 
 
	-    return $s1; 
 
	-   } 
 
	-   else 
 
	-   { 
 
	-    return $text; 
 
	-   } 
 
	-  } 
 
	- } 
 
	 
 
下面是一个php邮件发送的类的一个函数,代码如下: 
	
	- function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "") 
 
	-     { 
 
	-         $mail_from = $this->get_address($this->strip_comment($from)); 
 
	-         $body = ereg_replace("(^|(rn))(.)", "1.3", $body); 
 
	-         $header = "MIME-Version:1.0rn"; 
 
	-         if($mailtype=="HTML"){ 
 
	-             $header .= "Content-Type:text/htmlrn"; 
 
	-         } 
 
	-         $header .= "To: ".$to."rn"; 
 
	-         if ($cc != "") { 
 
	-             $header .= "Cc: ".$cc."rn"; 
 
	-         } 
 
	-         $header .= "From: 报名邮件.<".$from.">rn"; 
 
	-         $header .= "Subject: ".$subject."rn"; 
 
	-         $header .= $additional_headers; 
 
	-         $header .= "Date: ".date("r")."rn"; 
 
	-         $header .= "X-Mailer:By Redhat (PHP/".phpversion().")rn"; 
 
	-   $utfheader=iconv("UTF-8","GB2312",$header); 
 
	-         list($msec, $sec) = explode(" ", microtime()); 
 
	-         $header .= "Message-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">rn"; 
 
	-         $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, $utfheader, $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 hostn"); 
 
	-         } 
 
	-         return $sent; 
 
	-     } 
 
	 
 
我们如何调用这个类呢?示例代码如下: 
	
	- include("sendmail.php"); 
 
	-  ####################--发邮件--#################### 
 
	-  $smtpserver  =  "smtp.126.com"; 
 
	-  $smtpserverport = 25; 
 
	-  $smtpusermail  =  "test@126.com"; 
 
	-  $smtpuser   =  "test"; 
 
	-  $smtppass   =  "123456"; 
 
	-  $smtpemailto  =  "dianzhong@126.com"; 
 
	-  $mailsubject  =  $username.'报名!'; 
 
	-  $mailtime  = date("Y-m-d H:i:s"); 
 
	-  $mailbody   =  $content; 
 
	-  $utfmailbody = iconv("UTF-8","GB2312",$mailbody); 
 
	-  $mailtype   =  "HTML"; 
 
	 
 
在这里需要一个smtp服务器,我们可以注册一个126的邮箱, 在上面的代码中,修改成你自己注册的邮箱地址和用户名、密码即可。
      
      (责任编辑:admin) |