Buscar..


Instalar extensión IMAP

Para usar las funciones IMAP en PHP, necesitará instalar la extensión IMAP:

Debian / Ubuntu con PHP5

sudo apt-get install php5-imap
sudo php5enmod imap

Debian / Ubuntu con PHP7

sudo apt-get install php7.0-imap

Distro basado en yum

sudo yum install php-imap

Mac OS X con php5.6

brew reinstall php56 --with-imap

Conectando a un buzón

Para hacer cualquier cosa con una cuenta IMAP, primero debes conectarte. Para hacer esto necesitas especificar algunos parámetros requeridos:

  • El nombre del servidor o la dirección IP del servidor de correo.
  • El puerto que desea conectar en
    • IMAP es 143 o 993 (seguro)
    • POP es 110 o 995 (seguro)
    • SMTP es 25 o 465 (seguro)
    • NNTP es 119 o 563 (seguro)
  • Banderas de conexión (ver abajo)
Bandera Descripción Opciones Defecto
/service=service ¿Qué servicio utilizar? imap, pop3, nntp, smtp imap
/user=user nombre de usuario remoto para iniciar sesión en el servidor
/authuser=user usuario de autenticación remota; Si se especifica, este es el nombre de usuario cuya contraseña se usa (por ejemplo, administrador)
/anonymous Acceso remoto como usuario anónimo
/debug Protocolo de registro de telemetría en el registro de depuración de la aplicación. discapacitado
/secure No transmita una contraseña de texto simple a través de la red
/norsh no utilice rsh o ssh para establecer una sesión IMAP autentificada previamente
/ssl Utilice la capa de sockets seguros para cifrar la sesión
/validate-cert certificados del servidor TLS / SSL habilitado
/novalidate-cert no valide certificados del servidor TLS / SSL, necesario si el servidor utiliza certificados autofirmados. USAR CON PRECAUCION discapacitado
/tls forzar el uso de start-TLS para cifrar la sesión y rechazar la conexión a servidores que no la admiten
/notls no haga start-TLS para cifrar la sesión, incluso con servidores que la admitan
/readonly solicite buzón de correo electrónico de solo lectura abierto (solo IMAP; se ignora en NNTP, y un error con SMTP y POP3)

La cadena de conexión se verá así:

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

Tenga en cuenta que si alguno de los caracteres de su cadena de conexión no es ASCII, debe codificarse con utf7_encode ($ cadena) .

Para conectar con el buzón, usamos el comando imap_open que devuelve un valor de recurso que apunta a una secuencia:

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

Listar todas las carpetas en el buzón

Una vez que se haya conectado a su buzón, querrá echar un vistazo al interior. El primer comando útil es imap_list . El primer parámetro es el recurso que adquirió de imap_open , el segundo es la cadena de su buzón y el tercero es una cadena de búsqueda difusa ( * se usa para coincidir con cualquier patrón).

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

La salida debe ser similar a esta

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
)

Puedes usar el tercer parámetro para filtrar estos resultados de la siguiente manera:

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

Y ahora el resultado solo contiene entradas con .Sent en el nombre:

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

Nota : Usar * como una búsqueda difusa devolverá todas las coincidencias de forma recursiva. Si usa % , solo se mostrarán las coincidencias en la carpeta actual especificada.

Encontrar mensajes en el buzón.

Puede devolver una lista de todos los mensajes en un buzón usando imap_headers .

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

El resultado es una matriz de cadenas con el siguiente patrón:

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

Aquí hay una muestra de cómo podría verse cada línea:

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)
Símbolo Bandera Sentido
UNA Contestado El mensaje ha sido respondido a
re Eliminado El mensaje se borra (pero no se elimina)
F Marcado El mensaje está marcado / mirado para llamar la atención.
norte Nuevo El mensaje es nuevo y no se ha visto.
R Reciente El mensaje es nuevo y ha sido visto.
U No leído El mensaje no ha sido leído
X Borrador Mensaje es un borrador

Tenga en cuenta que esta llamada puede tardar bastante tiempo en ejecutarse y puede devolver una lista muy grande.

Una alternativa es cargar mensajes individuales a medida que los necesite. A cada correo electrónico se le asigna un ID de 1 (el más antiguo) al valor de imap_num_msg($mailbox) .

Hay una serie de funciones para acceder a un correo electrónico directamente, pero la forma más sencilla es utilizar imap_header que devuelve información de encabezado estructurado:

<?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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow