PHP.mk документација

imap_open

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.imap-open.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.imap-open.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
imap_open

Референца за `function.imap-open.php` со подобрена типографија и навигација.

function.imap-open.php

imap_open

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

imap_openОтвори IMAP поток до поштенско сандаче

= NULL

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

Отвора IMAP поток до mailbox.

Оваа функција може да се користи и за отворање потоци до POP3 and NNTP сервери, но некои функции и опции се достапни само на IMAP servers.

Параметри

mailbox

Името на поштенското сандаче се состои од сервер и патека на поштенското сандаче на овој сервер. Специјалното име INBOX значи лично поштенско сандаче на тековниот корисник. Имињата на поштенските сандачиња што содржат меѓународни знаци освен оние во печатениот ASCII простор мора да бидат кодирани со imap_utf7_encode().

Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава

Проследувањето на недоверливи податоци на овој параметар е insecure, освен ако imap.enable_insecure_rsh е оневозможено.

Делот за серверот, кој е затворен во '{' и '}', се состои од името или IP адресата на серверот, опционален порт (претставен со ':'), и опционална спецификација на протоколот (претставен со '/').

Делот за серверот е задолжителен во сите параметри за поштенско сандаче.

Сите имиња што започнуваат со { се оддалечени имиња, и се во форма "{" remote_system_name [":" port] [flags] "}" [mailbox_name] Интернетот домен име или IP адреса на серверот во загради.

  • remote_system_name опционален TCP порт број, стандардно е стандардниот порт за таа услуга
  • port опционални знаменца, види следната табела.
  • flags оддалечено име на поштенско сандаче, стандардно е INBOX
  • mailbox_name Опционални знаменца за имиња

услуга за пристап до поштенско сандаче, стандардно е "imap"
Знаменце = NULL
/service=service оддалечено корисничко име за најавување на серверот
/user=user remote user name for login on the server
/authuser=user корисник за далечинска автентикација; ако е наведено, ова е корисничкото име чијшто пасош се користи (на пр. администратор)
/anonymous далечински пристап како анонимен корисник
/debug снимајте телеметрија на протоколот во дневникот за отстранување грешки на апликацијата
/secure не пренесувајте лозинка во чист текст преку мрежата
/imap, /imap2, /imap2bis, /imap4, /imap4rev1 Со оглед на тоа што PHP не диктира специфична кодировка за низите, можеби ќе се запрашате како се кодираат литералите на низите. На пример, дали низата /service=imap
/pop3 Со оглед на тоа што PHP не диктира специфична кодировка за низите, можеби ќе се запрашате како се кодираат литералите на низите. На пример, дали низата /service=pop3
/nntp Со оглед на тоа што PHP не диктира специфична кодировка за низите, можеби ќе се запрашате како се кодираат литералите на низите. На пример, дали низата /service=nntp
/norsh не користете rsh или ssh за воспоставување претходно автентицирана IMAP сесија
/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 - Не користи или ажурирај .newsrc за вести (само NNTP)
  • OP_HALFOPEN - За IMAP and NNTP имиња, отвори врска, но не отворај сандаче.
  • CL_EXPUNGE - Автоматски избриши го сандачето при затворање на сандачето (види исто така imap_delete() and imap_expunge())
  • OP_DEBUG - Преговори за протокол за отстранување грешки
  • OP_SHORTCACHE - Краток (elt-само) кеширање
  • OP_SILENT - Не проследувај настани (внатрешна употреба)
  • OP_PROTOTYPE - Врати го прототипот на драјверот
  • OP_SECURE - Не правете несигурна автентикација
retries

Број на максимални обиди за поврзување

options

Параметри за поврзување, следните (низи) клучеви може да се користат за поставување на еден или повеќе параметри за поврзување:

  • DISABLE_AUTHENTICATOR - Оневозможи својства за автентикација

Вратени вредности

Враќа IMAP\Connection инстанца при успех, или false при неуспех.

Дневник на промени

Верзија = NULL
8.1.0 Враќа IMAP\Connection инстанца сега; претходно, а resource .

Примери

Пример #1 Различна употреба на imap_open()

<?php
// To connect to an IMAP server running on port 143 on the local machine,
// do the following:
$mbox = imap_open("{localhost:143}INBOX", "user_id", "password");

// To connect to a POP3 server on port 110 on the local server, use:
$mbox = imap_open ("{localhost:110/pop3}INBOX", "user_id", "password");

// To connect to an SSL IMAP or POP3 server, add /ssl after the protocol
// specification:
$mbox = imap_open ("{localhost:993/imap/ssl}INBOX", "user_id", "password");

// To connect to an SSL IMAP or POP3 server with a self-signed certificate,
// add /ssl/novalidate-cert after the protocol specification:
$mbox = imap_open ("{localhost:995/pop3/ssl/novalidate-cert}", "user_id", "password");

// To connect to an NNTP server on port 119 on the local server, use:
$nntp = imap_open ("{localhost:119/nntp}comp.test", "", "");
// To connect to a remote server replace "localhost" with the name or the
// IP address of the server you want to connect to.
?>

Пример #2 imap_open() example

<?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
"Call failed<br />\n";
} else {
foreach (
$folders as $val) {
echo
$val . "<br />\n";
}
}

