imap_open
(PHP 4, PHP 5, PHP 7, PHP 8)
imap_open — メールボックスへの IMAP ストリームをオープンする
説明
string
$mailbox
,string
$user
,string
$password
,int
$flags
= 0,int
$retries
= 0,array
$options
= []): IMAP\Connection|false
mailbox
への IMAP ストリームをオープンします。
この関数は、POP3 や NNTP サーバーへのストリームをオープンする際にも使用可能です。 しかし、いくつかの関数および機能は 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);
?>
User Contributed Notes 18 notes
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.
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
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";
}
?>
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/