转载链接: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);}
}
?>

PHP 利用Mail_MimeDecode类提取邮件信息相关推荐

  1. php提取邮箱并返回,PHP 利用Mail_MimeDecode类提取邮件信息示例

    重点为one_mail函数.利用Mail_mimeDecode类从邮件中提取邮件头和邮件正文. header("content-type:text/html; charset=UTF-8&q ...

  2. PHP 利用Mail_MimeDecode类提取邮件正文

    参考链接:http://blog.csdn.net/dmtnewtons_blog/article/details/18765289 rfc mail content-type: 参考链接:http: ...

  3. php smtp邮件类,php利用smtp类发送邮件

    本篇文章主要介绍php利用smtp类发送邮件,感兴趣的朋友参考下,希望对大家有所帮助. 以下就是核心代码:<?php require_once "email.class.php&quo ...

  4. ocr语种识别_利用OCR图文识别,快速帮你提取文字信息

    我们在浏览网页.读书的时候,经常找到我们感兴趣的资料,有时候一些纸质文字或图片是无法复制保存的,那么为了方便这类信息的提取.编辑保存,中安未来特研发了OCR图文识别技术: 中安未来OCR图文识别技术是 ...

  5. System verilog利用class类打印信息

    1.1 System verilog利用class类打印信息 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)System verilog利用class类打印信息: 5) ...

  6. 【Python例】利用 python 进行图片文字信息的提取 --- OCR-EasyOCR

    [Python例]利用 python 进行图片文字信息的提取 - OCR-EasyOCR 本文主要用于记录,并使用 python 脚本进行图片文字信息的生成. 什么是 OCR? OCR OCR(Opt ...

  7. python正则匹配特殊字符_python 利用正则表达式提取特殊信息

    1.删除字符串中的 Python注释 案例: import re time = "2020-01-01 # 这是一个日期" num = re.sub(r'#.*$', " ...

  8. 在Scrapy中如何利用Xpath选择器从HTML中提取目标信息(两种方式)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 坚定,严谨,勤奋,开拓 前一阵子我 ...

  9. Python利用百度AI提取图片中的文字信息

    Python利用百度AI提取图片中的文字信息 安装百度AI : pip install baidu-aip 到https://console.bce.baidu.com/ai/创建文字识别应用,获取A ...

最新文章

  1. 使用MSBuild实现完整daily build流程 .
  2. HTML怎么做类似QQ聊天气泡,h5实现QQ聊天气泡的实例介绍
  3. 443. 压缩字符串
  4. 【Net】测试网络、查看IP
  5. 学校计算机教室安全预案,小学校园微机室安全事故应急疏散预案
  6. 没变强是因为你太舒服(图)
  7. qt输出中文乱码处理(解决方法)
  8. Oracle 游标使用整理
  9. Atitit 远程存储与协议 mtp ptp rndis midi nfs smb webdav ftp hdfs v3 Atitit mtp ptp rndis midi协议的不同区别
  10. Power of Two(Leetcode231)
  11. 【Java+JSP+MySql】12306购票系统(二)数据库
  12. WizTree——一个扫描快似Everything的硬盘空间分析工具
  13. 显示接口DP HDMI VGA DVI LVDS的区别
  14. jpa blob mysql_Spring让BLOB 和Clob数据操作变得简单易行
  15. 计算机笔记--【Redis高级】
  16. 3D和2D游戏开发技术里的坐标系总结
  17. Word从任意页开始从1,2,3...编辑页码
  18. 安全帽识别软件能够解决现场管理诸多问题
  19. 【精益生产】精益知识大全
  20. Cookie由谁设置、怎么设置、有什么内容?

热门文章

  1. 西澳大学商科专业排名_澳洲西澳大学优势专业排名多少
  2. oracle时间类型插入,oracle 插入时间字符串 Date类型
  3. Jlink commander、MCU GD32启动方式、Bootloader
  4. windows2003 apache php mysql_Windows 2003搭建Apache PHP MySQL环境经验分享
  5. 2 什么是计算机网络设置密码,计算机网络技术及应用(第2版)第6章网络操作系统基本配置.ppt...
  6. c语言通过什么传递参数 寄存器,关于使用寄存器传参解决方法
  7. 设计模式工厂方法模式
  8. SpringFramework5.0 @Indexed注解 简单解析
  9. 最全面的MySQL笔记
  10. 程序员应该抛弃的10种思维定式