PHP 利用Mail_MimeDecode類提取郵件信息

轉載鏈接:http://blog.csdn.net/laijingyao881201/article/details/5512693

重點為one_mail函數。利用Mail_mimeDecode類從郵件中提取郵件頭郵件正文

<?php
header("content-type:text/html; charset=UTF-8");
/** record kid words and insert into database* user by sending email to publication kid words**/
include 'POP3.php';
include 'email_class.php';
include 'Mail_mimeDecode.php';
//include 'include/compatible.php';
include 'include/extend_common.php';
//include '../../htdocs/include/extend_common.php';
define('POST_FROM_EMAIL', 1);
define('DATABASE_CONNECTION_ERROR', 2); //數據庫連接失敗錯誤
define('EMAIL_CONNECTION_ERROR', 3); //郵箱連接失敗錯誤
define('ACCOUNT_ERROR', 4); //郵箱的賬號錯誤
define('SIGN_EMAIL_ERROR', 5); //郵件標記刪除錯誤
define('DELELET_ERROR', 6); //刪除郵件錯誤
define('INSERT_ERROR', 7); //插入數據失敗錯誤class mail_data {function mail_data() {include 'config.php';$mail_log = fopen("mail_log.txt", "a+");$conn = @ mysql_connect($db_host, $db_user, $db_password);if ($conn) {mysql_select_db('t', $conn);mysql_query("set names utf8");$pop3 = new Net_POP3();//判斷連接是否成功if ($pop3->connect($host, 110)) {//判斷登入是否成功if ($pop3->login($user, $password) === true) {$list = $pop3->_cmdList();$sum = $pop3->_cmdStat();//每次取多少郵件$step = 2;$r = 0;//先對郵箱取$step郵件for ($n = 0; $n < $sum[0]; $n += $step) {$t = 0;$users = array ();$mail = array ();$offset = ($sum[0] - $n) < $step ? $sum[0] - $n : $step;//郵件循環for ($i = $r; $i < $n + $offset; $i++) {//取得郵件信息$user = $this->one_mail($i, $pop3, $list, $mail_log);array_push($mail, $user['from_mail']);array_push($users, $user);$r = $i +1;}//取得mail用戶數據$str = $this->uesr_data($mail);$value = array ();//當前郵件數組循環,當前郵件用戶的email,小孩名,童言for ($m = 0; $m < count($users); $m++) {$num = 0;$mn = $m + $n;//數據處理$post_text = $users[$m]['conntent'];if (!empty ($post_text)) {$post_text = do_submit_text($post_text);$post_text = mysql_real_escape_string($post_text);$post_link_num = parsed_text_include_links($post_text);$text = do_submit_text($post_text);$post_text_undo = mysql_real_escape_string($text);$post_text = mysql_real_escape_string($post_text);$val = array ();$kid_num = $users[$m]['kid_nickname'];if (is_numeric($kid_num) && intval($kid_num) <= 3 && intval($kid_num) > 0) {$kid_num = intval($kid_num);$val = $this->kid_data($users, $m, $kid_num, $post_text, $post_link_num, $post_text_undo);if (isset ($val)) {$value["$t"] = $val;$num = 1;$t = $t +1;}} else {//數據庫中的數據for ($x = 0; $x < count($str); $x++) {//判斷是否是from_mail的小孩$val["$x"] = $this->is_kid($users, $str, $m, $x, $post_text, $post_link_num, $post_text_undo);if (isset ($val["$x"])) {$value["$t"] = $val["$x"];$num = 1;$t = $t +1;}}}//判斷是否成功與數據庫中數據匹配到if ($num == 0) {$val = $this->kid_data($users, $m, 1, $post_text, $post_link_num, $post_text_undo);if (isset ($val)) {$value["$t"] = $val;$num = 1;$t = $t +1;}}}}//對一段數據操作$valu = implode("),(", $value);if ($valu != "") {$err_time = $this->insert_date($valu);$this->kid_message_count($value);}}fclose($mail_log);/*if($pop3->disconnect()==false){$this->_error(DELELET_ERROR);}*/} else {echo "帳號或密碼錯誤!";$this->_error(ACCOUNT_ERROR);}} else {echo "連接失敗...";$this->_error(EMAIL_CONNECTION_ERROR);;}} else {echo "數據庫連接失敗...";$this->_error(DATABASE_CONNECTION_ERROR);}}/**read the $i email message*@access public*@param  int $i mail id*@param  object $pop3  pop3 protocol object*@return array  mail from ,header,content*/function one_mail($i, $pop3, $list, $mail_log) {$stg = $pop3->getParsedHeaders($list[$i]['msg_id']);$from = imap_mime_header_decode($stg['From']); //郵件的發送者$string_from = '';for ($j = 0; $j < count($from); $j++) {$string_from = "$string_from" . $from[$j]->text;}preg_match("/([a-z0-9A-Z_]+)@([a-z0-9A-Z/.]+).([a-z0-9A-Z]+)/", $string_from, $from_mail);$string = $pop3->getMsg($list[$i]['msg_id']);$body = new Mail_mimeDecode($string);$sr = $body->decode(array ('include_bodies' => true,'decode_bodies' => false,'decode_headers' => true));if (property_exists($sr, 'parts')) {$mail_part = $sr->parts;$mail_part = $mail_part[0];} else {$mail_part = $sr;}$mail_code = $mail_part->headers;$mail_code = $mail_code['content-transfer-encoding']; //編碼格式$mail_type = $mail_part->ctype_parameters;$mail_type = $mail_type['charset'];$mail_body = $mail_part->body; //正文內容if ($mail_code == "base64") { //判斷編碼格式$text = base64_decode("$mail_body");$text = iconv("$mail_type", "UTF-8", $text);} else {$text = quoted_printable_decode("$mail_body");$text = iconv("$mail_type", "UTF-8", $text);}$mail_title = $sr->headers;$mail_title = $mail_title['subject'];$mail_title = imap_mime_header_decode($mail_title);if (count($mail_title) != 0) {$title = $mail_title[0]->text;$t = $mail_title[0]->charset;if ($t != "default") {$title = iconv($t, "UTF-8", $title);} else {$title = iconv("gb2312", "UTF-8", $title);}} else {$title = 1;}//$pop3->_cmdDele($list[$i]['msg_id']);$pop3->deleteMsg($list[$i]['msg_id']);if ($pop3->deleteMsg($list[$i]['msg_id']) == false) {$this->_error(SIGN_EMAIL_ERROR);}//取得需要插入的用戶email,小孩名,童言$users["$i"] = array ("from_mail" => "$from_mail[0]","kid_nickname" => "$title","conntent" => "$text","body_type" => "$mail_type");$log = $users["$i"];array_unshift($log, date("Y-m-d H:i;s"));$log = serialize($log);fwrite($mail_log, $log . "/r/n");return $users["$i"];}/***at database search $mail user's information*@access public*@param string $mail all email*@return array mail user's information*/function uesr_data($mail) {$mails = implode("','", $mail);$sql = "SELECT  a.mail,a.user_name,a.user_nickname,b.kid_id, b.kid_name,b.kid_avatar ,b.kid_birthdayFROM `t_users` a, `t_users_kid` bWHERE a.mail in ('$mails') AND a.user_id=b.user_id";$query = mysql_query($sql) or die(mysql_error());$str1 = array ();while ($arr = mysql_fetch_array($query)) {array_push($str1, $arr);}return $str1;}/**insert $value into database*@access public*@param string $value kid information*@return void*/function insert_date($value) {$sql_insert = "INSERT INTO `t_posts`(kid_id,user_name,user_nickname,post_time,post_text,user_avatar,post_link_num,post_text_undo,post_from,add_time)VALUES ($value)";$num = mysql_query($sql_insert) or die(mysql_error());if ($num != 1) {$this->_error(INSERT_ERROR);}}/**send email to $smtpemailto*@access public*@param string $mailtype mail_from type*@param string $smtpemailto mail_from*@param string $user_kid_name mail title*@return void*/function reply_email($mailtype, $smtpemailto, $user_kid_nickname) {require "config.php";$mailsubject = "您暫時還沒有" . $user_kid_nickname . "寶寶";$mailsubject = "=?UTF-8?B?" . base64_encode($mailsubject) . "?=";$mailbody = "請先添加寶寶";if ($mailtype != "ISO-8859-1") {$mailbody = iconv("utf-8", "$mailtype//ignore", $mailbody);}$mail_type = "HTML";$smtp = new smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass);$smtp->debug = FALSE;$send_mail = $smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mail_type, "", "");if ($send_mail == false) {return "send faile";$send_mail = $smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mail_type, "", "");}}/**the kid's age then publication kid words*@access public*@param int $kid_birthday kid birthday*@return array kid year month day*/function get_kid_age_info($kid_birthday) {$cur_date = date("Ymd");$age = $cur_date - $kid_birthday;if ($age < 0) {return false;}$years = 0;$months = 0;$days = 0;if ($age > 10000) {$years = floor($age / 10000);}$age = $age % 10000;$months = floor($age / 100);if ($months > 12)$months -= 88;$days = $age % 100;if ($days > $cur_date % 100) {$days = $days - (100 - date("d", strtotime(date("Ym") . "01") - 24 * 3600));}return array ($years,$months,$days);}/***judge the $m message and  the $x data*@access public*@param array $users mail information*@param array $str user information*@param int $m  $users grade*@param int $x  $str  grade*@param string $post_text the mail text*@return string  information*/function is_kid($users, $str, $m, $x, $post_text, $post_link_num, $post_text_undo) {if ($users[$m]['from_mail'] == $str[$x]['mail']) { //判斷是否是from_mail的小孩$kid_id = $str[$x]['kid_id'];$user_name = $str[$x]['user_name'];$user_nickname = $str[$x]['user_nickname'];$kid_diff = $str[$x]['kid_birthday'];$kid_name = $str[$x]['kid_name'];$kid_diff = date("Ymd", $kid_diff);$kid_birthdy = $this->get_kid_age_info($kid_diff);//格式轉換for ($j = 0; $j < count($kid_birthdy); $j++) {if ($kid_birthdy[$j] >= 0 && $kid_birthdy[$j] < 10) {$kid_birthdy[$j] = "0" . "$kid_birthdy[$j]";}}$post_time = $kid_birthdy[0] . $kid_birthdy[1] . $kid_birthdy[2];$user_avatar = get_kid_avatar($user_name, $kid_id);$kid_avatar = $user_avatar;if ($users[$m]['kid_nickname'] == $kid_name) {$kid_id = mysql_real_escape_string("$kid_id");$user_name = mysql_real_escape_string("$user_name");$post_time = mysql_real_escape_string("$post_time");$kid_avatar = mysql_real_escape_string("$kid_avatar");$from = POST_FROM_EMAIL;$add_time = time();$values = "'$kid_id','$user_name','$user_nickname','$post_time','$post_text','$kid_avatar','$post_link_num','$post_text_undo','$from','$add_time'";return $values;}}}/***have the kid_num kid of users  information*@access public*@param array $users the array() of users*@param int $m the m items of array*@param int $kid_num the kid_num kid*@return array  kid information*/function user_kid($users, $m, $kid_num) {$m_mail = $users["$m"]['from_mail'];$sql = "SELECT  a.user_name,a.user_nickname,b.kid_id, b.kid_name,b.kid_avatar ,b.kid_birthdayFROM `t_users` a, `t_users_kid` bWHERE a.mail='$m_mail' AND a.user_id=b.user_id ORDER BY b.kid_birthday ASC ";$query = mysql_query($sql) or die(mysql_error());$str1 = array ();$kids = array ();$i = 0;while ($arr = mysql_fetch_array($query)) {$str1[$i] = $arr;$i = $i +1;}$kid_num = $kid_num -1;if ($kid_num > (count($str1) - 1)) {return $num = 0;} else {return $str1["$kid_num"];}}/***get the kid_num kid information*@access public*@param array $users the array() of users*@param int $m the m items of array*@param int $kid_num the kid_num kid*@param string  $post_text the message of mail*@param int $post_link_num count(link) of message body*@return array  $values  the kid information*/function kid_data($users, $m, $kid_num, $post_text, $post_link_num, $post_text_undo) {$use_kid = $this->user_kid($users, $m, $kid_num);if ($use_kid != 0) {$kid_id = $use_kid['kid_id'];$user_name = $use_kid['user_name'];$user_nickname = $use_kid['user_nickname'];$kid_diff = $use_kid['kid_birthday'];$kid_diff = date("Ymd", $kid_diff);$kid_birthdy = $this->get_kid_age_info($kid_diff);//格式轉換for ($j = 0; $j < count($kid_birthdy); $j++) {if ($kid_birthdy[$j] >= 0 && $kid_birthdy[$j] < 10) {$kid_birthdy[$j] = "0" . "$kid_birthdy[$j]";}}$post_time = $kid_birthdy[0] . $kid_birthdy[1] . $kid_birthdy[2];$user_avatar = get_kid_avatar($user_name, $kid_id);$kid_avatar = $user_avatar;$add_time = time();$from = POST_FROM_EMAIL;$values = "'$kid_id','$user_name','$user_nickname','$post_time','$post_text','$kid_avatar','$post_link_num','$post_text_undo','$from','$add_time'";return $values;}}/***update data when have kid words*@access public*@param array $value the array() of users*@return void*/function kid_message_count($value) {$use_names = array ();for ($k = 0; $k < count($value); $k++) {$k_name = explode(",", $value[$k]);$use_names[$k] = $k_name[1];}asort($use_names);$sum_kid = count($use_names);$s = 0;if (count($use_names) == 1) {$d_users[0] = $use_names[0];} else {//第一個if ($use_names[0] != $use_names[1]) {$d_users[0] = $use_names[0];} else {$s_users[$s] = $use_names[0];$s = $s +1;}//最后一個if ($use_names[$sum_kid -1] != $use_names[$sum_kid -2]) {$d_users[$sum_kid -1] = $use_names[$sum_kid -1];} else {$s_users[$s] = $use_names[$sum_kid -1];$s = $s +1;}for ($k = 1; $k < count($use_names) - 1; $k++) {if ($use_names[$k] == $use_names[$k -1] || $use_names[$k] == $use_names[$k +1]) {$s_users[$s] = $use_names[$k];$s = $s +1;} else {$d_users[$k] = $use_names[$k];}}}if (isset ($d_users)) {$names = implode(",", $d_users);$sql = "UPDATE `t_users` set post_num = post_num+1 WHERE `t_users`.user_name in ($names)";$query = mysql_query($sql) or die(mysql_error());}if (isset ($s_users)) {for ($s = 0; $s < count($s_users); $s++) {$name = $s_users[$s];$sql = "UPDATE `t_users` set post_num = post_num+1 WHERE `t_users`.user_name = $name";$query = mysql_query($sql) or die(mysql_error());}}}/*** point error*@access private*@param int error_num the error code*@return void**/private function _error($error_num) {$error_log = fopen("error_log.txt", "a+");switch ($error_num) {case 2 :fwrite($error_log, date("Y-m-d H:i:s") . "/t" . $error_num . "/tCould not connect database!/r/n");break;case 3 :fwrite($error_log, date("Y-m-d H:i:s") . "/t" . $error_num . "/tConnection Failure!/r/n");break;case 4 :fwrite($error_log, date("Y-m-d H:i:s") . "/t" . $error_num . "/tAccount number or password error!!/r/n");break;case 5 :fwrite($error_log, date("Y-m-d H:i:s") . "/t" . $error_num . "/tsign email failed!/r/n");break;case 6 :fwrite($error_log, date("Y-m-d H:i:s") . "/t" . $error_num . "/tdelete emails failed!/r/n");break;case 7 :fwrite($error_log, date("Y-m-d H:i:s") . "/t" . $error_num . "/tinsert data failed!/r/n");break;}fclose($error_log);}
}
?>



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276360.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276360.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276360.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【轉】概要設計說明書