echo
"<h1>Headers in INBOX</h1>\n";
$headers = imap_headers($mbox);

if (
$headers == false) {
echo
"Call failed<br />\n";
} else {
foreach (
$headers as $val) {
echo
$val . "<br />\n";
}
}

imap_close($mbox);
?>

Види Исто така

Белешки од корисници Пример #3 Ефект на редоследот кога се совпаѓаат повеќе кодови

php на dsgvoseidank dot de
3 години пред
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.
neekToO
3 години пред
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
kay на rrr dot de
пред 16 години
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="[email protected]";

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

$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";
        }

?>
jeff на newscloud dot com
12 години пред
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/
guilherme dot geronimo на gmail dot com
пред 15 години
Using: 
<?php
imap_open( "{server.example.com:143}INBOX" , 'login' , 'password' );
?>

Got this error:
"Couldn't open stream {server.example.com:143}INBOX" 

Solved by adding the flag "novalidate-cert":
<?php
imap_open( "{server.example.com:143/novalidate-cert}INBOX" , 'login' , 'password' );
?>

=D
hashampel на yahoo dot de
пред 11 години
Subfolders of INBOX have to be seperate by dot like this: 'INBOX.test'
$mailbox = '{example.example.com:143/imap/novalidate-cert}INBOX.test'
dominic_mayers на yahoo точка com
пред 9 години
This code demonstrates features that are not well documented at this time. The main feature is that the selected mailbox in imap_open (or reopen)  and the specified mailbox in other imap functions are unrelated.  It has been tested with Gmail and with a Dovecot IMAP server.  The mailbox separator depends on the server. Gmail: "/"  Dovecot: "."  If you want to test with Gmail, you need to turn on "Access for less secure apps" in your account.
 
<?php
  // Change these.
  $server    = "{imap.gmail.com:993/imap/ssl/novalidate-cert}"; 
  $email     = "[email protected]"; 
  $password  = "password";
 
  // The code assumes that the folders Test/Sub1/Sub11, etc. exist. 
  $selected  = "{$server}Test/Sub1/Sub12";
  $conn      = imap_open($selected, $email , $password);

  // This returns the $specified mailbox and its sub mailboxes, 
  // even if the $specified mailbox is outside the $selected mailbox. 
  $specified =  "{$server}Test/Sub1"; 
  $boxes     = imap_list($conn, $specified , '*');
  print_r($boxes);
  
  // This appends the message in the $specified mailbox. 
  // It ignores the $selected mailbox. 
  imap_append($conn, $specified
                     , "From: [email protected]\r\n"
                     . "To: [email protected]\r\n"
                     . "Subject: test\r\n"
                     . "\r\n"
                     . "this is a test message, please ignore\r\n");

  // This changes the $selected mailbox
  $selected = "{$server}Test/Sub1"; 
  imap_reopen($conn, $selected); 

  // This moves a message from the $selected to the $specified mailbox
  // In this case, the specified mailbox does not include the server. 
  imap_mail_move ($conn , "1" ,  "Test"); 
  imap_expunge($conn); 
  imap_close($conn);
  // If you executed this code with a real IMAP server, 
  // the message is now in the Test mailbox !
