PHPのお勉強!

PHP TOP

imap_open

(PHP 4, PHP 5, PHP 7, PHP 8)

imap_openメールボックスへの IMAP ストリームをオープンする

説明

imap_open(
    string $mailbox,
    string $user,
    string $password,
    int $flags = 0,
    int $retries = 0,
    array $options = []
): IMAP\Connection|false

mailbox への IMAP ストリームをオープンします。

この関数は、POP3NNTP サーバーへのストリームをオープンする際にも使用可能です。 しかし、いくつかの関数および機能は IMAP サーバーでしか利用できません。

パラメータ

mailbox

メールボックス名(mailbox)は、サーバー名の部分と使用するサーバーにおける メールボックスへのパスから構成されます。特別な名前 INBOX は、 カレントユーザーの個人メールボックスを意味します。 ASCII 空間で出力可能な文字以外の外国文字を含むメールボックス名は imap_utf7_encode() でエンコードする必要があります。

警告

信頼できないデータをこのパラメータに渡すのであれば、 imap.enable_insecure_rsh を無効にしておかなければ危険です。

サーバー部は '{' および '}' で括られ、サーバー名または IP アドレス、オプションの ':' から始まるポート指定子、('/' で始まる)オプションのプロトコル指定子 から構成されます。

サーバー部は、全ての mailbox パラメータで必須です。

{ で始まる名前はすべてリモート名で、 "{" remote_system_name [":" port] [flags] "}" [mailbox_name] のような形式となります。

  • remote_system_name - Internet ドメイン名 あるいは括弧でかこまれたサーバーの IP アドレス。
  • port - オプションの TCP ポート番号。デフォルトは そのサービスのデフォルトポート。
  • flags - オプションのフラグ。以下の表を参照ください。
  • mailbox_name - リモートメールボックス名。デフォルトは INBOX 。

オプションのフラグ名
フラグ 説明
/service=service メールボックスにアクセスするサービス。デフォルトは "imap" 。
/user=user サーバーへのログイン時のユーザー名。
/authuser=user リモートの認証ユーザー。指定されていた場合は、このユーザーのパスワードが 認証に使用されます(例: administrator)。
/anonymous 匿名ユーザーとしてアクセスします。
/debug プロトコルの通信内容をアプリケーションのデバッグログに記録します。
/secure ネットワーク越しにプレーンテキストのパスワードを送信しません。
/imap, /imap2, /imap2bis, /imap4, /imap4rev1 /service=imap と同じです。
/pop3 /service=pop3 と同じです。
/nntp /service=nntp と同じです。
/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 ではエラーとなります)。

user

ユーザー名。

password

user のパスワード。

flags

flags はビットマスクであり、以下の組み合わせとなります。

  • OP_READONLY - メールボックスを読み込み専用でオープンします。
  • OP_ANONYMOUS - news に関して .newsrc を使用せず、更新もしません(NNTP のみ)。
  • OP_HALFOPEN - IMAP 及び NNTP 名について、 接続をオープンしますがメールボックスはオープンしません。
  • CL_EXPUNGE - メールボックスを閉じる際に、 自動的にメールボックスを削除します(imap_delete() および imap_expunge() も参照ください)。
  • OP_DEBUG - プロトコルネゴシエーションをデバッグします。
  • OP_SHORTCACHE - 短い(elt-only)キャッシングを行います。
  • OP_SILENT - イベントを受信しません(内部で使用します)。
  • OP_PROTOTYPE - ドライバのプロトタイプを返します。
  • OP_SECURE - セキュアでない認証を行いません。

retries

接続試行の最大数。

options

接続パラメータ。次の (文字列の) キーを使って接続パラメータを設定することができます。

  • DISABLE_AUTHENTICATOR - 認証プロパティを無効にする

戻り値

成功した場合は、 IMAP\Connection クラスのインスタンスを返します。 失敗した場合に false を返します.

変更履歴

バージョン 説明
8.1.0 IMAP\Connection のインスタンスを返すようになりました。 これより前のバージョンでは、 リソース を返していました。

例1 imap_open() のさまざまな使用例

<?php
// ローカルマシンのポート 143 で稼動している IMAP サーバーに接続するには
// 以下のようにします。
$mbox = imap_open("{localhost:143}INBOX", "user_id", "password");