概要設計說明書 一&#xff0e; 引言 1&#xff0e; 編寫目的 從該階段開發正式進入軟件的實際開發階段&#xff0c;本階段完成系統的大致設計并明確系統的數據結構與軟件結構。在軟件設計階段主要是把一個軟件需求轉化為軟件表示的過程&#xff0c;這種表示只是描繪出軟件的…

程序異常異常代碼: 0xc0000005_Java基礎:看完這篇你還怕碰到異常嗎?

前言在日常的開發以及平時的學習練習中&#xff0c;異常相信對于大家來講并不陌生&#xff0c;但是對于異常的具體使用、底層實現以及分類等等可能并不是很了解。今天我就抽出了一點時間系統的整理了異常的各個知識點&#xff0c;希望能夠幫助到大家對于Java 異常的理解與學習。…

寫給初中級前端工程師的進階指南

學習一門新技術的時候&#xff0c;最大的苦惱之一&#xff0c;大概就是不知道從何入手。典型的情況是&#xff0c;你大概知道學會以后&#xff0c;這門技術可以幫你解決什么問題。但是&#xff0c;怎么才能學會、循序漸進的學習路線是什么、學習范圍有多大的深度和廣度、涉及到…

同一頁面中引入多個JS庫產生的沖突解決方案(轉)