?>
me на achronos dot ca
пред 11 години
Do not bother using "/debug" flag in $mailbox or OP_DEBUG in $options. They do not do anything.

When you set either one, the underlying IMAP c-client library will gather protocol debugging data and pass it back to PHP.
However, the debug handler defined by PHP is an empty function, it doesn't do anything.

So unless you're using a customized version of the IMAP extension that does something with that handler (mm_dlog), there is no point using "/debug" or OP_DEBUG.
LANGE.LUDO
пред 7 години
If you get Kerberos errors like:
« Notice: Unknown: Kerberos error: Credentials cache file '/tmp/krb5cc_0123' not found (try running kinit) ».

Try to add as a $param:
<?php array('DISABLE_AUTHENTICATOR' => 'GSSAPI') ?>

eg.
<?php
$imap_stream = imap_open('{mail.domain.tld:993/imap/ssl}' , 'username' , 'password', null, 1, array('DISABLE_AUTHENTICATOR' => 'GSSAPI'));
?>
Лисабон
пред 11 години
The error: Unknown: Mailbox is empty (errflg=1) in Unknown on line 0
appears when:

1)  use imap_open to connect 
2) then use imap_search ALL to retrieve emails

but there are no messages available. To avoid this error, check first the number of messages in a mailbox using imap_status. Only if there are messages available then you can use the imap_search.
Анонимен
пред 8 години
Function to test most of the possible options of a connection:

function imapConfig($options, $i=0, $till = array()) {
        if(sizeof($options)==$i)
            return $till;
        
        if(sizeof($till)==0)
            $till[] = '';
        
        $opt = $options[$i];
        $new = array();
        foreach($till as $t) {
            foreach($opt as $o) {
                if(strlen($o)==0)
                    $new[] = $t;
                else
                    $new[] = $t.'/'.$o;
            }
        }
        return imapConfig($options, $i+1, $new);
    }

function imap_test($server, $port, $dir, $username, $passw) {
        $options = array();
        //$options[] = array('debug');
        $options[] = array('imap', 'imap2', 'imap2bis', 'imap4', 'imap4rev1', 'pop3'); //nntp
        $options[] = array('', 'norsh');
        $options[] = array('', 'ssl');
        $options[] = array('', 'validate-cert', 'novalidate-cert');
        $options[] = array('', 'tls', 'notls');
        
        $configOptions = imapConfig($options);
        foreach($configOptions as $c) {
            $mbox = @imap_open("{".$server.":".$port.$c."}".$dir, $username, $passw);
            echo "<b>{".$server.":".$port.$c."}".$dir."</b> ... ";
            if (false !== $mbox) {
                echo '<span style="color: green"> success</span>';
            }
            else {
                echo '<span style="color: red"> failed</span>';
            }
            echo '<br>';
        }
    }

imap_test('mail.server.de', 143, 'INBOX', 'username', 'pwd');
liamr на umich dot edu
21 години пред
To authenticate using kerberos V / GSSAPI, you might need to add "user=" to the connection string.. eg:

$mbox = imap_open( "\{imap.example.com:143/imap/notls/user=" . $user . "}INBOX", $user, $passwd );

Our IMAP servers won't allow a user other than the user specified in the kerberos credentials connect using those credentials unless you specify that extra "user=" in the connection string.  Passing it as an argument to imap_open() doesn't seem to be enough.
shaikh_zaid на yahoo dot com
19 години пред
imap_open will not open a stream if your server operates with Transport Layer Security (i.e. TLS) imap_open connects with SSL if its there. So try opening mailbox as 

$mailbox="{mail.domain.com:143/imap/notls}"; 
or
$mailbox="{mail.domain.com:110/pop3/notls}"; This works...

Some mail server requires you to provide [email protected] so you can always use. [email protected]

