サーチ…
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
)