亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

PHP郵件接收與發送類實現程序詳解

2024-05-04 21:47:38
字體:
來源:轉載
供稿:網友

我想使用郵件接收類的朋友可能比較少,但是發送郵件的類使用的朋友比較多啊,下面我來分別給大家介紹PHP郵件接收與發送類實現程序詳解,希望對大家所有幫助哦。

主要的改進如下:

1、新增了listMessages方法,用于列表郵件列表,且帶有分頁功能,更加方便調用:

  1. /** 
  2.  * listMessages - 獲取郵件列表 
  3.  * @param $page - 第幾頁 
  4.  * @param $per_page - 每頁顯示多少封郵件 
  5.  * @param $sort - 郵件排序,如:array('by' => 'date', 'direction' => 'desc') 
  6.  * */ 
  7. function listMessages($page = 1, $per_page = 25, $sort = null){} 

2、新增了兩個編碼轉換的方法,主要用于對郵件的相關信息進行編碼轉換,調用方法如下:

  1. include("receivemail.class.php"); 
  2. $obj = receiveMail('abc@abc.com','xxxxxx','abc@abc.com','pop.abc.com','pop3','110', false); 
  3. $obj->connect(); 
  4. $maillist = $obj->listMessages(); 
  5. print_r($maillist); 
  6. 運行結果大致如下: 
  7. Array 
  8.     [res] => Array 
  9.         ( 
  10.          [0] => stdClass Object 
  11.           ( 
  12.            [subject] => 解決PHP郵件接收類的亂碼問題 
  13.            [from] => xxx <xxx@phper.org.cn> 
  14.            [to] => abc <abc@abc.com> 
  15.            [date] => Mon, 28 Jan 2013 14:23:06 +0800 (CST) 
  16.            [message_id] => <2afc51061915f95-00004.Richmail.00037000523146269922@xxx.com> 
  17.                     [size] => 42259 
  18.                     [uid] => 1 
  19.                     [msgno] => 1 
  20.                     [recent] => 1 
  21.                     [flagged] => 0 
  22.                     [answered] => 0 
  23.                     [deleted] => 0 
  24.                     [seen] => 0 
  25.                     [draft] => 0 
  26.                     [body] => 郵件內容 
  27.           ) 
  28.         ) 
  29.  [start] => 1 
  30.     [limit] => 25 
  31.     [sorting] => Array 
  32.         ( 
  33.             [by] =>  
  34.             [direction] =>  
  35.         ) 
  36.     [total] => 47 
  37.     [pages] => 2 

