サーチ…


IMAP拡張機能をインストールする

PHPでIMAP関数を使用するには、IMAP拡張機能をインストールする必要があります:

PHP5でDebian / Ubuntu

sudo apt-get install php5-imap
sudo php5enmod imap

Debian / UbuntuとPHP7

sudo apt-get install php7.0-imap

YUMベースのディストリビューション

sudo yum install php-imap

Mac OS X(php5.6)

brew reinstall php56 --with-imap

メールボックスに接続する

IMAPアカウントで何かをするには、まずそれに接続する必要があります。これを行うには、いくつかの必須パラメーターを指定する必要があります。

  • メールサーバーのサーバー名またはIPアドレス
  • あなたが接続したいポート
    • IMAPは143または993(安全)
    • POPは110または995(安全)です。
    • SMTPは25または465(安全)
    • NNTPは119または563(安全)
  • 接続フラグ(下記参照)
説明オプションデフォルト
/service=service 使用するサービス imap、pop3、nntp、smtp イマップ
/user=user サーバー上のログイン用のリモートユーザー名
/authuser=user リモート認証ユーザ。これが指定されている場合は、パスワードが使用されているユーザー名(管理者など)
/anonymous 匿名ユーザーとしてのリモートアクセス
/debug アプリケーションのデバッグログにプロトコルテレメトリを記録する無効
/secure ネットワークを介して平文パスワードを送信しない
/norsh 事前認証されたIMAPセッションを確立するためにrshまたはsshを使用しないでください
/ssl Secure Socket Layerを使用してセッションを暗号化する
/validate-cert TLS / SSLサーバーからの証明書有効
/novalidate-cert サーバーが自己署名証明書を使用する場合に必要なTLS / SSLサーバーから証明書を検証しないでください。 注意して使用してください 無効
/tls セッションを暗号化するためにstart-TLSを強制的に使用し、それをサポートしないサーバーへの接続を拒否する
/notls セッションを暗号化するstart-TLSはサポートしていません
/readonly 要求読み取り専用メールボックスを開く(IMAPのみ、NNTPでは無視され、SMTPとPOP3ではエラー)

接続文字列は次のようになります。

{imap.example.com:993/imap/tls/secure}

接続文字列の文字がASCII以外の場合は、 utf7_encode($ string)でエンコードする必要があります。

メールボックスに接続するには、ストリームを指すリソース値を返すimap_openコマンドを使用します。

<?php
$mailbox = imap_open("{imap.example.com:993/imap/tls/secure}", "username", "password");
if ($mailbox === false) {
    echo "Failed to connect to server";
}

メールボックス内のすべてのフォルダを一覧表示する

メールボックスに接続したら、内部を見てみましょう。最初の有用なコマンドはimap_listです。最初のパラメータはimap_openから取得したリソース、2番目はメールボックス文字列、3番目はファジー検索文字列( *は任意のパターンに一致するために使用されます)です。

$folders = imap_list($mailbox, "{imap.example.com:993/imap/tls/secure}", "*");
if ($folders === false) {
    echo "Failed to list folders in mailbox";
} else {
    print_r($folders);
}

出力は次のようになります。

Array
(
    [0] => {imap.example.com:993/imap/tls/secure}INBOX
    [1] => {imap.example.com:993/imap/tls/secure}INBOX.Sent
    [2] => {imap.example.com:993/imap/tls/secure}INBOX.Drafts
    [3] => {imap.example.com:993/imap/tls/secure}INBOX.Junk
    [4] => {imap.example.com:993/imap/tls/secure}INBOX.Trash
)

3番目のパラメータを使用して、次のような結果をフィルタリングできます。

$folders = imap_list($mailbox, "{imap.example.com:993/imap/tls/secure}", "*.Sent");

そして結果には名前に.Sentを持つエントリしか含まれてい.Sent

Array
(
    [0] => {imap.example.com:993/imap/tls/secure}INBOX.Sent
)

*をファジー検索として使用すると、すべての一致が再帰的に返されます。 %を使用すると、指定された現在のフォルダー内の一致のみが返されます。

メールボックス内のメッセージの検索

imap_headersを使用してメールボックス内のすべてのメッセージのリストを返すことができます。

<?php
$headers = imap_headers($mailbox);

結果は、次のパターンを持つ文字列の配列です。

[FLAG] [MESSAGE-ID])[DD-MM-YYY] [FROM ADDRESS] [SUBJECT TRUNCATED TO 25 CHAR] ([SIZE] chars)

各行がどのように表示されるかの例を次に示します。

A     1)19-Aug-2016 [email protected] Message Subject (1728 chars)
D     2)19-Aug-2016 [email protected] RE: Message Subject (22840 chars)
U     3)19-Aug-2016 [email protected] RE: RE: Message Subject (1876 chars)
N     4)19-Aug-2016 [email protected] RE: RE: RE: Message Subje (1741 chars)
シンボル意味
A 回答メッセージが返信されました
D 削除済みメッセージは削除されますが削除されません
F フラグメッセージにフラグが立てられ/注目されている
N 新しいメッセージは新しく見えていません
R 最近メッセージが新しく見られました
U 未読メッセージが読み込まれていません
バツドラフトメッセージは下書きです

この呼び出しは実行にかなりの時間がかかる可能性があり、非常に大きなリストを返す可能性があることに注意してください。

代わりに、個々のメッセージを必要に応じてロードすることもできます。あなたの電子メールにはそれぞれ、1(最も古いもの)からimap_num_msg($mailbox)までのIDが割り当てられimap_num_msg($mailbox)

電子メールに直接アクセスするにはいくつかの機能がありますが、最も簡単な方法は、構造化ヘッダー情報を返すimap_headerを使用することimap_header

<?php
$header = imap_headerinfo($mailbox , 1);

stdClass Object
(
    [date] => Wed, 19 Oct 2011 17:34:52 +0000
    [subject] => Message Subject
    [message_id] => <04b80ceedac8e74$51a8d50dd$0206600a@user1687763490>
    [references] => <[email protected]>
    [toaddress] => Some One Else <[email protected]>
    [to] => Array
        (
            [0] => stdClass Object
                (
                    [personal] => Some One Else
                    [mailbox] => someonelse
                    [host] => example.com
                )
        )
    [fromaddress] => Some One <[email protected]>
    [from] => Array
        (
            [0] => stdClass Object
                (
                    [personal] => Some One
                    [mailbox] => someone
                    [host] => example.com
                )
        )
    [reply_toaddress] => Some One <[email protected]>
    [reply_to] => Array
        (
            [0] => stdClass Object
                (
                    [personal] => Some One
                    [mailbox] => someone
                    [host] => example.com
                )
        )
    [senderaddress] => Some One <[email protected]>
    [sender] => Array
        (
            [0] => stdClass Object
                (
                    [personal] => Some One
                    [mailbox] => someone
                    [host] => example.com
                )
        )
    [Recent] =>  
    [Unseen] =>  
    [Flagged] =>  
    [Answered] =>  
    [Deleted] =>  
    [Draft] =>  
    [Msgno] =>    1
    [MailDate] => 19-Oct-2011 17:34:48 +0000
    [Size] => 1728
    [udate] => 1319038488
)


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow