ホームページ >バックエンド開発 >PHPチュートリアル >Mail_MimeDecode クラスを使用して電子メール情報を抽出する PHP の例_PHP チュートリアル

Mail_MimeDecode クラスを使用して電子メール情報を抽出する PHP の例_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:39:48916ブラウズ

焦点は one_mail 関数にあります。 Mail_mimeDecode クラスを使用して、電子メールから電子メール ヘッダーと電子メール本文を抽出します。

コードをコピーします コードは次のとおりです:

header("content-type:text/html; charset=UTF-8");
/*
* 子供の単語を記録し、データベースに挿入します
* ユーザーに電子メールを送信して子供の単語を公開します
*
*/
include 'email_class.php';
//include 'include/extend_common.php'; //include '../../htdocs/include/extend_common.php';
define('POST_FROM_EMAIL', 1); //データベース接続エラー
define('EMAIL_CONNECTION_ERROR); ', 3); //メールボックス接続失敗エラー
define('ACCOUNT_ERROR', 4) //メールボックスアカウント番号が間違っています
define('SIGN_EMAIL_ERROR', 5) //メールマーク削除エラー
define('DELELET_ERROR') , 6); //メール削除エラー
define('INSERT_ERROR', 7); //データ挿入失敗エラー

function mail_data() {
include 'config.php'; ( "mail_log.txt", "a+");
$conn = @ mysql_connect($db_host, $db_password)
if ($conn) {
mysql_select_db('t', $conn); " 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 $users = 配列 ();
$offset = ($sum[0] - $n); $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']); $i +1;
}
//メールユーザーデータを取得
$str = $this->uesr_data($mail)
$value = array (); , 子の名前、子の単語
for ($m = 0; $m < count($users); $m++) {
$num = $m + $n;
//データ処理
; $post_text = $users[$ m]['content'];
if (!empty ($post_text)) {
$post_text = mysql_real_escape_string($post_text); parsed_text_include_links($post_text);
$text = do_submit_text($post_text);
$post_text = mysql_real_escape_string($post_text); $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 < 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"];
$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 = 1; }
}
}
}
// データの一部を操作します
$valu = implode("),(", $value);
if ($valu != "") {
$err_time = $this- >insert_date($value);
$this- >kid_message_count($value)
}
}
/*
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);
}
}

/*
*$i メール メッセージを読む
*@access public
*@param int $i mail id
*@param オブジェクト $pop3 Pop3 プロトコル オブジェクト
*@return 配列 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_body' => false、
'decode_headers' => true
));
$mail_part = $sr->parts;
$mail_part = $mail_part[0];
} else {
$mail_part = $sr;
}

$mail_code = $mail_part->headers;
$mail_code = $mail_code['コンテンツ転送エンコーディング']; //コード格式
$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 = quote_printable_decode("$mail_body");
$text = iconv("$mail_type", "UTF-8", $text);
}

$mail_title = $sr->headers;
$mail_title = $mail_title['件名'];
$mail_title = imap_mime_header_decode($mail_title);

if (count($mail_title) != 0) {

$title = $mail_title[0]->text;
$t = $mail_title[0]->文字セット;

if ($t != "デフォルト") {
$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);
}
//必要な侵入メールを取得、小孩名、童話
$users["$i"] = array (
"from_mail" => "$from_mail[0]",
"kid_nickname" => ; "$title"、
"content" => "$text"、
"body_type" => "$mail_type"
);
$log = $users["$i"];
array_unshift($log, date("Y-m-d H:i;s"));
$log = シリアル化($log);
fwrite($mail_log, $log . "/r/n");
$users["$i"] を返します;
}

/**
*at データベース検索 $mail ユーザー情報
*@access public
*@param string $mail all email
*@return array mail ユーザー情報
*/
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) または die(mysql_error());
$str1 = 配列 ();

while ($arr = mysql_fetch_array($query)) {
array_push($str1, $arr);
}
$str1 を返します。
}
/*
*$value をデータベースに挿入
*@access public
*@param string $value 子供の情報
*@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) または die(mysql_error());

if ($num != 1) {
$this->_error(INSERT_ERROR);
}
}
/*
*$smtpemailto にメールを送信
*@access public
*@param string $mailtype mail_from type
*@param string $smtpemailto mail_from
*@param string $user_kid_name メールタイトル
*@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 = 新しい 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_mail = $smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mail_type, "", "");
}
}
/*
*子供の年齢、出版物の子供の言葉
*@access public
*@param int $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 return false;
}
$年 = 0;
$ 月 = 0;
$days = 0;
if ($age > 10000) {
$years = Floor($age / 10000);
}

$age = $age % 10000;
$months = フロア($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));
}
配列を返す (
$years,
$months,
$days
);
}
/**
*$m メッセージと $x データを判定
*@access public
*@param array $users メール情報
*@param array $str ユーザー情報
*@param int $m $users Grade
*@param int $x $str グレード
*@param string $post_text メール本文
*@return 文字列情報
*/
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] $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 = 時間();
$values = "'$kid_id','$user_name','$user_nickname','$post_time','$post_text','$kid_avatar','$post_link_num','$post_text_undo','$from', '$add_time'";
$values を返します。
}
}
}
/**
*ユーザーの kid_num 個の子供情報を持っています
*@access public
*@param array $users ユーザーの array()
*@param int $m 配列の m 項目
*@param int $kid_num kid_num 個の子供
*@return 配列の子供の情報
*/
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'かつ a.user_id=b.user_id b.kid_birthday ASC で注文 ";
$query = mysql_query($sql) または die(mysql_error());
$str1 = 配列 ();
$kids = 配列();
$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"];
}

}
/**
*kid_num の子供の情報を取得します
*@access public
*@param array $users ユーザーの array()
*@param int $m 配列の m 項目
*@param int $kid_num kid_num の子供
*@ param string $post_text メールのメッセージ
*@param int $post_link_num メッセージ本文のカウント(リンク)
*@return array $values 子供の情報
*/
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] $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 = 時間();
$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'";
$values を返します。
}
}
/**
*子供の言葉があるときにデータを更新します
*@access public
*@param array $value ユーザーの array()
*@return void
*/
function kid_message_count($value) {
$use_names = array ();

for ($k = 0; $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
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) または 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) または die(mysql_error());
}

}

}
/**
* ポイントエラー
*@access private
*@param int error_num エラーコード
*@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 . "/tデータベースに接続できませんでした!/r/n") ;
休憩;
ケース 3 :
fwrite($error_log, date("Y-m-d H:i:s") . "/t" . $error_num . "/tConnection Failure!/r/n");
休憩;
ケース 4 :
fwrite($error_log, date("Y-m-d H:i:s") . "/t" . $error_num . "/tアカウント番号またはパスワードのエラー!!/r/n");
休憩;
ケース 5 :
fwrite($error_log, date("Y-m-d H:i:s") . "/t" . $error_num . "/tsign 電子メールに失敗しました!/r/n");
休憩;
ケース 6 :
fwrite($error_log, date("Y-m-d H:i:s") . "/t" . $error_num . "/tdelete メールが失敗しました!/r/n");
休憩;
ケース 7 :
fwrite($error_log, date("Y-m-d H:i:s") . "/t" . $error_num . "/tinsert データが失敗しました!/r/n");
休憩;
}
fclose($error_log);
}
}
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/728114.html技術記事 one_mail 関数として強調されます。Mail_mimeDecode クラスを利用して、ファイルからファイルとファイルの直接を抽出します。 /* *...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。