receivemail.class.php類文件,代碼如下:

  1. <?php 
  2. class receiveMail 
  3.  var $server=''
  4.  var $username=''
  5.  var $password=''
  6.  
  7.  var $marubox='';      
  8.  
  9.  var $email='';    
  10.  
  11.  function receiveMail($username,$password,$EmailAddress,$mailserver='localhost',$servertype='pop',$port='110',$ssl = false) //Constructure 
  12.  { 
  13.   if($servertype=='imap'
  14.   { 
  15.    if($port==''$port='143';  
  16.    $strConnect='{'.$mailserver.':'.$port'}INBOX';  
  17.   } 
  18.   else 
  19.   { 
  20.    $strConnect='{'.$mailserver.':'.$port'/pop3'.($ssl ? "/ssl" : "").'}INBOX';  
  21.   } 
  22.   $this->server   = $strConnect
  23.   $this->username   = $username
  24.   $this->password   = $password
  25.   $this->email   = $EmailAddress
  26.  } 
  27.  
  28.  function connect() //Connect To the Mail Box 
  29.  { 
  30.   $this->marubox=@imap_open($this->server,$this->username,$this->password); 
  31.    
  32.   if(!$this->marubox) 
  33.   { 
  34.    echo "Error: Connecting to mail server"
  35.    exit
  36.   } 
  37.  } 
  38.  
  39.  function listMessages($page = 1, $per_page = 25, $sort = null)  
  40.   { 
  41.        $limit = ($per_page * $page); 
  42.        $start = ($limit - $per_page) + 1; 
  43.        $start = ($start < 1) ? 1 : $start
  44.        $limit = (($limit - $start) != ($per_page-1)) ? ($start + ($per_page-1)) : $limit
  45.        $info = imap_check($this->marubox); 
  46.        $limit = ($info->Nmsgs < $limit) ? $info->Nmsgs : $limit
  47.  
  48.        if(true === is_array($sort))  
  49.        { 
  50.            $sorting = array
  51.                'direction' => array'asc' => 0, 'desc' => 1), 
  52.                'by'        => array('date' => SORTDATE, 'arrival' => SORTARRIVAL, 
  53.                                    'from' => SORTFROM, 'subject' => SORTSUBJECT, 'size' => SORTSIZE)); 
  54.            $by = (true === is_int($by = $sorting['by'][$sort[0]])) ? $by : $sorting['by']['date']; 
  55.            $direction = (true === is_int($direction = $sorting['direction'][$sort[1]])) ? $direction : $sorting['direction']['desc']; 
  56.            $sorted = imap_sort($this->marubox, $by$direction); 
  57.            $msgs = array_chunk($sorted$per_page); 
  58.            $msgs = $msgs[$page-1]; 
  59.        } 
  60.        else  
  61.        { 
  62.            $msgs = range($start$limit); //just to keep it consistent 
  63.        } 
  64.        $result = imap_fetch_overview($this->marubox, implode($msgs','), 0); 
  65.        if(false === is_array($result)) return false; 
  66.  
  67.        foreach ($result as $k => $r
  68.        { 
  69.          $result[$k]->subject = $this->_imap_utf8($r->subject); 
  70.          $result[$k]->from = $this->_imap_utf8($r->from); 
  71.          $result[$k]->to = $this->_imap_utf8($r->to); 
  72.    $result[$k]->body = $this->getBody($r->msgno); 
  73.        } 
  74.        //sorting! 
  75.        if(true === is_array($sorted))  
  76.        { 
  77.            $tmp_result = array(); 
  78.            foreach($result as $r
  79.            { 
  80.              $tmp_result[$r->msgno] = $r
  81.            } 
  82.  
  83.            $result = array(); 
  84.            foreach($msgs as $msgno)  
  85.            { 
  86.     $result[] = $tmp_result[$msgno]; 
  87.            } 
  88.        } 
  89.  
  90.        $return = array('res' => $result
  91.                        'start' => $start
  92.                        'limit' => $limit
  93.                        'sorting' => array('by' => $sort[0], 'direction' => $sort[1]), 
  94.                        'total' => imap_num_msg($this->marubox)); 
  95.        $return['pages'] = ceil($return['total'] / $per_page); 
  96.        return $return
  97.    } 
  98.  
  99.  function getHeaders($mid// Get Header info 
  100.  { 
  101.   if(!$this->marubox) 
  102.    return false; 
  103.   $mail_header=imap_header($this->marubox,$mid); 
  104.   $sender=$mail_header->from[0]; 
  105.   $sender_replyto=$mail_header->reply_to[0]; 
  106.   if(strtolower($sender->mailbox)!='mailer-daemon' && strtolower($sender->mailbox)!='postmaster'
  107.   { 
  108.    $mail_details=array
  109.      'from'=>strtolower($sender->mailbox).'@'.$sender->host, 
  110.      'fromName'=>$sender->personal, 
  111.      'toOth'=>strtolower($sender_replyto->mailbox).'@'.$sender_replyto->host, 
  112.      'toNameOth'=>$sender_replyto->personal, 
  113.      'subject'=>$mail_header->subject, 
  114.      'to'=>strtolower($mail_header->toaddress) 
  115.     ); 
  116.   } 
  117.   return $mail_details
  118.  } 
  119.  
  120.  function get_mime_type(&$structure//Get Mime type Internal Private Use 
  121.  {  
  122.   $primary_mime_type = array("TEXT""MULTIPART""MESSAGE""APPLICATION""AUDIO""IMAGE""VIDEO""OTHER");  
  123.    
  124.   if($structure->subtype) {  
  125.    return $primary_mime_type[(int) $structure->type] . '/' . $structure->subtype;  
  126.   }  
  127.   return "TEXT/PLAIN";  
  128.  }  
  129.  
  130.  function get_part($stream$msg_number$mime_type$structure = false, $part_number = false) //Get Part Of Message Internal Private Use 
  131.  {  
  132.   if(!$structure) {  
  133.    $structure = imap_fetchstructure($stream$msg_number);  
  134.   }  
  135.   if($structure) {  
  136.    if($mime_type == $this->get_mime_type($structure)) 
  137.    {  
  138.     if(!$part_number)  
  139.     {  
  140.      $part_number = "1";  
  141.     }  
  142.     $text = imap_fetchbody($stream$msg_number$part_number);  
  143.     if($structure->encoding == 3)  
  144.     {  
  145.      return imap_base64($text);  
  146.     }  
  147.     else if($structure->encoding == 4)  
  148.     {  
  149.      return imap_qprint($text);  
  150.     }  
  151.     else 
  152.     {  
  153.      return $text;  
  154.     }  
  155.    }  
  156.    if($structure->type == 1) /* multipart */  
  157.    {  
  158.     while(list($index$sub_structure) = each($structure->parts)) 
  159.     {  
  160.      if($part_number
  161.      {  
  162.       $prefix = $part_number . '.';  
  163.      }  
  164.      $data = $this->get_part($stream$msg_number$mime_type$sub_structure$prefix . ($index + 1));  
  165.      if($data
  166.      {  
  167.       return $data;  
  168.      }  
  169.     }  
  170.    }  
  171.   }  
  172.   return false;  
  173.  }  
  174.  
  175.  function getTotalMails() //Get Total Number off Unread Email In Mailbox 
  176.  { 
  177.   if(!$this->marubox) 
  178.    return false; 
  179.   $headers=imap_headers($this->marubox); 
  180.   return count($headers); 
  181.  } 
  182.  function GetAttach($mid,$path// Get Atteced File from Mail 
  183.  { 
  184.   if(!$this->marubox) 
  185.   { 
  186.    return false; 
  187.   } 
  188.   $struckture = imap_fetchstructure($this->marubox,$mid); 
  189.   $ar=""
  190.   if($struckture->parts) 
  191.         { 
  192.    foreach($struckture->parts as $key => $value
  193.    { 
  194.     $enc=$struckture->parts[$key]->encoding; 
  195.     if($struckture->parts[$key]->ifdparameters) 
  196.     { 
  197.      $name=$struckture->parts[$key]->dparameters[0]->value; 
  198.      $message = imap_fetchbody($this->marubox,$mid,$key+1); 
  199.      switch ($enc
  200.      { 
  201.       case 0: 
  202.        $message = imap_8bit($message); 
  203.        break
  204.       case 1: 
  205.        $message = imap_8bit ($message); 
  206.        break
  207.       case 2: 
  208.        $message = imap_binary ($message); 
  209.        break
  210.       case 3: 
  211.        $message = imap_base64 ($message);  
  212.        break
  213.       case 4: 
  214.        $message = quoted_printable_decode($message); 
  215.        break
  216.       case 5: 
  217.        $message = $message
  218.        break
  219.      } 
  220.      $fp=fopen($path.$name,"w"); 
  221.      fwrite($fp,$message); 
  222.      fclose($fp); 
  223.      $ar=$ar.$name.","
  224.     } 
  225.     // Support for embedded attachments starts here 
  226.     if($struckture->parts[$key]->parts) 
  227.     { 
  228.      foreach($struckture->parts[$key]->parts as $keyb => $valueb
  229.      { 
  230.       $enc=$struckture->parts[$key]->parts[$keyb]->encoding; 
  231.       if($struckture->parts[$key]->parts[$keyb]->ifdparameters) 
  232.       { 
  233.        $name=$struckture->parts[$key]->parts[$keyb]->dparameters[0]->value; 
  234.        $partnro = ($key+1).".".($keyb+1); 
  235.        $message = imap_fetchbody($this->marubox,$mid,$partnro); 
  236.        switch ($enc
  237.        { 
  238.         case 0: 
  239.            $message = imap_8bit($message); 
  240.          break
  241.         case 1: 
  242.            $message = imap_8bit ($message); 
  243.          break
  244.         case 2: 
  245.            $message = imap_binary ($message); 
  246.          break
  247.         case 3: 
  248.            $message = imap_base64 ($message); 
  249.          break
  250.         case 4: 
  251.            $message = quoted_printable_decode($message); 
  252.          break
  253.         case 5: 
  254.            $message = $message
  255.          break
  256.        } 
  257.        $fp=fopen($path.$name,"w"); 
  258.        fwrite($fp,$message); 
  259.        fclose($fp); 
  260.        $ar=$ar.$name.","
  261.       } 
  262.      } 
  263.     }     
  264.    } 
  265.   } 
  266.   $ar=substr($ar,0,(strlen($ar)-1)); 
  267.   return $ar
  268.  } 
  269.  
  270.  function getBody($mid// Get Message Body 
  271.  { 
  272.   if(!$this->marubox) 
  273.   { 
  274.    return false; 
  275.   } 
  276.   $body = $this->get_part($this->marubox, $mid"TEXT/HTML"); 
  277.   if ($body == ""
  278.   { 
  279.    $body = $this->get_part($this->marubox, $mid"TEXT/PLAIN"); 
  280.   } 
  281.   if ($body == "")  
  282.   { 
  283.    return ""
  284.   } 
  285.   return $this->_iconv_utf8($body); 
  286.  } 
  287.  
  288.  function deleteMails($mid// Delete That Mail 
  289.  { 
  290.   if(!$this->marubox) 
  291.    return false; 
  292.  
  293.   imap_delete($this->marubox,$mid); 
  294.  } 
  295.  
  296.  function close_mailbox() //Close Mail Box 
  297.  { 
  298.   if(!$this->marubox) 
  299.    return false; 
  300.   imap_close($this->marubox,CL_EXPUNGE); 
  301.  } 
  302.  
  303.  function _imap_utf8($text
  304.  { 
  305.   if(preg_match('/=?([a-zA-z0-9-]+)?(.*)?=/i'$text$match)) 
  306.   { 
  307.    $text = imap_utf8($text); 
  308.    if(strtolower(substr($match[1], 0, 2)) == 'gb'
  309.    { 
  310.     $text = iconv('gbk''utf-8'$text); 
  311.    } 
  312.    return $text
  313.   } 
  314.   return $this->_iconv_utf8($text); 
  315.  } 
  316.  
  317.  function _iconv_utf8($text
  318.  { 
  319.   $s1 = iconv('gbk''utf-8'$text); 
  320.   $s0 = iconv('utf-8''gbk'$s1); 
  321.   if($s0 == $text
  322.   { 
  323.    return $s1
  324.   } 
  325.   else 
  326.   { 
  327.    return $text
  328.   } 
  329.  } 

下面是一個php郵件發送的類的一個函數,代碼如下:

  1. function sendmail($to$from$subject = ""$body = ""$mailtype$cc = ""$bcc = ""$additional_headers = ""
  2.     { 
  3.         $mail_from = $this->get_address($this->strip_comment($from)); 
  4.         $body = ereg_replace("(^|(rn))(.)""1.3"$body); 
  5.         $header = "MIME-Version:1.0rn"
  6.         if($mailtype=="HTML"){ 
  7.             $header .= "Content-Type:text/htmlrn"
  8.         } 
  9.         $header .= "To: ".$to."rn"
  10.         if ($cc != "") { 
  11.             $header .= "Cc: ".$cc."rn"
  12.         } 
  13.         $header .= "From: 報名郵件.<".$from.">rn"
  14.         $header .= "Subject: ".$subject."rn"
  15.         $header .= $additional_headers
  16.         $header .= "Date: ".date("r")."rn"
  17.         $header .= "X-Mailer:By Redhat (PHP/".phpversion().")rn"
  18.   $utfheader=iconv("UTF-8","GB2312",$header); 
  19.         list($msec$sec) = explode(" ", microtime()); 
  20.         $header .= "Message-ID: <".date("YmdHis"$sec).".".($msec*1000000).".".$mail_from.">rn"
  21.         $TO = explode(","$this->strip_comment($to)); 
  22.         if ($cc != "") { 
  23.             $TO = array_merge($TOexplode(","$this->strip_comment($cc))); 
  24.         } 
  25.         if ($bcc != "") { 
  26.             $TO = array_merge($TOexplode(","$this->strip_comment($bcc))); 
  27.         } 
  28.         $sent = TRUE; 
  29.         foreach ($TO as $rcpt_to) { 
  30.             $rcpt_to = $this->get_address($rcpt_to); 
  31.             if (!$this->smtp_sockopen($rcpt_to)) { 
  32.                 $this->log_write("Error: Cannot send email to ".$rcpt_to."n"); 
  33.                 $sent = FALSE; 
  34.                 continue
  35.             } 
  36.             if ($this->smtp_send($this->host_name, $mail_from$rcpt_to$utfheader$body)) { 
  37.                 $this->log_write("E-mail has been sent to <".$rcpt_to.">n"); 
  38.             } else { 
  39.                 $this->log_write("Error: Cannot send email to <".$rcpt_to.">n"); 
  40.                 $sent = FALSE; 
  41.             } 
  42.             fclose($this->sock); 
  43.             $this->log_write("Disconnected from remote hostn"); 
  44.         } 
  45.         return $sent
  46.     } 

我們如何調用這個類呢?示例代碼如下:

  1. include("sendmail.php");//發送郵件類 
  2.  ####################--發郵件--#################### 
  3.  $smtpserver  =  "smtp.126.com";//SMTP服務器 
  4.  $smtpserverport = 25;//SMTP服務器端口 
  5.  $smtpusermail  =  "test@126.com";//SMTP服務器的用戶郵箱 
  6.  $smtpuser   =  "test";//SMTP服務器的用戶帳號 
  7.  $smtppass   =  "123456";//SMTP服務器的用戶密碼 
  8.  $smtpemailto  =  "dianzhong@126.com";//發送給誰 
  9.  $mailsubject  =  $username.'報名!';//郵件主題 
  10.  $mailtime  = date("Y-m-d H:i:s"); 
  11.  $mailbody   =  $content;//郵件內容 
  12.  $utfmailbody = iconv("UTF-8","GB2312",$mailbody);//轉換郵件編碼 
  13.  $mailtype   =  "HTML";//郵件格式(HTML/TXT),TXT為文本郵件 
在這里需要一個smtp服務器,我們可以注冊一個126的郵箱, 在上面的代碼中,修改成你自己注冊的郵箱地址和用戶名、密碼即可。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩成人在线播放| 国产精品一区av| 成人福利视频网| 日韩在线观看你懂的| 日韩精品中文字幕有码专区| 97免费视频在线| 国产精品美女www| 亚洲人成在线免费观看| 欧美精品激情视频| 精品欧美国产一区二区三区| 91久久久久久久| 中文字幕在线国产精品| 91午夜在线播放| 亚洲美女性生活视频| 欧美大成色www永久网站婷| 中文字幕无线精品亚洲乱码一区| 97国产一区二区精品久久呦| 色噜噜狠狠狠综合曰曰曰| 国产中文日韩欧美| 亚洲一区二区三区视频| 在线成人免费网站| 亚洲国产私拍精品国模在线观看| 欧美电影在线观看网站| 国产精品精品一区二区三区午夜版| 日韩av在线精品| 91麻豆国产精品| 日韩资源在线观看| 亚洲欧美另类在线观看| 日本电影亚洲天堂| 精品视频在线导航| 亚洲无亚洲人成网站77777| 在线激情影院一区| 欧美激情影音先锋| 黑人巨大精品欧美一区免费视频| www.xxxx欧美| 亚洲男人天堂网| 欧美黑人巨大xxx极品| 第一福利永久视频精品| 欧美精品久久一区二区| 久久成人综合视频| 欧美亚洲伦理www| 亚洲淫片在线视频| 成人在线国产精品| 日本午夜精品理论片a级appf发布| 精品久久久久久久久国产字幕| 日韩中文字幕国产| 亚洲天堂男人天堂女人天堂| 欧美午夜片欧美片在线观看| 岛国av一区二区在线在线观看| 国产成人精品国内自产拍免费看| 久久琪琪电影院| 亚洲人在线视频| 在线看福利67194| 欧美大人香蕉在线| 日韩在线视频二区| 成人黄色影片在线| 97激碰免费视频| 亚洲精品在线看| 日韩欧美第一页| 久久久免费观看| 亚洲三级 欧美三级| 57pao国产成人免费| 日韩**中文字幕毛片| 亚洲日本欧美日韩高观看| 欧美大尺度电影在线观看| 欧美激情手机在线视频| 亚洲精品videossex少妇| 国产精品久久电影观看| 在线成人中文字幕| 成人国产精品一区| 亚洲a∨日韩av高清在线观看| 4438全国成人免费| 欧美激情久久久| 久久91亚洲精品中文字幕| 国产福利视频一区二区| 久久久久中文字幕| 亚洲精品乱码久久久久久金桔影视| 亚洲伊人成综合成人网| 欧美一级视频在线观看| 夜夜嗨av一区二区三区四区| 国产精品9999| 亚洲成人三级在线| 久久久久久久久91| 国产色婷婷国产综合在线理论片a| 日韩电影网在线| 成人精品福利视频| 精品国产电影一区| 26uuu国产精品视频| 亚洲日本aⅴ片在线观看香蕉| 国产精品91免费在线| 久久久久久高潮国产精品视| 国产精品成人一区| 欧美日韩爱爱视频| 国产一区二区三区在线观看视频| 亚洲性av网站| 尤物tv国产一区| 欧美精品久久一区二区| 久久久久久欧美| 奇米影视亚洲狠狠色| 777午夜精品福利在线观看| 欧美电影免费观看| 亚洲视频免费一区| 久久精品国产久精国产一老狼| 色婷婷av一区二区三区久久| 欧美激情一区二区三级高清视频| 美女扒开尿口让男人操亚洲视频网站| 国产精品99久久久久久www| 国产精品一区二区久久国产| 亚洲一区二区久久| 欧美精品videossex性护士| 国产精品视频一区二区高潮| 另类视频在线观看| 欧美日韩国产精品专区| 亚洲桃花岛网站| 97人人爽人人喊人人模波多| 亚洲最大av在线| 欧美成人网在线| 精品香蕉在线观看视频一| 欧美成aaa人片在线观看蜜臀| 亚洲第一福利网| 7m精品福利视频导航| 久久精品国产成人| 国产精品久久久久久久久久尿| 在线观看免费高清视频97| 日韩精品视频在线| 国产欧美在线视频| 国语自产精品视频在线看一大j8| 亚洲国产高潮在线观看| 日本精品久久中文字幕佐佐木| 中文字幕一精品亚洲无线一区| 亚洲影视九九影院在线观看| www.久久撸.com| 亚洲精品久久久久久下一站| 高清日韩电视剧大全免费播放在线观看| 国产精品视频自在线| 一区二区三区四区视频| 日韩免费观看在线观看| 深夜福利一区二区| 国产成人精品综合久久久| 色99之美女主播在线视频| 久久精品91久久香蕉加勒比| 国产精品福利片| 97色在线观看免费视频| 国产亚洲欧美日韩一区二区| 欧美成年人在线观看| 91精品91久久久久久| 亚洲一区二区免费| 久久国产精品久久久久久久久久| 不卡av日日日| 欧美性猛交xxxx免费看漫画| 国产成+人+综合+亚洲欧美丁香花| 亚洲成人网av| 久久999免费视频| 韩国国内大量揄拍精品视频| 国产成人综合精品在线| 久久久999国产精品| 亚洲国产91精品在线观看| 1769国内精品视频在线播放| 日韩av在线不卡| 国产精品久久在线观看| 国产精品一区电影| 日本精品视频在线播放| 欧美一级大片在线观看| 欧美在线视频a|