I think there may be fewer friends who use the email receiving class, but there are many friends who use the mail sending class. next I will introduce the PHP mail receiving and sending class implementation program for you separately, hope to help you all. The main improvements are as follows: 1. added listMess... I think there may be fewer friends who use the email receiving class, but there are many friends who use the mail sending class. next I will introduce the PHP mail receiving and sending class implementation program for you separately, hope to help you all.
The main improvements are as follows:
1. added the listMessages method, which is used to list mail lists and has the paging function, making it easier to call:
'Date', 'direction' => 'desc') **/function listMessages ($ page = 1, $ per_page = 25, $ sort = null) {}?>
2. two encoding conversion methods are added, which are mainly used for encoding and conversion of mail-related information. The Calling method is as follows:
Connect (); $ maillist = $ obj-> listMessages (); print_r ($ maillist);?> The running result is roughly as follows: array ([res] => Array ([0] => stdClass Object ([subject] => solve PHP mail receiving class garbled problem [from] => xxx
[To] => abc [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] => Mail content )) [start] => 1 [limit] => 25 [sorting] => Array ([by] => [direction] =>) [total] => 47 [pages] => 2)
Receivemail. class. php class file, the code is as follows:
server = $strConnect; $this->username = $username; $this->password = $password; $this->email = $EmailAddress; } function connect() //Connect To the Mail Box { $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); //just to keep it consistent } $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); } //sorting! 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) // Get Header info { 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) //Get Mime type Internal Private Use { $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) //Get Part Of Message Internal Private Use { 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) /* multipart */ { 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() //Get Total Number off Unread Email In Mailbox { if (!$this->marubox) return false; $headers = imap_headers($this->marubox); return count($headers); } function GetAttach($mid, $path) // Get Atteced File from Mail { 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 . ","; } // Support for embedded attachments starts here 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) // Get Message Body { 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) // Delete That Mail { if (!$this->marubox) return false; imap_delete($this->marubox, $mid); } function close_mailbox() //Close Mail Box { 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; } }}?>
The following is a function of the php mail sending class. the code is as follows:
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. = ":". $. "rn"; if ($ cc! = "") {$ Header. = "Cc :". $ cc. "rn";} $ header. = "From: registration email. <". $ 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 ". $ 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-> lo G_write ("Disconnected from remote hostn");} return $ sent ;}?>
How can we call this class? The sample code is as follows:
Here we need an smtp server. we can register a 126 mailbox. in the code above, modify it to your registered email address, user name, and password.