ホームページ  >  記事  >  php教程  >  シンプルな (そしておそらく不完全な) IMAP クラスとアプリケーション。 (1つ)

シンプルな (そしておそらく不完全な) IMAP クラスとアプリケーション。 (1つ)

WBOY
WBOYオリジナル
2016-06-21 09:12:571157ブラウズ

<?php
// by alpha.z var $port=0;
var $connection=0;            //否接続
var $state="DISCONNECTED";        //连接状態态
var $greeting="";            
var $must_update=0;
var $inStream=0;

関数 open()
{
if ($this->port==110)
$this-& gt;inStream=imap_open("{$this- >ホスト名/pop3:110}受信箱",$this->ユーザー名,$this->userpwd);
else
$this->inStream=imap_open("{$this->ホスト名/imap:143 }inbox",$this->username,$this->userpwd);

if ($this->inStream)
{
echo "ユーザー:$this->username のシンクボックス接続成功。< br>";
return $inStream;
else
{
echo "ユーザー:$this->username のチャネル接続が失われています。
";
return 0;
}
}

関数 close( )
{
if(imap_close($this->inStream))
{
echo "


すでにサーバー$this->ホスト名を切断しました。";
return 1;
}
else
{
echo "


とサービス $this->hostname が切断されました。";
return 0;
}

Function CheckMailbox( )
{
$mboxinfo=@imap_mailboxmsginfo($this-> inStream);
//$mboxinfo=imap_check($this->inStream);
if ($mboxinfo)
if ($mboxinfo->Nmsgs>0)
{
echo "您的收件箱里共有邮件数:".$mboxinfo->Nmsgs."
";
echo "未读邮ブロック:".$mboxinfo->未読。"
";
//echo "新邮ブロック:".$mboxinfo->最新。"
";
エコー「占有された総スペース:」。$ mboxinfo-&gt;サイズ受信箱のメッセージが利用可能になりました。 > inStream、$sortby、$sort_reverse、SE_UID);

for ($i=1;$i<=$mboxinfo->Nmsgs;$i++)
{
$msgHeader = @imap_header( $ this&gt; imap_msgno($&gt; sorted [$ i-1]);
; F (ISSET ($ From- & GT; メールボックス) && Isset ($ From- & GT; ホスト) ) {
{
{ $frm = $from->メールボックス . $from->host;
                        }
else
if (isset($msgHeader->fromaddress))
$frm =rim($h->fromaddress);
}
else
if (isset($msgHeader->fromaddress))
$frm =rim($msgHeader->fromaddress);

if (isset($msgHeader->toaddress))
$to = trim($msgHeader->toaddress);
else
$to = "未知";


if (isset($msgHeader->subject))
$sub =rim($this->decode_mime_string($msgHeader->subject));
if (isset($msgHeader-& gt;サイズ))
$msg_size = ($msgHeader->サイズ > 1024) ? sprintf("%.0f kb", $msgHeader->Size / 1024) : $msgHeader->Size;
if (strlen($frm) > 50)
$frm = substr($frm, 0, 50 )。 '...';
if (strlen($sub) > 50)
$sub = substr($sub, 0, 50) 。 '...';

echo '';
echo '< ;td>'.$frm.''.$sub.''.$date.''。 $msg_size.'';
echo '';
}
echo "";
}

関数 decode_mime_string ( $string)
{
$pos = strpos ($string, '=?');
if (!is_int($pos))
{
return $string;
}

$preceding = substr($string, 0, $pos); // 前のテキストを保存します

$search = substr($string, $pos+2, 75); // MIME ヘッダーの仕様によれば、これは 1 つのエンコードされた単語の最長です
$d1 = strpos($search, '?');
if (!is_int($d1))
{
return $string;
        }

$charset = substr($string, $pos+2, $d1);
$search = substr($search, $d1+1);

$d2 = strpos($search, '?');
if (!is_int($d2))
{
return $string;
}

$encoding = substr($search, 0, $d2);
$search = substr( $search、$d2+1);

$end = strpos($search, '?=');
if (!is_int($end))
{
$string;
$encoded _text = substr($search, 0, $end) ;
$rest = substr($string, (strlen($preceding . $charset . $encoding . $encoded_text)+6));

switch ($encoding)
{
case
ケース「q」 :
$encoded_text = str_replace('_', '%20', $encoded_text);
$encoded_text = str_replace('=', '%', $encoded_text);
$decoded = urldecode($encoded_text);
break ;

case 'B':
case 'b':
$decoded = urldecode(base64_decode($encoded_text));
break;

デフォルト:
$decoded = '=?' 。 $charset 。 「?」 。 $エンコーディング 。 「?」 。 $encoded_text 。 '?=';
break;
}

return $preceding 。 $decode 。 decode_mime_string($rest);
}


関数 display_toaddress ($user, $server, $from)
{
return is_int(strpos($from, $this->get_barefrom($user, $server)));
}

関数 get_barefrom($user, $server)
{
$barefrom = "$user@$real_server";

return $barefrom;
}

関数 get_ Structure($msg_num)
{
$ Structure=imap_fetchstruct ($this->inStream,$msg_num);
//echo gettype($struct);
return $struct;
}

関数 proc_struct($msg_part, $part_no, $msg_num)
{
if ($msg_part ->ifdisposition)
{
// 性質があるかどうかを確認してください
// これが使用されることについて私が知っている唯一のこと
// 添付ファイルであることだけです
// とにかく確認しましょう
            if ($msg_part->disposition == "ATTACHMENT")
{
// 添付ファイルの場合は、ユーザーにダウンロードしてもらいます
// まず、ファイル名が送信されたかどうかを確認します
$att_name = "不明";
for ($lcv = 0; $lcv < count($msg_part->parameters); $lcv++)
{
$param = $msg_part->parameters[$lcv];

if ($param->属性 == "名前")
{
$att_name = $param->value;
break;
}
}

// ここに添付ファイルをダウンロードするためのリンクを指定できます....
echo '< a href="'.$att_name.'">'.$att_name.'
';
$fp=fopen(".\$att_name","w+");
fputs ($fp,imap_base64(imap_fetchbody($this->inStream,$msg_num,$part_no)));
fclose($fp);
}
else
{
// 添付ファイル以外にも何かに使われるのでしょうか? ???
}
else
{
// 添付ファイルではありません。この部分が何であるかを見てみましょう...
switch ($msg_part->type)
{
case TYPETEXT:
$mime_type = "テキスト" ;
break;
case TYPEMULTIPART:
$mime_type = "multipart";
// 使ってみませんかこの関数は、このマルチパート パーツのすべてのパート
// を処理します:)
                    for ($i = 0; $i < count($msg_part->parts); $i++)
{
if ($part_no !=)
{
$part_no = $part_no.".";
}
for ($i = 0; $i < count($msg_part->parts); $i++)
{
$this->proc_ Structure($msg_part->parts[$i], $part_no. ($i + 1), $msg_num);
}
}
break;
case TYPEMESSAGE:
$mime_type = "メッセージ";
break;
case TYPEAPPLICATION:
$mime_type = "アプリケーション";
休憩;
ケースTYPEAUDIO:
$mime_type = "オーディオ";
break;
TYPEIMAGE:
$mime_type = "画像";
break;
case TYPEVIDEO:
$mime_type = "video";
break;
case TYPEMODEL:
$mime_type = "モデル";
break;
default:
$mime_type = "unknown";
// }

            $ full_mime_type = $ mime_type。 "/"。$ msg_part-&gt; subtype;それを表示するには、エンコーディングを調べてエコーを解除します
スイッチ ($msg_part->encoding)
{
case ENCBASE64:
// imap_base64 を使用してデコードします
$fp=fopen(".\$att_name","w+" );
fputs($fp,imap_base64(imap_fetchbody($this->inStream,$msg_num,$part_no)));
fclose($fp);
break;
case ENCQUOTEDPRINTABLE:
// imap_qprint を使用してデコードします
//echo ereg_replace("n","
",imap_qprint(imap_fetchbody($this->inStream,$msg_num,$part_no)));
echo '
'.imap_qprint(imap_fetchbody($ this->inStream,$msg_num,$part_no)).'
';
break;
case ENCOTHER:
// これをデコードする必要があるかどうかはわかりません
break;
デフォルト:
}
}
}


};

?>




声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。