發生JS庫沖突的主要原因&#xff1a;與jQuery庫一樣&#xff0c;許多JS庫都使用‘$’符號作為其代號。因此在一個頁面中引入多個JS庫&#xff0c;并且使用‘$’作為代號時&#xff0c;程序不能識別其代表哪個庫&#xff08;這個是我自己的解釋&#xff0c;但更深的原因就必須深…

不用安裝Oracle Client如何使用PLSQL Developer

1. 下載oracle的客戶端程序包&#xff08;30M&#xff09;只需要在Oracle下載一個叫Instant Client Package的軟件就可以了&#xff0c;這個軟件不需要安裝&#xff0c;只要解壓就可以用了&#xff0c;很方便&#xff0c;就算重裝了系統還是可以用的。下載地址&#xff1a;http…

input file的默認value清空與賦值方法

轉載鏈接&#xff1a;http://www.jb51.net/article/24872.htm出于安全性考慮&#xff0c;JS是不能直接設置File的value值的&#xff0c;下面是我總結出來的方法第1個方法是大多人傳統做法&#xff0c;替換HTML代碼&#xff0c;樓上的已經用到了&#xff0c;我不過是用正則優化一…

python中o_Python I/O與進程的詳細講解

I/Owith語句with context_expression [as target(s)]:with-bodycontext_expression返回值遵從上下文管理協議&#xff0c;包含__enter__()與__exit__()方法&#xff0c;as語句的target(s)得到的是__enter__()返回值&#xff0c;執行with-body后會調用上下文管理器的__exit__()方…

