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
)