您当前的位置: 首页 > 网站编程 > PHP教程 > PHP 利用Mail_MimeDecode类提取邮件信息示例

PHP 利用Mail_MimeDecode类提取邮件信息示例

作者:不详 来源:网络 发布时间: 2014-08-07 20:52 点击:
重点为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 * */ in

PHP 利用Mail_MimeDecode类提取邮件信息示例

  重点为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_birthday

  FROM `t_users` a, `t_users_kid` b

  WHERE 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_birthday

  FROM `t_users` a, `t_users_kid` b

  WHERE 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类提取邮件信息示例"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4