PHP郵件專題
PHP SMTP類
/***********************************
PHP MIMESMTP ver 1.0 Powered by Boss_ch, Unigenius soft ware co. Ltd
All rights reserved, Copyright 2000 ;
本類用PHP透過smtp sock 作業發送MIME 類型的郵件,可以傳送
HTML
本版本是針對個人的發送,與多人群發版本不同的是,每發送到一個人,就重新進行一次編碼,在接收端的用戶看來,只是發送給他一個人的。
針對多人群發的情況,只發送一次,透過多個RCPTTO指令傳送到不同的人信箱中,
說明:
請把$hostname 設為你有權限的預設smtp 伺服器或是在new 時指定
把$charset 改成你的預設字元集
Html 正文中如有圖片,請用絕對路徑的引用"httP://host/path/image.gif";
並連上網,以確保程式能讀取到圖片的資料資訊
如果是透過表單提交過來的Html 正文,請先用StripSlashes($html_body)把正文內容進行預處理
Html 中用到的樣式表文件,請不要用之類的引用,直接把樣式表定義放在
標籤中
轉載請保留此版權信息,Bugs Report : [email]boss_ch@china.com[/email]
*********************************** **/
if(!isset($__smtp_class__)){
$__smtp_class__=1;
class smtp
{
var $hostname="";
var $port=25;
var $connection=0;
var $debug=1;
var $timeout=30;
var $err_str;
var $err_no;
var $autocode=true;
var $charset="??????";
var $subject="";
var $body="";
var $attach="";
var $temp_text_body;
var $temp_html_body;
var $temp_body_images;
var $bound_begin="=====powered_by_boss_chen_";
Function smtp($server="smtp.china.com",$port=25,$time_out=20)
{$this- >hostname=$server;
$this->port=$port;
$this->timeout=$time_out;
return true;
}
Function outdebug($ message)
{
echo htmlspecialchars($message)."
n";
}
function command($command,$return_lenth=1,$return_codeth=1,$return_code '2')
{
if ($this->connection==0)
{
$this->err_str="沒有連接到任何伺服器,請檢查網路連線";
return false;
}
if ($this->debug)
$this->outdebug(">>> $command");
if (!fputs($this->connection ,"$command rn"))
{
$this->err_str="無法傳送指令".$command;
return false;
}
else
{
{
$resp=fgets($this->connection,256);
if($this->debug)
$this->outdebug("$resp");
if (substr($resp ,0,$return_lenth)!=$return_code)
{
$this->err_str=$command." 指令伺服器回傳無效:".$resp;
return false;
}
else
return true;
}
}
Function open()
{
if($this->hostname=="")
{$this->err_str="無效的主機名稱!!";
return false;
}
if ($this->debug) echo "$this->hostname,$ this->port,&$err_no, &$err_str, $this->timeout
";
if (!$this->connection=fsockopen($this->hostname,$this->port,& $err_no, &$err_str, $this->timeout))
{
$this->err_str="連接到SMTP 伺服器失敗,錯誤訊息:".$err_str."錯誤號碼:".$err_no ;
return false;
}
else
{
$resp=fgets($this->connection,256);
if($this->debug)
$this->outdebug("$resp");
if (substr($resp,0,1)!="2")
{$this->err_str="伺服器傳回無效的資訊:" .$resp."請檢查SMTP伺服器是否正確";
return false;
}
return true;
}
}
Function Close()
{
if($this->connection!=0)
{
fclose($this->connection);
$this->connection=0;
}
}
Function Buildhead($from_name,$to_name,$from_mail,$to_mail,$subject)
{
if (empty($from_name))
$from_name=$from_mail ;
if (empty($to_name)) $to_name=$to_mail;
$this->subject="From: =?$this->charset?B?".base64_encode($from_name)."? =rn";
$this->subject.="To: =?$this->charset?B?".base64_encode($to_name)."?=rn";
$subject=ereg_replace("n","",$subject);
$this->subject.="Subject: =?$this->charset?B?".base64_encode($subject)." ?=rn";
if ($this->debug) echo nl2br(htmlspecialchars($this->subject));
return true;
}
函數 parse_html_body($html_body=null)
{
$passed="";
$image_count=0;
$this->temp_body_>$image_count=0;
$this->temp_body_images=array() ;
while (eregi("] )src[[:space:]]*=[[:space:]]*([^ ] )",$html_body,$reg))
{
$pos=@strpos($html_body,$reg[0]);
$passed.=substr($html_body,0,$pos);
$html_body= substr($html_body,$pos strlen($reg[0]));
$image_tag=$reg[2];
$image_att=$reg[1];
$tag_len= strlen($ image_tag);
if ($image_tag[0]=="'" 或$image_tag[0]=='"')
$image_tag=substr($image_tag,1);
if (substr ($image_tag,strlen($imgage_tag)-1,1)=="'" 或substr($image_tag,strlen($imgage_tag)-1,1)=='"')
$image_tag= substr($ image_tag,0,strlen($imgage_tag)-1);
//回顯$image_tag."
";
$cid=md5(uniqid(rand()));
$cid =substr($cid,0,15)."@unigenius.com";
$passed.="$end_pos=@strpos($html_body,'>');
$passed.=substr($html_body,0,$end_pos);
$html_body=substr($html_body,$end_pos);
//把圖片資料讀取存出來一個資料;
$img_file_con=fopen($image_tag,"r");
unset($image_data);
while ($tem_buffer= AddSlashes (fread($img_file_con,16777216)))
$image_data.=$tem_buffer;
fclose($img_file_con);
$image_exe_name=substr($img_file_con);
$image_exe_name=substr($image_tag,strpos. ,3);
switch (strtolower($image_exe_name))
{
case "jpg":
case "jpeg":
$content_type="image/jpeg ";
break;
case "gif":
$content_type="image/gif";
break;
case "png":
$content_type="image/x -png";
break;
case "tif":
$content_type="image/tif";
break;
預設值:
$content_type="image/";
break;
}
$this->temp_body_images[$image_count][name]=basename($image_tag);
$this->temp_body_images[$image_count][type ]= $content_type;
$this->temp_body_images[$image_count][cid]=$cid;
$this->temp_body_images[$image_count][data]=$image_data;
$image_count ;
}
$this->temp_html_body=$passed.$html_body;
回傳true;
}
function build_content($bound_level=0,$text_body ,$html_body,$ hava_att=false)
{
if ($html_body)
{
if (eregi("{
$bound_level ;
if ($text_body)
{
$this->body .="內容類型:multipart/lated;
type="multipart/alternative";
tboundary="";
$this->body.=$this ->bound_begin.$bound_level.$ this ->bound_end.""rnrn";
}
else
{
$this->body.="Content-Type: multipart/相關;
tboundary="";
$this->body.=$this->bound_begin.$bound_level.$this->bound_end.""rnrn";
} // 判斷是否為text 正文、 html 正文有沒有,須有不同的MIME 頭
if (!$hava_att) $this->body.="這是一條MIME 格式的多部分訊息.rnrn";
// 正文標識,如果已經有附件的編碼,則在正文中需要這個
$this->body.="--".$this->bound_begin.$bound_level. $this->bound_end."rn";
$this->parse_html_body($html_body);
if ($text_body)
{
$this->body.="內容-類型:多部分/替代;
tboundary="";
$bound_level ;
$this->body.=$this->bound_begin.$bound_level.$this->bound_end。 🎜>$this->body.="--".$this->bound_begin.$bound_level.$this->bound_end."rn";
$this->body .="Content-Type: text/ plain;rn";
$this->body.="tcharset="$this->charset"rn";
$this->body.= "內容傳輸編碼:base64rn";
$ this->body.="rn".chunk_split(base64_encode(StripSlashes($text_body)))."rn";
$this->body .="--".$this->bound_begin.$bound_level。 $this->bound_end."rn";
$this->body.="Content-Type: text/html;rn" ;
$this->body.="tcharset="$this->字元集"rn";
$this->body.="Content-Transfer-Encoding: base64rn";
$this->body.="rn".chunk_split(base64_encode(StripSlashes($this-> temp_html_body) )))."rn";
$this->body.="--".$this ->bound_begin.$bound_level.$this->bound_end."--rnrn";
$ bound_level- -;
}
else
{
$this->body .="--".$this->bound_begin.$bound_level.$this->bound_end."rn";
$this->body.="Content-Type: text/html;rn" ;
$this->body.="tcharset="$this->charset"rn";
$this -> body.="內容傳輸編碼:base64rn";
$this->body.="rn".chunk_split(base64_encode(StripSlashes($this->temp_html_body)))."rn";} //正文編碼,有或沒有文字部分,編成不同的格式。
for ($i=0;$i
{
$this->body.="--".$this-> ;bound_begin .$bound_level.$this->bound_end."rn";
$this->body.="Content-Type:".$this->temp_body_images[$i][類型]." ;
名稱="";
$this->body.=$this->temp_body_images[$i][name].""rn";
$this->body.= "內容傳輸編碼:base64rn";
$this->body.="Content-ID: temp_body_images[$i][cid].">rn";
$this->body.="rn".chunk_split(base64_encode(StripSlashes($this->temp_body_images[$i][data])))."rn";
}
$ this- >body.="--".$this->bound_begin.$bound_level.$this->bound_end."--rnrn";
$bound_level--;
}
else // 有或沒有圖片,上面有圖片的處理,下面是沒有圖片的處理
{
$this->temp_html_body=$html_body;
if ($text_body)
{
$bound_level ;
$this->body.="Content-Type: multipart/alternative;
tboundary="";
$this->body.=$this->bound_begin.$bound_level.$this-> bound_end.""rnrn";
if (!$hava_att) $this->body.="rn這是一條MIME 格式的多部分訊息。 ="--".$this->bound_begin.$bound_level.$this->bound_end."rn";
$this->body.= "內容類型:text/plain;rn";
$ this->body.="tcharset="$this->charset"rn";
$this->body.="內容-傳輸編碼:base64rn";
$this->body.=" rn ".chunk_split(base64_encode(StripSlashes($text_body)))."rn";
$this->body.= "--".$this->bound_begin.$bound_level.$this->bound_end." rn ";
$this->body.="Content-Type: text/html;rn";
$this->body.="tcharset="$this->charset"rn";
$this->body.="內容傳輸編碼:base64rn";
$this ->body.="rn".chunk_split(base64_encode(StripSlashes($this->temp_html_body))))."rn" ;
$this->body.="--".$this-> ;bound_begin.$bound_level.$this->bound_end."--rnrn";
$bound_level--;
}
else
{
$this->body.= "Content-Type: text/html;rn";
$this->body.="tcharset="$this->charset" rn";
$this->body.="內容-傳輸編碼:base64rn";
$this->body.="rn".chunk_split(base64_encode(StripSlashes($this->temp_html_body))) ."rn ";
}//正文編碼,有或沒有文字部分,編成不同的格式。
}// end else
}
else // 如果沒有html 正文,只有text 正文
{
$this->body.="Content-Type: text/ plain;
tcharset="$this->charset"rn";
$this->body.="Content-Transfer-Encoding: base64rn";
$this->body.="rn" .chunk_split(base64_encode(StripSlashes($text_body)))."rn";
}
}// end function default
Function Buildbody($text_bodydbody($text_body,$. null,$att=null)
{
$this->body="MIME-Version: 1.0rn";
if (null==$att or (@count($att)==0 )) //如果沒有附件,查看正文的型別;
{
$encode_level=0;
$this->build_content($encode_level,$text_body,$html_body);
}//如果沒有附件,
// ***************************************** ***************
else //如果有附件,
{
$bound_level=0;
$this->body.="Content- Type: multipart/mixed;
tboundary="";
$bound_level ;
$this->body.=$this->bound_begin.$bound_level.$this->bound_end."""" rnrn";
$this->body.="This is a multi-part message in MIME format.rnrn";
$this->body.="--".$this->bound_begin.$ bound_level.$this->bound_end."rn";
$this->build_content($bound_level,$text_body,$html_body,true);// 編入正文部分
$num=count( $att);
for ($i=0;$i{
$file_name=$att[$i][name];
$file_source=$ att[$i][source];
$file_type=$att[$i][type];
$file_size=$att[$i][size];
if (file_exists ($file_source))
{
$file_data=addslashes(fread($fp=fopen($file_source,"r"), filesize($file_source)));
$file_data=chunk_split(base64_encode( StripSlashes($file_data)));
$this->body.="--".$this->bound_begin.$bound_level.$this->bound_end."rn";
$this->body .="Content-Type: $file_type;rntname="$file_name"rnContent-Transfer-Encoding: base64rn";
$this->body.="Content-Disposition: attachment;rntfilename="$file_name"rnrn" ;
$this->body.=$file_data."rn";
}
}//end for
$this->body.="--".$this ->bound_begin.$bound_level.$this->bound_end."--rnrn";
}// end else
if ($this->debug) echo nl2br(htmlspecialchars($this->身體));
return true;
}
function send($from_name,$to_name,$from_mail,$to_mail,$subject,$text_body=false,$text_body html_body=false,$att=false)
{
if (empty($from_mail) or empty($to_mail))
{
$this->err_str="沒有指定正確的郵件地址:發送人:".$from_mail."接收人:".$to_mail;
return false;
}
if (gettype($to_mail)!="array")
$to_mail=split(",",$to_mail);//如果不是數組,轉換成數組,即使只有一個發送物件;
if (gettype($to_name)!="array")
$to_name=split(",",$to_name);//如果不是數組,轉換成數組,即使只有一個發送物件;
$this->Buildbody($text_body,$html_body,$att );
// 所有信件的內容都是一樣的,可以只編一次,而對於不同的收信人,需要不同的Head
if (!$this->open() ) return false;
if (!$this->command("HELO $this->hostname",3,"250")) return false;
// 與伺服器建立連結
if (! $this->open()) return false;
if (!$this->command("HELO $this->hostname",3,"250")) return false;
for ( $i=0;$i
$this->Buildhead($from_name,$to_name[$i],$from_mail,$to_mail[$i], $subject);
if (!$this->command("RSET",3,"250")) return false;
if (!$this->command("MAIL FROM:".$from_mail ,3,"250")) return false;
if (!$this->command("RCPT TO:".$to_mail[$i],3,"250")) return false;
if (!$this->command("DATA",3,"354")) return false;
// 準備寄電子郵件
if ($this->debug) $this->outdebug("sending subject ;");
if (!fputs($this->connection,$this->subject)) {$this->err_str="發送郵件頭時發生錯誤! ";return false;}
if ($this->debug) $this->outdebug("sending body;");
if (!fputs($this->connection,$this->body) ) {$this->err_str="發送正文時出錯! ";return false;}
if (!fputs($this->connection,".rn")) {$this->err_str="發送正文時發生錯誤! ";return false;}//正文發送完畢,退出;
$resp=fgets($this->connection,256);
if($this->debug)
$this->outdebug ("$resp");
if (substr($resp,0,1)!="2")
{
$this->err_str="發送完後,伺服器沒有回應! !";
return false;
}
// 寄信
}
if (!$this->command("QUIT",3,"221")) return false;
$this->close();
return true;
}
}//end class define
}//end if(!isset($__smtp_class__))
}//end if(!isset($__smtp_class__))
?>
PHP SMTP類別使用方法
include("smtp.php");
$mail = new smtp("localhost") ;
$mail->debug = 0;
$sender_name = "root";
$sender_mail = "root@localhost";
$to_name = "mm";
$to_mail = "[email]mm@your.com[/email]";
$subject = "i miss u";
$content = "i miss u much.";
$att[0]["name"] = "miss.jpg";
$att[0]["source"] = "/path/to/your/miss.jpg";
$att[ 0]["type"] = "image/jpeg";
$att[0]["size"] = "10kb";
$extra_subject = "To:".$to_mail." 主題:" .$subject;
if (!$mail->send($sender_name,$to_name,$sender_mail,$to_mail,$extra_subject,$content,false,$att))
$err = 1 ;
?>
傳回檔案的MIME類型的函數guessMIMEType()
function guessMIMEType($filename) {
TY/GUESS MIMEME 🎜>$filename = basename($filename);
if(strrchr($filename,".") == false) {
return("application/octet-stream");
}
$ext = strrchr($filename,".");
switch($ext) {
case ".gif":
return "image/gif";
break;
case ".gz":
return "application/x-gzip";
case ".htm":
case ".html":
return "text/html";
break;
case ".jpg":
return "image/jpeg";
break;
case ".tar":
return "application/x-tar";
break;
case ".txt":
return "text/plain";
break;
case ".zip":
return "application/zip";
break;
default:
return "application/octet-stream";
break;
}
}
偵測Email位址的函數IsValidEmail()Is mail()Email
function IsValidEmail($Email) {
if(!ereg("^[[:alnum:]_.] @([[:alnum:]_] .) [[:alnum:]][[: alnum:]][[:alnum:]]?$",$Email, $regs)){
$IsValidEmail = false;
}
else
{
$IsValidEmail = true ;
}
return $IsValidEmail;
}
一個MIME MAIL類,請大家注意如何建構一個郵件體
class mime_mail
{
var $parts;
var $to;
var $from;
var $headers;
var $subject;
var $body;
/*
* void mime_mail()
* class constructor
*/
function mime_mail()
{
$this-parts = array() ;
$this->to = "";
$this->from = "";
$this->subject = "";
$this->body = "";
$this->headers = "";
}
/*
* void add_attachment(string message, [string name], [string ctype])
* Add an attachment to the mail object
*/
function add_attachment($message, $name = "", $ctype = "application/octet-stream")
{
$this->parts[] = array (
"ctype" => $ctype,
"message" => $message,
"encode" => $encode,
"name" => $name
);
}
/*
* void build_message(array part=
* Build message parts of an multipart mail
*/
$message = chunk_split(base64_encode($message));
$encoding = "base64";
return "Content-Type: " .$part["ctype"].
($part["name"]?";ntname="".$part["name"].""" : "").
"nContent- Transfer-Encoding: $encoding".
"nContent-Disposition: attachment".
($part["name"]?";ntfilename="".$part["name"].""" : "").
"nn$messagen";
}
/*
* void build_multipart()
* Build a multipart mail
*/
*/ build_multipart()
{
$boundary = "b".md5(uniqid(time()));
$multipart = "Content-Type: multipart/mixed;ntboundary="$boundary"nnThis is a MIME encoded message.nn--$boundary";
for($i = sizeof($this->parts)-1; $i >= 0; $i--)
{
$multipart .= "n".$this->build_message($this->parts[$i])."--$boundary";
}
return $multipart.= "--n ";
}
/*
* void send()
* Send the mail (last class-function to be called)
*/
function send()
{
$addtionheaders = "";
if (!empty($this->from))
$addtionheaders .= "From: ".$this->from."n";
if (!empty($this->headers))
$addtionheaders .= $this->headers."n";
if (!empty($this->body))
$this->add_attachment($this->body, "", "text/plain");
$addtionheaders .= "MIME-Version: 1.0n".$this->build_multipart( );
$fp = fopen("mail.txt","w");
fputs($fp,$addtionheaders);
fclose($fp);
mail( $this->to, $this->subject, "", $addtionheaders);
}
}; // 課程結束
/*
* 用法範例
*
$attachment = fread(fopen("test.jpg", "r"), filesize("測試.jpg"));
$mail = new mime_mail();
$mail->from = "[email]foo@bar.com[/email]";
$mail ->headers = "錯誤-收件者: [email]foo@bar.com[/email]";
$mail->to = "[email]bar@foo.com[/email]";
$mail->subject = "測試...";
$mail->body = "這只是一個測試。";
$mail->add_attachment("$attachment", "test.jpg ", "image/jpeg");
$mail->send();
*/
?>
myimap類,讀取郵件
//////////// /////////////////////////////// ///
//起源由Alpha.Z (5/21/ 2000)
//由Belltree 修改(11/01/2000)
////////////////////////////////////////// ////// /
class myimap
{
var $username="";
var $userpwd="";
var $hostname="";
var $port=0;
var $connection=0; // 是否連接
var $state="DISCONNECTED"; // 連線狀態
var $greeting="";
var $must_update=0;
var $inStream=0;
var $num_msg_parts = 0;
var $attach;
var $num_of_attach = 0;
function open()
{
if
function open()
{
if this->port==110)
$this->inStream=imap_open("{ ".$this->主機名稱."/pop3:110}收件匣",$this->使用者名稱,$this ->userpwd);
else
$this->inStream=imap_open(" {".$this->主機名稱.":143}INBOX",$this->使用者名稱,$this->userpwd );
if ($this->inStream)
{
//echo "使用者:$this->使用者名稱的信箱連線成功。
";
return $inStream;
}
else
{
echo "使用者:$this->使用者名稱的信箱連線失敗。
";
return 0;
}
}
函數close()
{
if(imap_close($this->inStream))
{
//echo "
已經與伺服器$this->hostname 中斷連線。 ";
return 1;
}
else
{
//echo "
與伺服器$this->主機名稱斷開連線失敗。 ";
return 0;
}
}
function DeleteMail($msg_no){
if (@imap_delete($this->inStream,$msg_no))
回傳true;
else
回傳false;
}
function ExpungeMail(){
if (@imap_expunge($this->inStream))
回傳true;
else
回傳false;
}
function CheckMailbox($page_size,$page)
{
$mboxinfo=imap__size,$page)
{
$mboxinfo ;
//$mboxinfo=imap_check( $this->inStream);
if ($mboxinfo)
if ($mboxinfo->Nmsgs>0)
{
//echo "您的信箱:".$mboxinfo-> ;信箱."
";
echo $this->使用者名稱."@wells.com的收件匣裡共有郵件數:".$mboxinfo-> Nmsgs."
n ";
echo "未讀取郵件數:".$mboxinfo->未讀取。
echo "總佔用空間:".$mboxinfo->Size."位元組
n";
$last_page = ceil($mboxinfo->Nmsgs/$page_size);
$cur_page = $page 1;
$num_page = $last_page;
echo "第".$cur_page."頁,共".$last_page."頁。n";
}
else
{
echo "您的信箱裡沒有郵件。
n";}else{echo '錯誤:無法取得包裹箱的資訊。';
return 0;
}
echo "n";
echo "
n";狀態
< ;td>寄件者 td>主題
時間
大小
$sortby="SORTDATE";
$sort_reverse=1 ;
$sorted = imap_sort($this->inStream, $sortby, $sort_reverse, SE_UID);
for ($ i=0;$iNmsgs;$i )
{
if (($i>=$page*$page_size) and ($i$msg_no = @imap_msgno($this->inStream, $ sorted[$i]);
$msgHeader = @imap_header($this->inStream, $msg_no);
/ /日期
if (isset($msgHeader->date))
{
$date = $msgHeader->date;
if (ord($date) > 64)
$date = substr($date, 5);
$date = substr($date, 5);
$datepart = split(" ",$date);
$date = $datepart[0]." " .$datepart[1]." ".$datepart[2]." ".$datepart[3 ];
/*
while (strstr(' ', $date))
{
$date = str_replace(' ', ' ', $date);
}
*/
}
if (isset($msgHeader->from[0]))
{
$from = $msgHeader->from[0];
if ( isset($from->個人))
{
$frm = trim($this- >decode_mime_string($from->個人));
if (isset($from->郵箱) && isset ($from->主機))
{
$frm_add = $from ->郵箱。 '@'。 $from->主機;
}
}
else
if (isset($from->郵箱) && isset($from->主機))
{
$frm = $from->郵箱。 '@'。 $from->host;
}
else
if (isset($msgHeader->fromaddress))
$frm = trim($h->fromaddress);
}
else
if (isset($msgHeader->fromaddress))
$frm = trim($msgHeader->fromaddress);
if (isset($msgHeader->fromaddress) toaddress))
$to = trim($msgHeader->toaddress);
else
$to = "未知";
if (isset($msgHeader->) ;subject))
$sub = trim($this->decode_mime_string($msgHeader->subject));
if ($sub == "")
$sub = "無主題" ;
if ( isset($msgHeader->Size))
$msg_size = ($msgHeader->Size > 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) 。 '...';
if ($msgHeader->Unseen == "U")
$newmail = "未讀";
else
$newmail = "已讀取";
echo "n"; n";
echo "
echo ''.$ frm.'
'.$sub.'
' .$date.'
'.$msg_size.' ';
echo "
}}
echo "n";
echo "n";
if ($page == 0)
echo " 第一頁 n";
else
echo " 第一頁
n";
if (($prev_page = $page-1) echo "前一頁 n";
else
echo " 前一頁
n";
if (($next_page = $page 1) >= $last_page)
echo "後一頁 n";
else
echo "後一頁 a> > ;n";
$last_page --;
if ( $last_page echo "最末頁 n";
else
echo "最末頁 n";
echo " n";
}
functiondecode_mime_string ( $string)
{
$pos = strpos($string, '=?');
if (!is_int($pos) )
{
return $string;
}
$preceding = substr($string, 0, $pos); // 儲存任何前面的文字
$ search = substr($string, $pos 2, 75); // mime 標頭規範規定這是最長的單一編碼字
$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))
{
return $string;
}
$encoded_text = substr($search, 0, $ end);
$rest = substr($string, (strlen($preceding . $charset . $encoding . $encoded_text) 6));
switch ($encoding)
{
switch ($encoding)
{
{
switch ($encoding)
{
{
switch ($encoding)
{
{
switch ($encoding)
{
{
switch ($encoding)
{
{
switch ($encoding)
{
{
switch ($encoding)
{
case 'Q':
case 'q':
$encoded_text = str_replace('_', ' ', $encoded_text);
$encoded_text = str_replace('=', '%', $ $編碼文字);
$decoded = urldecode($encoded_text);
break;
case 'B':
case 'b':
$decoded = urldecode(base64 $編碼文字));
break;
預設:
$decoded = '=?' 。 $this->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_struct($msg_num)
{
$struct=imap_fetchstruct($this->StreamStream $ msg_innum );
//echo gettype($struct);
return $struct;
}
函數proc_struct($msg_part, $part_no, $msg_num)
{ 🎜> {
if ($msg_part->ifdisposition)
{
// 看看它是否有支出,我唯一,這個將用於附件
/ / 無論如何,讓我們檢查一下
if ($msg_part->disposition == "attachment")
{
$att_name = "unknown";
for ($lcv = 0; $lcv 參數); $lcv )
{
$param = $msg_part->參數[$lcv];
if ($param->屬性 == "姓名")
{
$ att_name = $param->value;
break;
}
}
$att_name = $this->decode_mime_string($ att_name);
$att_path = $ this->使用者名稱."\".$att_name;
$this->attach[$this->num_of_attach]=$att_name; //登記附件清單
$this->num_of_attach ; //登記附件數量
/*
$att_path = $this->username."\".$this->decode_mime_string($att_name);
if ($this->attach="" )
$this->attach = $att_name;
else
$this->attach .= ";".$att_name;
*/
if (! is_dir($this- >使用者名稱))
mkdir($this->使用者名稱,0700);
$fp=fopen($att_path,"w");
switch ($msg_part->encoding)
{
情況 3: // base64
fputs($fp,imap_base64 (imap_base64 ( imap_fetchbody($this->inStream,$msg_num,$part_no)));
break;
狀況4: // QP
fputs($fp,imap_qprint(imap_fetchbody($this->; inStream, $msg_num,$part_no)));
break;
預設:
fputs($fp,imap_fetchbody($this->inStream,$msg_num,$part_no));
break ;
}
fclose($fp);
//if ($msg_part->type=="5"){
// echo "
// echo "