邮件接收类
根据网上找到的代码自己修改了一点。 添加了所有编码统一转换为utf-8进行保存。 支持嵌入式附件 无 源码与演示: 源码出处 ?php/** * NOTICE OF LICENSE * * THIS SOURCE FILE IS PART OF EVEBIT'S PRIVATE PROJECT. * * DO NOT USE THIS FILE IN OTHER PLACE
根据网上找到的代码自己修改了一点。
添加了所有编码统一转换为utf-8进行保存。
支持嵌入式附件
源码与演示:源码出处
<?php /** * NOTICE OF LICENSE * * THIS SOURCE FILE IS PART OF EVEBIT'S PRIVATE PROJECT. * * DO NOT USE THIS FILE IN OTHER PLACE. * * @category EveBit_Library * @package Application * @author Chen Qiao * @version $$Id: Email.PHP 175 2011-03-26 09:52:16Z chen.qiao $$ * @copyright Copyright (c) 2011 Evebit Inc. China (http://www.evebit.com) */ /** * Email class * * get mail total count,get mail list,get mail content,get mail attach * * For a example, if you want to get some specified email list. * * $mail = new Evebit_Mail(); * $mail->mailConnect($host,$port,$user,$pass,'INBOX',$ssl); * $mail->mail_list('5,9:20'); * * * show the five,and nine to twenty mail. * * $mail->mail_list('5,9:20'); * * * @docinfo * * @package Application * @author Chen Qiao * @version $$Id: Email.PHP 175 2011-03-26 09:52:16Z chen.qiao $$ */ class receiveMail { /** * @var resource $_connect */ private $_connect; /** * @var object $_mailInfo */ private $_mailInfo; /** * @var int $_total_count */ private $_total_count; /** * @var array $_total_count */ /** * __construct of the class */ public function __construct() { } /** * Open an IMAP stream to a mailbox * * @param string $host * @param string $port * @param string $user * @param string $pass * @param string $folder * @param string $ssl * @param string $pop * @return resource|bool */ public function connect($host,$port,$user,$pass,$folder="INBOX",$ssl,$pop=false) { if($pop){ $ssl = $pop.'/'.$ssl.'/novalidate-cert/notls'; } $this->_connect = imap_open("{"."$host:$port/$ssl"."}$folder",$user,$pass); if(!$this->_connect) { //Evebit_Application::getSession()->addError('cannot connect: ' . imap_last_error()); return false; } return $this->_connect; } /** * Get information about the current mailbox * * @return object|bool */ public function mailInfo(){ $this->_mailInfo = imap_mailboxmsginfo($this->_connection); if(!$this->_mailInfo) { echo "get mailInfo failed: " . imap_last_error(); return false; } return $this->_mailInfo; } /** * Read an overview of the information in the headers of the given message * * @param string $msg_range * @return array */ public function mail_list($msg_range='') { if ($msg_range) { $range=$msg_range; } else { $this->mail_total_count(); $range = "1:".$this->_total_count; } $overview = imap_fetch_overview($this->_connect,$range); foreach ($overview as $val) { $mail_list[$val->msgno]=$val->message_id; } return $mail_list; } /** * get the total count of the current mailbox * * @return int */ public function mail_total_count(){ $check = imap_check($this->_connect); $this->_total_count = $check->Nmsgs; return $this->_total_count; } /** * Read the header of the message * * @param string $msg_count * @return array */ public function mail_header($msg_count) { $mail_header = array(); $header=imap_header($this->_connect,$msg_count); if(strtolower($sender->mailbox)!='mailer-daemon' && strtolower($sender->mailbox)!='postmaster') { $mail_header['name']=$this->mail_decode($header -> subject); $mail_header['mid']=$header -> message_id; $mail_header['to']=$this->contact_conv($header -> to); $mail_header['from']=$this->contact_conv($header -> from); $mail_header['cc']=$this->contact_conv($header -> cc); $mail_header['reply_to']=$this->contact_conv($header -> reply_to); $create_time=explode(",",$header -> date); if (strlen($create_time[0])>6){ $create_time=$create_time[0]; }else{ $create_time=$create_time[1]; } $mail_header['create_time']=strtotime($create_time); $subject = $header -> subject; $charset = substr($subject, stripos($subject, "=?") + 2, stripos($subject, "?", 3)-2); $content=$this->get_body($msg_count); //$mail_header['content']=$this->auto_charset($content, $charset, 'utf-8'); $mail_header['content']=$content; } return $mail_header; } /** * decode the subject of chinese * * @param string $subject * @return sting */ function mail_decode($str) { if (stripos($str, 'GBK?B')) { $arr_temp = explode(" ", $str); for ($i = 0;$i <= count($arr_temp);$i++) { $tmp = str_ireplace('=?GBK?B?', '', $arr_temp[$i]); $tmp = str_ireplace('=?', '', $tmp); $tmp2 = $tmp2 . auto_charset(base64_decode($tmp), 'gb2312', 'utf-8'); } return $tmp2 ; } if (stripos($str, 'GBK?Q')) { $arr_temp = explode(" ", $str); for ($i = 0;$i <= count($arr_temp);$i++) { $tmp = str_ireplace('=?GBK?B?', '', $arr_temp[$i]); $tmp = str_ireplace('=?', '', $tmp); $tmp2 = $tmp2 . auto_charset(base64_decode($tmp), 'gb2312', 'utf-8'); } return $tmp2 ; } if (stripos($str, 'utf-8?B')) { $arr_temp = explode(" ", $str); // dump($arr_temp[0]); for ($i = 0;$i <= count($arr_temp);$i++) { $tmp = str_ireplace('=?utf-8?B?', '', $arr_temp[$i]); $tmp = str_ireplace('=?', '', $tmp); $tmp2 = $tmp2 . base64_decode($tmp); } return $tmp2 ; } if (stripos($str, 'utf-8?Q')) { $arr_temp = explode(" ", $str); for ($i = 0;$i <= count($arr_temp);$i++) { $tmp = str_ireplace('=?utf-8?Q?', '', $arr_temp[$i]); $tmp = str_ireplace('=?', '', $tmp); $tmp = str_ireplace('?', '', $tmp); $tmp2 = $tmp2 . quoted_printable_decode($tmp); } return $tmp2 ; } if (stripos($str, 'gb2312?B')) { $arr_temp = explode(" ", $str); for ($i = 0;$i <= count($arr_temp);$i++) { $tmp = str_ireplace('=?gb2312?B?', '', $arr_temp[$i]); $tmp = str_ireplace('=?', '', $tmp); $tmp2 = $tmp2 . auto_charset(base64_decode($tmp), 'gb2312', 'utf-8'); } return $tmp2 ; } if (stripos($str, 'gb2312?Q')) { $arr_temp = explode(" ", $str); for ($i = 0;$i <= count($arr_temp);$i++) { $tmp = str_ireplace('=?gb2312?Q?', '', $arr_temp[$i]); $tmp = str_ireplace('=?', '', $tmp); $tmp = str_ireplace('?', '', $tmp); $tmp2 = $tmp2 . auto_charset(quoted_printable_decode($tmp),'gb2312','utf-8'); } return $tmp2 ; } if (stripos($str, 'gb18030?B')) { $arr_temp = explode(" ", $str); // dump($arr_temp[0]); for ($i = 0;$i <= count($arr_temp);$i++) { $tmp = str_ireplace('=?gb18030?B?', '', $arr_temp[$i]); $tmp = str_ireplace('=?', '', $tmp); $tmp2 = $tmp2 . auto_charset(base64_decode($tmp), 'gb2312', 'utf-8'); } return $tmp2 ; } if (stripos($str, 'gb18030?Q')) { $arr_temp = explode(" ", $str); for ($i = 0;$i <= count($arr_temp);$i++) { $tmp = str_ireplace('=?gb18030?Q?', '', $arr_temp[$i]); $tmp = str_ireplace('=?', '', $tmp); $tmp = str_ireplace('?', '', $tmp); $tmp2 = $tmp2 . auto_charset(quoted_printable_decode($tmp),'gb18030','utf-8'); } return $tmp2 ; } return $str; } function auto_charset($fContents,$from,$to){ $from = strtoupper($from)=='UTF8'? 'utf-8':$from; $to = strtoupper($to)=='UTF8'? 'utf-8':$to; if( strtoupper($from) === strtoupper($to) || empty($fContents) || (is_scalar($fContents) && !is_string($fContents)) ){ //如果编码相同或者非字符串标量则不转换 return $fContents; } if(is_string($fContents) ) { if(function_exists('mb_convert_encoding')){ return mb_convert_encoding ($fContents, $to, $from); }elseif(function_exists('iconv')){ return iconv($from,$to,$fContents); }else{ return $fContents; } } elseif(is_array($fContents)){ foreach ( $fContents as $key => $val ) { $_key = auto_charset($key,$from,$to); $fContents[$_key] = auto_charset($val,$from,$to); if($key != $_key ) unset($fContents[$key]); } return $fContents; } else{ return $fContents; } } /** * Mark a message for deletion from current mailbox * * @param string $msg_count */ public function delete($msg_count) { imap_delete($this->_connect,$msg_count); } /** * get attach of the message * * @param string $msg_count * @param string $path * @return array */ public function get_attach($msg_count,$path) { if(!$this->_connect) return false; $struckture = imap_fetchstructure($this->_connect,$msg_count); $ar=""; if($struckture->parts) { foreach($struckture->parts as $key => $value) { $enc=$struckture->parts[$key]->encoding; if($struckture->parts[$key]->ifdparameters) { $name=$this->mail_decode($struckture->parts[$key]->dparameters[0]->value); $cid=$struckture->parts[$key]->id; $cid=substr($cid,1,strlen($cid)-2); $disposition=$struckture->parts[$key]->disposition; $name=$cid."_".$disposition."_".$name; $message = imap_fetchbody($this->_connect,$msg_count,$key+1); if ($enc == 0) $message = imap_8bit($message); if ($enc == 1) $message = imap_8bit ($message); if ($enc == 2) $message = imap_binary ($message); if ($enc == 3) $message = imap_base64 ($message); if ($enc == 4) $message = quoted_printable_decode($message); if ($enc == 5) $message = $message; $fp=fopen($path.urlencode($name),"w"); fwrite($fp,$message); fclose($fp); $ar=$ar.$name.","; } if($struckture->parts[$key]->parts) { foreach($struckture->parts[$key]->parts as $keyb => $valueb) { $enc=$struckture->parts[$key]->parts[$keyb]->encoding; if($struckture->parts[$key]->parts[$keyb]->ifdparameters) { $name=$this->mail_decode($struckture->parts[$key]->parts[$keyb]->dparameters[0]->value); $id=$struckture->parts[$key]->parts[$keyb]->id; $disposition=$struckture->parts[$key]->parts[$keyb]->disposition; $name=$id."_".$disposition."_".$name; $partnro = ($key+1).".".($keyb+1); $message = imap_fetchbody($this->_connect,$msg_count,$partnro); if ($enc == 0) $message = imap_8bit($message); if ($enc == 1) $message = imap_8bit ($message); if ($enc == 2) $message = imap_binary ($message); if ($enc == 3) $message = imap_base64 ($message); if ($enc == 4) $message = quoted_printable_decode($message); if ($enc == 5) $message = $message; $fp=fopen($path.urlencode($name),"w"); fwrite($fp,$message); fclose($fp); $ar=$ar.$name.","; } } } } } $ar=substr($ar,0,(strlen($ar)-1)); return $ar; } /** * download the attach of the mail to localhost * * @param string $file_path * @param string $message * @param string $name */ public function down_attach($file_path,$name,$message) { if(is_dir($file_path)) { $file_open = fopen($file_path.$name,"w"); } else { mkdir($file_path,"0777",true); } fwrite($file_open,$message); fclose($file_open); } /** * get the body of the message * * @param string $msg_count * @return string */ public function get_body($msg_count) { $body = $this->get_part($msg_count, "TEXT/HTML"); if ($body == '') { $body = $this->get_part($msg_count, "TEXT/PLAIN"); } if ($body == ''){ return ''; } return $this->mail_decode($body); } /** * Read the structure of a particular message and fetch a particular * section of the body of the message * * @param string $msg_count * @param string $mime_type * @param object $structure * @param string $part_no * @return string|bool */ private function get_part($msg_count, $mime_type, $structure = false, $part_no = false) { if(!$structure) { $structure = imap_fetchstructure($this->_connect, $msg_count); } if($structure) { if($mime_type == $this->get_mime_type($structure)) { if(!$part_no) { $part_no = "1"; } $from_encoding = $structure->parameters[0]->value; $text = imap_fetchbody($this->_connect, $msg_count, $part_no); if($structure->encoding == 3) { $text = imap_base64($text); } else if($structure->encoding == 4) { $text = imap_qprint($text); } $text = mb_convert_encoding($text,'utf-8',$from_encoding); return $text; } if($structure->type == 1) { while(list($index, $sub_structure) = each($structure->parts)) { if($part_no) { $prefix = $part_no . '.'; } $data = $this->get_part($msg_count, $mime_type, $sub_structure, $prefix . ($index + 1)); if($data){ return $data; } } } } return false; } /** * get the subtype and type of the message structure * * @param object $structure */ private function get_mime_type($structure) { $mime_type = array("TEXT", "MULTIPART", "MESSAGE", "APPLICATION", "AUDIO", "IMAGE", "VIDEO", "OTHER"); if($structure->subtype) { return $mime_type[(int) $structure->type] . '/' . $structure->subtype; } return "TEXT/PLAIN"; } /** * put the message from unread to read * * @param string $msg_count * @return bool */ public function mail_read($msg_count) { $status = imap_setflag_full($this->_connect, $msg_count , "//Seen"); return $status; } /** * Close an IMAP stream */ public function close_mail() { imap_close($this->_connect,CL_EXPUNGE); } function contact_conv($contact){ foreach($contact as $vo) { if (isset($vo -> personal)) { $tmp = $tmp.$this->mail_decode($vo -> personal)."|".$vo -> mailbox . '@' . $vo -> host.';'; } else { $tmp = $tmp.$this->mail_decode($vo -> mailbox)."|".$vo -> mailbox . '@' . $vo -> host.';'; } return $tmp; } } } ?>

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Adakah ikon mel Outlook tiada daripada Panel Kawalan Windows 11? Keadaan yang tidak dijangka ini telah menyebabkan kekeliruan dan kebimbangan di kalangan sesetengah individu yang bergantung pada OutlookMail untuk keperluan komunikasi mereka. Mengapa e-mel Outlook saya tidak dipaparkan dalam Panel Kawalan? Mungkin terdapat beberapa sebab yang mungkin mengapa tiada ikon mel Outlook dalam Panel Kawalan: Outlook tidak dipasang dengan betul. Memasang aplikasi Office daripada Microsoft Store tidak menambah applet Mel pada Panel Kawalan. Lokasi fail mlcfg32.cpl dalam Panel Kawalan tiada. Laluan ke fail mlcfg32.cpl dalam pendaftaran adalah salah. Sistem pengendalian tidak dikonfigurasikan pada masa ini untuk menjalankan aplikasi ini

1. Mula-mula buka DingTalk. 2. Buka sembang kumpulan dan klik tiga titik di penjuru kanan sebelah atas. 3. Cari nama panggilan saya dalam kumpulan ini. 4. Klik untuk masuk untuk mengubah suai dan menyimpan.

Pensijilan Douyin Blue V ialah pensijilan rasmi syarikat atau jenama pada platform Douyin, yang membantu meningkatkan imej dan kredibiliti jenama. Dengan pelarasan strategi pembangunan korporat atau kemas kini imej jenama, syarikat mungkin ingin menukar nama pensijilan Douyin Blue V. Jadi, bolehkah Douyin Blue V menukar namanya? Jawapannya ya. Artikel ini akan memperkenalkan secara terperinci langkah-langkah untuk mengubah suai nama akaun Douyin Blue V perusahaan. 1. Bolehkah Douyin Blue V menukar namanya? Anda boleh menukar nama akaun Douyin Blue V. Menurut peraturan rasmi Douyin, akaun diperakui Blue V korporat boleh memohon untuk menukar nama akaun mereka selepas memenuhi syarat tertentu. Secara umumnya, perusahaan perlu menyediakan bahan sokongan yang berkaitan, seperti lesen perniagaan, sijil kod organisasi, dll., untuk membuktikan kesahihan dan keperluan menukar nama. 2. Apakah langkah-langkah untuk mengubah suai nama akaun korporat Douyin Blue V?

Jika anda perlu memprogramkan sebarang peranti dari jauh, artikel ini akan membantu anda. Kami akan berkongsi kod jauh universal GE teratas untuk pengaturcaraan sebarang peranti. Apakah alat kawalan jauh GE? GEUniversalRemote ialah alat kawalan jauh yang boleh digunakan untuk mengawal berbilang peranti seperti TV pintar, LG, Vizio, Sony, Blu-ray, DVD, DVR, Roku, AppleTV, pemain media penstriman dan banyak lagi. Alat kawalan jauh GEUniversal datang dalam pelbagai model dengan fungsi dan keupayaan yang berbeza. GEUniversalRemote boleh mengawal sehingga empat peranti. Kod Jauh Universal Teratas untuk Diprogramkan pada Mana-mana Peranti Alat kawalan jauh GE disertakan dengan set kod yang membolehkannya berfungsi dengan peranti yang berbeza. anda boleh

Petua Pengubahsuaian Masa Tidur Win10 Didedahkan Sebagai salah satu sistem pengendalian yang digunakan secara meluas pada masa ini, Windows 10 mempunyai fungsi tidur untuk membantu pengguna menjimatkan kuasa dan melindungi skrin apabila tidak menggunakan komputer. Walau bagaimanapun, kadangkala masa tidur lalai tidak memenuhi keperluan pengguna, jadi amat penting untuk mengetahui cara mengubah suai masa tidur Win10. Artikel ini akan mendedahkan petua untuk mengubah suai masa tidur Win10, membolehkan anda menyesuaikan tetapan tidur sistem dengan mudah. 1. Ubah suai masa tidur Win10 melalui "Tetapan" Pertama, pembetulan yang paling mudah

Sebagai seorang pengaturcara, saya teruja dengan alatan yang memudahkan pengalaman pengekodan. Dengan bantuan alat kecerdasan buatan, kami boleh menjana kod demo dan membuat pengubahsuaian yang diperlukan mengikut keperluan. Alat Copilot yang baru diperkenalkan dalam Visual Studio Code membolehkan kami mencipta kod yang dijana AI dengan interaksi sembang bahasa semula jadi. Dengan menerangkan kefungsian, kami dapat memahami dengan lebih baik maksud kod sedia ada. Bagaimana untuk menggunakan Copilot untuk menjana kod? Untuk bermula, kami terlebih dahulu perlu mendapatkan sambungan PowerPlatformTools yang terkini. Untuk mencapai ini, anda perlu pergi ke halaman sambungan, cari "PowerPlatformTool" dan klik butang Pasang

Apabila menerbitkan produk pada platform Xianyu, pengguna boleh menyesuaikan maklumat lokasi geografi produk mengikut situasi sebenar, supaya bakal pembeli dapat memahami lokasi tertentu produk dengan lebih tepat. Setelah produk berjaya diletakkan di rak, tidak perlu risau jika lokasi penjual berubah. Platform Xianyu menyediakan fungsi pengubahsuaian yang fleksibel dan mudah, jadi apabila kami ingin mengubah suai alamat produk yang diterbitkan, bagaimana kami mengubahnya dengan panduan langkah demi langkah yang terperinci tolong semua. Bagaimana untuk mengubah suai alamat produk keluaran di Xianyu? 1. Buka Xianyu, klik pada apa yang saya terbitkan, pilih produk, dan klik edit. 2. Klik ikon kedudukan dan pilih alamat yang ingin anda tetapkan.

Bekerja dengan fail dalam sistem pengendalian Linux memerlukan penggunaan pelbagai arahan dan teknik yang membolehkan pembangun mencipta dan melaksanakan fail, kod, program, skrip dan perkara lain dengan cekap. Dalam persekitaran Linux, fail dengan sambungan ".a" mempunyai kepentingan yang besar sebagai perpustakaan statik. Perpustakaan ini memainkan peranan penting dalam pembangunan perisian, membolehkan pembangun mengurus dan berkongsi fungsi biasa dengan cekap merentas berbilang program. Untuk pembangunan perisian yang berkesan dalam persekitaran Linux, adalah penting untuk memahami cara mencipta dan menjalankan fail ".a". Artikel ini akan memperkenalkan cara memasang dan mengkonfigurasi fail ".a" Linux secara menyeluruh Mari kita terokai definisi, tujuan, struktur dan kaedah mencipta dan melaksanakan fail ".a" Linux. Apa itu L