千層套路 - Vue 3.0 初始化源碼探秘

關注若川視野, 回復"pdf" 領取資料&#xff0c;回復"1"&#xff0c;可加群長期交流學習劉崇楨&#xff0c;微醫云服務團隊前端工程師&#xff0c;左手抱娃、右手持家的非典型碼農。9 月初 Vue.js 3.0 正式發布&#xff0c;代號 "One Piece"。大秘…

css網頁布局兼容性有哪些要點與訣竅

IE vs FFCSS 兼容要點&#xff1a;DOCTYPE 影響 CSS 處理FF: div 設置 margin-left, margin-right 為 auto 時已經居中, IE 不行FF: body 設置 text-align 時, div 需要設置 margin: auto(主要是 margin-left,margin-right) 方可居中FF: 設置 padding 后, div 會增加 height 和…

js 下拉底部加載|滑輪滾動到頁面底部ajax加載數據的實例

轉載鏈接&#xff1a;http://www.cnblogs.com/thinksley/archive/2013/05/12/3074237.html 滾動下拉到頁面底部加載數據是很多瀑布流網站的做法&#xff0c;那來看看配合jsonp是如何實現的吧&#xff0c;小菜總結記錄之用&#xff0c;高手勿噴。 當然本例子采用的是jquery庫&…

