IMAP、POP3 および NNTP

  • はじめに
  • インストール/設定
  • 定義済み定数
  • IMAP 関数
    • imap_8bit — 8 ビット文字列を quoted-printable 文字列に変換する
    • imap_alerts — 発生した IMAP 警告メッセージを返す
    • imap_append — 指定されたメールボックスに文字列メッセージを追加する
    • imap_base64 — BASE64 でエンコードされたテキストをデコードする
    • imap_binary — 8 ビット文字列を base64 文字列に変換する
    • imap_body — メッセージ本文を読む
    • imap_bodystruct — 指定したメッセージの指定した body セクションの構造を読み込む
    • imap_check — 現在のメールボックスをチェックする
    • imap_clearflag_full — メッセージのフラグをクリアする
    • imap_close — IMAP ストリームをクローズする
    • imap_create — imap_createmailbox のエイリアス
    • imap_createmailbox — 新しいメールボックスを作る
    • imap_delete — 現在のメールボックスから削除するメッセージに印を付ける
    • imap_deletemailbox — メールボックスを削除する
    • imap_errors — 発生したすべての IMAP エラーを返す
    • imap_expunge — 削除用にマークされたすべてのメッセージを削除する
    • imap_fetch_overview — 指定したメッセージのヘッダ情報の概要を読む
    • imap_fetchbody — メッセージ本文中の特定のセクションを取り出す
    • imap_fetchheader — メッセージのヘッダを返す
    • imap_fetchmime — メッセージの特定のセクションに対する MIME ヘッダを取り出します
    • imap_fetchstructure — 特定のメッセージの構造を読み込む
    • imap_fetchtext — imap_body のエイリアス
    • imap_gc — IMAP キャッシュをクリアする
    • imap_get_quota — クオータレベルの設定、メールボックス毎の使用状況を取得する
    • imap_get_quotaroot — ユーザー単位のクォータ設定を取得する
    • imap_getacl — 与えられたメールボックスの ACL を取得する
    • imap_getmailboxes — メールボックスのリストを読み込み、各ボックスに関する詳細な情報を返す
    • imap_getsubscribed — 購読中の全メールボックスの一覧を取得する
    • imap_header — imap_headerinfo のエイリアス
    • imap_headerinfo — メッセージヘッダを読み込む
    • imap_headers — メールボックス内のすべてのメッセージのヘッダを返す
    • imap_is_open — IMAP ストリームがまだ有効かを調べる
    • imap_last_error — ページリクエスト時に生じた直近の IMAP エラーを返す
    • imap_list — メールボックスのリストを読み込む
    • imap_listmailbox — imap_list のエイリアス
    • imap_listscan — 指定したテキストにマッチするメールボックスの一覧を返す
    • imap_listsubscribed — imap_lsub のエイリアス
    • imap_lsub — 購読しているすべてのメールボックスの一覧を得る
    • imap_mail_compose — 指定したエンベロープおよびボディセクションに基づいて MIME メッセージを作成する
    • imap_mail_copy — 指定されたメッセージをメールボックスにコピーする
    • imap_mail_move — 指定されたメッセージをメールボックスに移動する
    • imap_mail — e-mail メッセージを送信する
    • imap_mailboxmsginfo — 現在のメールボックスに関する情報を得る
    • imap_mime_header_decode — MIME ヘッダ要素をデコードする
    • imap_msgno — 指定した UID のメッセージ番号を返す
    • imap_mutf7_to_utf8 — 修正UTF-7文字列をUTF-8にデコードする
    • imap_num_msg — 現在のメールボックスのメッセージ数を取得する
    • imap_num_recent — 現在のメールボックスにある新規メッセージ数を取得する
    • imap_open — メールボックスへの IMAP ストリームをオープンする
    • imap_ping — IMAP ストリームがアクティブかどうかを調べる
    • imap_qprint — quoted-printable 文字列を 8 ビット文字列に変換する
    • imap_rename — imap_renamemailbox のエイリアス
    • imap_renamemailbox — メールボックスの名前を変更する
    • imap_reopen — 新規メールボックスへの IMAP ストリームを再度オープンする
    • imap_rfc822_parse_adrlist — アドレス文字列を解釈します
    • imap_rfc822_parse_headers — 文字列からメールヘッダを解釈する
    • imap_rfc822_write_address — 指定したメールボックス、ホスト、個人情報を、 電子メールアドレスとして適当な形式にして返す
    • imap_savebody — 指定した本文部をファイルに保存する
    • imap_scan — imap_listscan のエイリアス
    • imap_scanmailbox — imap_listscan のエイリアス
    • imap_search — 指定した検索条件にマッチするメッセージを配列として返す
    • imap_set_quota — 指定したメールボックスにクォータを設定する
    • imap_setacl — 指定したメールボックスの ACL を設定する
    • imap_setflag_full — メッセージにフラグをセットする
    • imap_sort — メッセージヘッダの配列をソートする
    • imap_status — 現在のメールボックス以外のメールボックスのステータス情報を返す
    • imap_subscribe — メールボックスを購読する
    • imap_thread — スレッド化したメッセージのツリーを返す
    • imap_timeout — imap タイムアウトを設定あるいは取得する
    • imap_uid — 指定したメッセージシーケンス番号の UID を返す
    • imap_undelete — 削除マークがついているメッセージのマークをはずす
    • imap_unsubscribe — メールボックスの購読をやめる
    • imap_utf7_decode — 修正版 UTF-7 エンコードされた文字列をデコードする
    • imap_utf7_encode — ISO-8859-1 文字列を修正版 UTF-7 テキストに変換する
    • imap_utf8_to_mutf7 — UTF-8 文字列を修正UTF-7にエンコードする
    • imap_utf8 — MIME エンコードされたテキストを UTF-8 に変換する
  • IMAP\Connection — IMAP\Connection クラス