$conn=imap_open($mailbox, $username, $password);

Some server may ask for username as "[email protected]"

:)
frederik на roal dot no
пред 23 години
For all imap functions where you specify the mailbox string it is important that you ALWAYS use IP (not hostname) and the portnumber. If you do not do this imap functions will be painfully slow.
Using hostname instead of IP adds 3 seconds to each IMAP call, not using portnumber adds 10 seconds to each imap call. (hint: use gethostbyname() )
rvarkelen AT hortimax.nl
пред 22 години
In order to make a IMAP connection to a Microsoft Exchange Server 5.5, I used this connection-string :

<?php
if(imap_open ("{192.168.1.6:143/imap}Inbox", "DOMAIN/USERNAME/ALIAS", "PASSWORD"))
{
    echo 'Connection success!';
}
else
{
    echo 'Connection failed';
}
?>

By replacing "Inbox" with, e.g. "Tasks", its possible to see all your tasks. I Hope this helps anybody!

Regards
brojann на netscape dot com
figroc at gmail dot com
You can do

<? $foo = imap_errors(); ?>

to clear unwanted warning messages like 'Mailbox is empty'
m dot stoel на cyberkinetic dot nl
20 години пред
a little tip for those who get really frustrated even after reading all the right solutions and implementing them but still get the same errors or none at all..:
after having changed the code.. restart the httpd deamon..

for Fedora or any other Red Hat Linux OS (/etc/init.d/httpd restart).

After this you will be able to make a imap/pop3 stream from apache..
jab_creations на yahoo точка com
пред 1 година
I was receiving the following error while trying to add the /secure flag and verify that the /ssl flag was using TLS 1.2 instead of the very outdated SSL protocol:

PHP Request Shutdown: Can't do secure authentication with this server (errflg=2)

I ended up having to call my host to get help as there were literally only five pages in the search engines with the error. The mailbox configuration:

Before / incorrect / error:
<?php
$server_folder = '{mail.example.com:993/imap/ssl/secure}';
?>

After / correct / connected:
<?php
$server_folder = '{mail.example.com:993/ssl/imap/secure}';
?>

The /ssl and /imap flags were not in the correct order. Here is the thing, the flags listed above do NOT mention a strict chronological order of flags and are themselves no listed in the chronological order. So that right there is a bug report needed for the documentation though hopefully this comment will spare someone the aggravation for seemingly random errors. Good luck!
Стефано
3 години пред
``There is one thing I learned over the years,
if someone says: "it's not possible", prove them wrong.`` ~ Stefano Kocka '99

test date: 2022-11-20
php version: PHP 8.0.10 (cli)
extension=imap
extension=openssl

imap: IMAP c-Client Version => 2007f
SSL Support => enabled

https://support.google.com/accounts/answer/185833?hl=en

<?php
$cnx = '{imap.gmail.com:993/imap/ssl/readonly}';
$mbox = imap_open($cnx, '[email protected]', 'MyAppPassword');
$folders = imap_listmailbox($mbox, $cnx, '*');
print_r($folders);
/*
Array
(
    [0] => {imap.gmail.com:993/imap/ssl/readonly}INBOX
    [1] => {imap.gmail.com:993/imap/ssl/readonly}LABEL1
    [2] => {imap.gmail.com:993/imap/ssl/readonly}LABEL2
    [3] => {imap.gmail.com:993/imap/ssl/readonly}Queue
    [4] => {imap.gmail.com:993/imap/ssl/readonly}[Gmail]/All
    [5] => {imap.gmail.com:993/imap/ssl/readonly}[Gmail]/Drafts
    [6] => {imap.gmail.com:993/imap/ssl/readonly}[Gmail]/Sent
    [7] => {imap.gmail.com:993/imap/ssl/readonly}[Gmail]/Spam
    [8] => {imap.gmail.com:993/imap/ssl/readonly}[Gmail]/Starred
    [9] => {imap.gmail.com:993/imap/ssl/readonly}[Gmail]/Trash
)
*/
?>
Kind regards
Навигација

Прелистувај сродни теми и функции.

На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.