python并行for循環_Python并行執行for循環

簡介在介紹如何最簡單地利用 python 實現并行前&#xff0c;我們先來看一個簡單的代碼。words [apple, bananan, cake, dumpling]for word in words:print word上面的例子中&#xff0c;我們用一個 for 循環打印出 words 列表中的每個單詞。問題來了&#xff0c;這里我們打印完…

C語言之指針與數組總結

和指針相關的問題口訣1&#xff1a; 1. 地址變量得地址&#xff0c;得誰地址指向誰 和指針相關的問題要畫圖: 內容變量畫房子&#xff0c;指針畫箭頭 ---->口 ---------------------------------------------------- 和指針相關的兩個特殊運算符&#xff1a; 一、"&…

2020年大前端技術趨勢解讀

導Lead語如今的前端早已不再拘泥于滿足頁面展示&#xff0c;而是開始延展到通過全棧來閉環產品。這表明前端已經有能力透過業務深入產業&#xff0c;繼而影響商業結果。這種表象的改變背后是本質的轉變&#xff0c;從更為宏觀的角度來說&#xff0c;前端正在通過持續的技術革新…

HTML默認樣式表CSS屬性

轉載鏈接&#xff1a;http://www.xiao-a.com/index.php/archives/440.html 開始的時候 *{margin:0;padding:0;}&#xff0c;當需要使用邊距的時候&#xff0c;就需要還原HTML默認CSS值了。以前一直在找這份 文檔&#xff0c;今天偶然在w3上看到了。除了inline和block的定義&…

