receivemail是一個專門用來接收郵件的php類,支援pop3和imap等郵件協定。可以接收郵件及郵件附件。
中文亂碼解決

/**
* decode the subject of chinese
*
* @param string $subject
* @return sting
*/
public function subjectdecode($subject) {
$beginstr = substr($subject, 0, 5);
if($beginstr == '=?iso') {
$separator = '=?iso-2022-jp';
$toencoding = 'iso-2022-jp';
} else {
$separator = '=?gb2312';
$toencoding = 'gb2312';
}
$encode = strstr($subject, $separator);
if ($encode) {
$explodearr = explode($separator, $subject);
$length = count($explodearr);
$subjectarr = array();
for($i = 0; $i < $length / 2; $i++) {
$subjectarr[$i][] = $explodearr[$i * 2];
if (@$explodearr[$i * 2 + 1]) {
$subjectarr[$i][] = $explodearr[$i * 2 + 1];
}
}
foreach ($subjectarr as $arr) {
$subsubject = implode($separator, $arr);
if (count($arr) == 1) {
$subsubject = $separator . $subsubject;
$begin = strpos($subsubject, "=?");
$end = strpos($subsubject, "?=");
$beginstr = '';
$endstr = '';
if ($end > 0) {
if ($begin > 0) {
$beginstr = substr($subsubject, 0, $begin);
}
if ((strlen($subsubject) - $end) > 2) {
$endstr = substr($subsubject, $end + 2, strlen($subsubject) - $end - 2);
$str = substr($subsubject, 0, $end - strlen($subsubject));
$pos = strrpos($str, "?");
$str = substr($str, $pos + 1, strlen($str) - $pos);
$subsubject = $beginstr . imap_base64($str) . $endstr;
$subsubjectarr[] = iconv ( $toencoding, 'utf-8', $subsubject );
// mb_convert_encoding($subsubject, 'utf-8' ,'gb2312,iso-2022-jp');
$subject = implode('', $subsubjectarr);
return $subject;
}
if(strtolower($sender->mailbox)!='mailer-daemon' && strtolower($sender->mailbox)!='postmaster')
{ $subject = $this->subjectdecode($mail_header->subject);
使用方法如下:

<?php
include("receivemail.class.php");
// 建立一個 recivemail 對象
$obj = new receivemail('[email protected]','*','[email protected]','pop.163.com','pop3','110',false);
// 連接配接到郵件伺服器
$obj->connect(); //if connection fails give error message and exit
// 讀取全部信件
$tot = $obj->gettotalmails(); //total mails in inbox return integer value
echo "收到$tot封郵件::<br>";
for($i = $tot; $i > 0; $i--)
{
$head = $obj->getheaders($i); // 讀取擷取郵件頭資訊,傳回數組 **數組鍵值為 (subject,to,tooth,tonameoth,from,fromname)
echo "主題 :: ".$head['subject']."<br>";
echo "收件人 :: ".$head['to']."<br>";
echo "抄送 :: ".$head['tooth']."<br>";
echo "發件人 :: ".$head['from']."<br>";
echo "發件人名稱 :: ".$head['fromname']."<br>";
echo "<br><br>";
echo "<br>*******************************************************************************************<br>";
echo $obj->getbody($i); // 郵件正文
$str = $obj->getattach($i,"./"); // 擷取郵件附件,傳回的檔案名以逗号隔開。 例如. (mailid, path to store file)
$ar = explode(",",$str);
foreach($ar as $key=>$value)
echo ($value == "") ? "" : "atteched file :: " . $value . "<br>";
echo "<br>------------------------------------------------------------------------------------------<br>";
//$obj->deletemails($i); // delete mail from mail box
}
$obj->close_mailbox(); //close mail box
?>
receivemail.class.php需要imap子產品支援。

$imap = imap_open("{localhost}mbox-bak","graeme","inferno");
// get recent messages
$number = imap_num_recent($imap);
echo "number of recent messages: $number<br>\n";
// display subjects of messages
for ($i=1; $i<=$number; $i++) {
$header = imap_header($imap, $i);
echo "subject: ", $header->subject, "<br>\n";
imap_close($imap);
imap_append : 附加字元串到指定的郵箱中。
imap_base64 : 解 base64 編碼。
imap_body : 讀信的内文。
imap_check : 傳回郵箱資訊。
imap_close : 關閉 imap 連結。
imap_createmailbox : 建立新的信箱。
imap_delete : 标記欲删除郵件。
imap_deletemailbox : 删除既有信箱。
imap_expunge : 删除已标記的郵件。
imap_fetchbody : 從信件内文取出指定部分。
imap_fetchstructure : 擷取某信件的結構資訊。
imap_header : 擷取某信件的标頭資訊。
imap_headers : 擷取全部信件的标頭資訊。
imap_listmailbox : 擷取郵箱列示。
imap_listsubscribed : 擷取訂閱郵箱列示。
imap_mail_copy : 複制指定信件到它處郵箱。
imap_mail_move : 移動指定信件到它處郵箱。
imap_num_msg : 取得信件數。
imap_num_recent : 取得新進信件數。
imap_open : 打開 imap 連結。
imap_ping : 檢查 imap 是否連接配接。
imap_renamemailbox : 更改郵箱名字。
imap_reopen : 重開 imap 連結。
imap_subscribe : 訂閱郵箱。
imap_undelete : 取消删除郵件标記。
imap_unsubscribe : 取消訂閱郵箱。
imap_qprint : 将 qp 編碼轉成八位。
imap_8bit : 将八位轉成 qp 編碼。
imap_binary : 将八位轉成 base64 編碼。
imap_scanmailbox : 尋找信件有無特定字元串。
imap_mailboxmsginfo : 取得目前郵箱的資訊。
imap_rfc822_write_address : 電子郵件位址标準化。
imap_rfc822_parse_adrlist : 解析電子郵件位址。
imap_setflag_full : 配置信件标志。
imap_clearflag_full : 清除信件标志。
imap_sort : 将信件标頭排序。
imap_fetchheader : 取得原始标頭。
imap_uid : 取得信件 uid。
imap_getmailboxes : 取得全部信件詳細資訊。
imap_getsubscribed : 列出所有訂閱郵箱。
imap_msgno : 列出 uid 的連續信件。
imap_search : 搜尋指定标準的信件。
imap_last_error : 最後的錯誤資訊。
imap_errors : 所有的錯誤資訊。
imap_alerts : 所有的警告資訊。
imap_status : 目前的狀态資訊。