// ローカルマシンのポート 110 で稼動している POP3 サーバーに接続するには、
$mbox = imap_open ("{localhost:110/pop3}INBOX", "user_id", "password");

// SSL IMAP あるいは POP3 サーバーに接続するには、プロトコル指定のあとに
// /ssl を追加します。
$mbox = imap_open ("{localhost:993/imap/ssl}INBOX", "user_id", "password");

// 自分でサインした証明書で SSL IMAP あるいは POP3 サーバーに接続するには、
// プロトコル指定のあとに /ssl/novalidate-cert を追加します。
$mbox = imap_open ("{localhost:995/pop3/ssl/novalidate-cert}", "user_id", "password");

// ローカルマシンのポート 119 で稼動している NNTP サーバーに接続するには、
$nntp = imap_open ("{localhost:119/nntp}comp.test", "", "");
// リモートサーバーに接続する際は、"localhost" を接続したいサーバーの
// 名前または IP アドレスに置き換えます。
?>

例2 imap_open() の例

<?php
$mbox
= imap_open("{imap.example.org:143}", "username", "password");

echo
"<h1>Mailboxes</h1>\n";
$folders = imap_listmailbox($mbox, "{imap.example.org:143}", "*");

if (
$folders == false) {
echo
"コールが失敗しました<br />\n";
} else {
foreach (
$folders as $val) {
echo
$val . "<br />\n";
}
}

echo
"<h1>INBOX のヘッダ</h1>\n";
$headers = imap_headers($mbox);

if (
$headers == false) {
echo
"コールが失敗しました<br />\n";
} else {
foreach (
$headers as $val) {
echo
$val . "<br />\n";
}
}

imap_close($mbox);
?>

参考

add a note

User Contributed Notes 18 notes

up
29
php at dsgvoseidank dot de
2 years ago
Google dropped the support of user/password authentication as of 30 may 2022.
imap_open can not be used anymore, without the support of xoauth2.
https://support.google.com/accounts/answer/6010255

There is a ToDo from 2020 that didn't make it.
https://wiki.php.net/todo/ext/imap/xoauth2

The only way is to switch to a third party lib. "php-imap"
This is so sad.
up
7
neekToO
2 years ago
To reply to "dsgvoseidank" saying it doesnt work anymore with Gmail :

As today 26 august 2022 it is still working but you need to use google parameters to generate a password for your app on a 2FA account
up
13
kay at rrr dot de
14 years ago
imap_open is very simple to use, but struggles a litte bit on setups with ssl and tls.

this are tested examples for different hosts and protocols.

uncomment the host/protocol line and fill in correct username and password.

Kay

<?php

#######
# localhost pop3 with and without ssl
# $authhost="{localhost:995/pop3/ssl/novalidate-cert}";
# $authhost="{localhost:110/pop3/notls}";

# localhost imap with and without ssl
# $authhost="{localhost:993/imap/ssl/novalidate-cert}";
# $authhost="{localhost:143/imap/notls}";
# $user="localuser";

# localhost nntp with and without ssl
# you have to specify an existing group, control.cancel should exist
# $authhost="{localhost:563/nntp/ssl/novalidate-cert}control.cancel";
# $authhost="{localhost:119/nntp/notls}control.cancel";

######
# web.de pop3 without ssl
# $authhost="{pop3.web.de:110/pop3/notls}";
# $user="kay.marquardt@web.de";

#########
# goggle with pop3 or imap
# $authhost="{pop.gmail.com:995/pop3/ssl/novalidate-cert}";
# $authhost="{imap.gmail.com:993/imap/ssl/novalidate-cert}";
# $user="username@gmail.com";

$user="username like above";
$pass="yourpass";

if (
$mbox=imap_open( $authhost, $user, $pass ))
{
echo
"<h1>Connected</h1>\n";
imap_close($mbox);
} else
{
echo
"<h1>FAIL!</h1>\n";
}

?>
up
12
jeff at newscloud dot com
10 years ago
One of the issues with gmail IMAP SSL authentication is related to Google's account security.

Once you get the login error once, sign out of all your google accounts. Then, visit this link:
http://www.google.com/accounts/DisplayUnlockCaptcha

Log in with the account you're attempting to access via imap.

Follow the steps and you'll then be able to login in to gmail with php imap.

It's visually shown here:
http://jeffreifman.com/filtered-open-source-imap-mail-filtering-software-for-php/configuring-gmail/