第六集 MSF構思階段項目團隊的組建

第六集 MSF構思階段項目團隊的組建__Note轉載于:https://www.cnblogs.com/zencorn/archive/2009/10/18/1585495.html

lc濾波器是利用電感的感抗_你對LC諧振電路你都了解嗎

根據在電路中電感器L和電容C的連接方式不同&#xff0c;可以有兩種LC諧振電路&#xff0c;LC并聯諧振電路和LC串聯諧振電路。LC并聯、串聯諧振電路在應用中的變化較多&#xff0c;是電路中分析的一個難點&#xff0c;只有掌握LC并聯、串聯電路的阻抗特性等基本概念&#xff0c;…

給小程序再減重 30% 的秘密?(京喜小程序首頁瘦身實踐)

前言—在 web 開發場景&#xff0c;減少代碼體積雖然是性能優化的一個方向&#xff0c;還沒到錙銖必較的程度。但是在小程序場景&#xff0c;由于代碼包上傳階段限制了主包 2M 和總包 16M&#xff08;近期微信官方正在內測將總包上限調整至 20M &#xff09;的尺寸&#xff0c;…

rfc mail content-type

轉載鏈接&#xff1a;http://www.w3.org/Protocols/rfc1341/0_TableOfContents.html RFC 郵件正文類型列表&#xff1a; Note: this is a hypertext versionof RFC1341 which has been obsoletedby RFC1521, of which no hypertextversion currently exists. Text …

Coolite Toolkit入門指南

Coolite Toolkit 簡介 Coolite Toolkit 是一個支持ASP.NET AJAX的Web控件Coolite Toolkit是基于跨瀏覽器的ExtJS 庫開發而來的&#xff0c;并且簡化了開發步驟&#xff0c;包含有豐富的Ajax運用Coolite Toolkit和ExtJS 都是開源的可能通過SVN直接獲取Coolite 的代碼簡單的說,就…