<?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;
デフォルト:
}
}
}
};
?>