add a note add a note

User Contributed Notes 3 notes

up
40
Wil Barath
14 years ago
For all the people coming here praying for:

1) a dead-easy way to read MIME attachments, or
2) a dead-easy way to access POP3 folders

Look no further.

<?php
function pop3_login($host,$port,$user,$pass,$folder="INBOX",$ssl=false)
{
   
$ssl=($ssl==false)?"/novalidate-cert":"";
    return (
imap_open("{"."$host:$port/pop3$ssl"."}$folder",$user,$pass));
}
function
pop3_stat($connection)       
{
   
$check = imap_mailboxmsginfo($connection);
    return ((array)
$check);
}
function
pop3_list($connection,$message="")
{
    if (
$message)
    {
       
$range=$message;
    } else {
       
$MC = imap_check($connection);
       
$range = "1:".$MC->Nmsgs;
    }
   
$response = imap_fetch_overview($connection,$range);
    foreach (
$response as $msg) $result[$msg->msgno]=(array)$msg;
        return
$result;
}
function
pop3_retr($connection,$message)
{
    return(
imap_fetchheader($connection,$message,FT_PREFETCHTEXT));
}
function
pop3_dele($connection,$message)
{
    return(
imap_delete($connection,$message));
}
function
mail_parse_headers($headers)
{
   
$headers=preg_replace('/\r\n\s+/m', '',$headers);
   
preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)?\r\n/m', $headers, $matches);
    foreach (
$matches[1] as $key =>$value) $result[$value]=$matches[2][$key];
    return(
$result);
}
function
mail_mime_to_array($imap,$mid,$parse_headers=false)
{
   
$mail = imap_fetchstructure($imap,$mid);
   
$mail = mail_get_parts($imap,$mid,$mail,0);
    if (
$parse_headers) $mail[0]["parsed"]=mail_parse_headers($mail[0]["data"]);
    return(
$mail);
}
function
mail_get_parts($imap,$mid,$part,$prefix)
{   
   
$attachments=array();
   
$attachments[$prefix]=mail_decode_part($imap,$mid,$part,$prefix);
    if (isset(
$part->parts)) // multipart
   
{
       
$prefix = ($prefix == "0")?"":"$prefix.";
        foreach (
$part->parts as $number=>$subpart)
           
$attachments=array_merge($attachments, mail_get_parts($imap,$mid,$subpart,$prefix.($number+1)));
    }
    return
$attachments;
}
function
mail_decode_part($connection,$message_number,$part,$prefix)
{
   
$attachment = array();

    if(
$part->ifdparameters) {
        foreach(
$part->dparameters as $object) {
           
$attachment[strtolower($object->attribute)]=$object->value;
            if(
strtolower($object->attribute) == 'filename') {
               
$attachment['is_attachment'] = true;
               
$attachment['filename'] = $object->value;
            }
        }
    }

    if(
$part->ifparameters) {
        foreach(
$part->parameters as $object) {
           
$attachment[strtolower($object->attribute)]=$object->value;
            if(
strtolower($object->attribute) == 'name') {
               
$attachment['is_attachment'] = true;
               
$attachment['name'] = $object->value;
            }
        }
    }

   
$attachment['data'] = imap_fetchbody($connection, $message_number, $prefix);
    if(
$part->encoding == 3) { // 3 = BASE64
       
$attachment['data'] = base64_decode($attachment['data']);
    }
    elseif(
$part->encoding == 4) { // 4 = QUOTED-PRINTABLE
       
$attachment['data'] = quoted_printable_decode($attachment['data']);
    }
    return(
$attachment);
}
?>

[EDIT BY danbrown AT php DOT net: Contains a bugfix by "mn26826" on 09-JUN-2010, which fixed the erroneous reference to $imap as the parameter passed to imap_mailboxmsginfo() within the user function pop3_stat().  This was intended to be $connection.]

[EDIT BY visualmind AT php DOT net: Contains a bugfix by "elias-jobview" on 17-AUG-2010, which fixed the error in pop3_list function which didn't have: return $result]

[EDIT BY danbrown AT php DOT net: Contains a bugfix by "chrismeistre" on 09-SEP-2010, which fixed the erroneous reference to $mbox (should be $connection) in the pop3_list() function.]
up
-10
opto
12 years ago
it seems that in new PHP versions, $ssl must be specified even if no ssl is used - I got it working for POP3 only after adding /notls (honour some post I found somewhere)
Klaus
up
-26
dev at bluehead dot com dot br
12 years ago
Because I don't know regular expressions, I hacked the mail_parse_headers() to properly get the last line from the header string:

<?php
function mail_parse_headers($headers)
{

   
$headers=preg_replace('/\r\n\s+/m', '',$headers);
   
$headers=trim($headers)."\r\n"; /* a hack for the preg_match_all in the next line */
   
preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)?\r\n/m', $headers, $matches);
    foreach (
$matches[1] as $key =>$value) $result[$value]=$matches[2][$key];
    return(
$result);
}
?>
To Top