Menú
Está libre
registrarse
el principal  /  Multimedia / Saque las letras del correo. Trabajamos con el protocolo IMAP.

Saque las letras del correo. Trabajamos con el protocolo IMAP.

Una de las posibles características de las solicitudes de IMAP es la creación de un demonio postal, que administrará los usuarios de suscripción y orientación de su lista de correo. Para implementar esta tarea, se usan dos métodos generalmente en los bloqueos de correo. El primero sugiere que el usuario debe ir a una página determinada y confirmar sus acciones, el segundo requiere enviar una carta. El segundo también requiere que el script de procesamiento se lanzará regularmente a Cron Daemon? Om. Debido a esto, no es tan popular como el primer camino.

Pero, como puede ver, los boletines más graves utilizan el segundo método. Por lo tanto, si tiene la capacidad de usar Crondo, use.

En realidad, no es tan difícil entender las funciones. La persona que solía trabajar para el RNR, sin dificultad, cómo trabajar con ellos. Algunas dificultades pueden surgir con el análisis de los encabezados de letras que procesarán el guión.

El algoritmo de la obra del script en sí es fácil. El demonio establece una conexión con el servidor de correo y comprueba la presencia de letras. En caso de que no haya letras, el trabajo del script se detiene.
Si hay letras, hay un análisis de los encabezados de la primera letra. Puedes ver los campos desde y sujetos. Si el campo de asunto contiene una de las dos opciones de encabezado permisibles (suscripción o grabación), el registro que corresponde al campo desde el campo se está activo (confirmado) o se elimina de la tabla. En ambos casos, la dirección especificada en el campo FROM se envía a la notificación apropiada de la acción del script. Después de eso, la letra está marcada para su eliminación. Si el sujeto no contiene temas permisibles, se envía una notificación de error, y la letra también está marcada para la eliminación. Luego el script se mueve a la siguiente letra.
Habiendo terminado el análisis de todas las letras, limpia la caja.

No cansaré al lector en los diagramas de bloques, por lo que inmediatamente pasaremos a los negocios. La función IMAP_OPEN se usa para abrir la caja. Dado que PNP admite múltiples protocolos, entonces es necesario especificar explícitamente qué protocolo se usa para trabajar con el cajón. En nuestro caso, es POP3 a 110 puerto (estándar). Asignamos el resultado del script al script My_Box.


En el futuro, verá que esta variable se usará de manera práfica en todas las características de IMAP. A continuación, marque la casilla para las letras. La verificación realiza la función IMAP_NUM_MSG.

$ n \u003d imap_num_msg ($ my_box);

Como resultado, la variable $ N contendrá el número de letras en la caja. El número puede ser más cero, o igual a él (si la caja está vacía).
Si hay letras, entonces en el ciclo del tiempo, realizamos el análisis de letras, aumentando constantemente el número de letra por unidad. Tenga en cuenta que la primera letra en la caja tendrá el número 0, y el primer elemento de la matriz.
Para aumentar el número de letra, asignar un valor de $ m variable 0, y luego en condiciones del ciclo, lo aumentamos por unidad $ M ++.

Para analizar los titulares de interés para nosotros, dos funciones son suficientes: imap_header e imap_fetch_overview. Para realizar cada uno de ellos, además del cajón, debe especificar el número de letra. En nuestro caso, será igual a la variable de $ m.

IMAP_HEADER devuelve un objeto como resultado de la ejecución que contiene información exhaustiva sobre el encabezado de la letra. Entre otras cosas, este objeto contiene una matriz de la de, que contiene cuatro valores. Esto es personal, adl, buzón y host. Solo estamos interesados \u200b\u200ben el buzón y el anfitrión. Sustituyendo, obtenemos la dirección de la que se envió la carta.


$ H \u003d $ h -\u003e de;
uNA.
foreach ($ h como $ k \u003d\u003e $ v) (
$ Mailbox \u003d $ v -\u003e buzón;
$ Host \u003d $ v -\u003e host;
$ Personal \u003d $ v -\u003e personal;
$ correo electrónico \u003d $ buzón. ? @ ¬. $ Host;

Imap_fetch_overview: nos permitirá conocer el sujeto de la letra. Para los mismos fines, sería posible usar IMAP_HEADER, pero para un número razones para eso, a veces puede que no funcione. De la matriz que devuelve esta función, solo necesitamos el campo de la asignatura.


Foreach ($ s como $ k \u003d\u003e $ v) (
$ SUBJ \u003d $ V -\u003e Sujeto;
}

Además, nuestras acciones se reducen para extraer un correo electrónico de la base, y si lo tiene allí, marque la cadena completa con esta entrada como "verificada" o elimine. Supongamos que después de completar el formulario de correo en el sitio, el suscriptor se le asigna el estado 0, y después de confirmar la suscripción, cambia a 1.

if ($ subj \u003d\u003d "suscribirse") (
mysql_query ( "ACTUALIZACIÓN DE SUSCRIPCIONES SET STAT \u003d 1 DONDE EL CORREO ELECTRÓNICO \u003d $ MY_EMAIL");

}
mysql_query ( "Eliminar de suscribirse donde correo electrónico \u003d $ my_email");
$ del \u003d imap_delete ($ my_box, $ m);
}
DEMÁS (
$ del \u003d imap_delete ($ my_box, $ m);
}

Como se mencionó anteriormente, después de realizar todas las acciones, el script limpia la caja.


Esto programa más simple, solo una demostración que puede escribir, no solo cambiando dinámicamente los sitios, sino que los servicios que no se pueden escribir al usuario en absoluto. Por supuesto, en términos de escritura de scripts para Shell, RNR no es aplicable, a diferencia de su competidor PERL, pero sin embargo ...

Listado de todo el programa con la excepción de los parámetros de conexión con la base (db.php):

incluir "db.php";
$ My_box \u003d imap_open ("(you.pop.host/pop3:110)", "Iniciar sesión", "Contraseña");
$ n \u003d imap_num_msg ($ my_box);
$ m \u003d 0;
$ add_text \u003d "

Gracias por confirmar su suscripción ";
$ add_sbj \u003d "¡Usted agregó!" ;
$ Del_text \u003d "

Lo siento pero este buzón se usa
Solo para administrar el correo ";
$ ERR_SBJ \u003d "ERROR";
$ Encabezados \u003d. "De: Suscríbase al robot

X-MAILER: PHP4

Tipo de contenido: Texto / Plain; Charset \u003d UTF-8
" ;
Si ($ n! \u003d 0) (
Mientras ($ m ++< $n ) {
$ H \u003d imap_header ($ my_box, $ m);
$ s \u003d imap_fetch_overview ($ my_box, $ m);
$ H \u003d $ h -\u003e de;
Foreach ($ h como $ k \u003d\u003e $ v) (
$ Mailbox \u003d $ v -\u003e buzón;
$ Host \u003d $ v -\u003e host;
$ Personal \u003d $ v -\u003e personal;
$ correo electrónico \u003d $ buzón. "@". $ Host;
$ My_email \u003d mysql_escape_string ($ correo electrónico);
}
Foreach ($ s como $ k \u003d\u003e $ v) (
$ SUBJ \u003d $ V -\u003e Sujeto;
}
if ($ subj \u003d\u003d "suscribirse") (
mysql_query ( "Actualice la tabla STAT \u003d 1 donde el correo electrónico \u003d $ MY_EMAIL");
// imprimir mysql_error ();
$ del \u003d imap_delete ($ my_box, $ m);
correo ($ correo electrónico, $ add_sbj, $ add_text, $ encabezados);
}
En elseif ($ SUBJ \u003d\u003d "CANSCRIBE") (
mysql_query ( "Eliminar de la tabla donde el correo electrónico \u003d $ MY_EMAIL");
$ del \u003d imap_delete ($ my_box, $ m);
correo ($ correo electrónico, $ del_sbj, $ del_text, $ encabezados);
}
DEMÁS (
$ del \u003d imap_delete ($ open_box, $ m);
correo ($ correo electrónico, $ ER_SBJ, $ ER_TEXT, $ encabezados);
}
}
$ Claro \u003d imap_expunge ($ my_box);
}
?>


Correo electrónico - Esta es la herramienta más importante para compartir información y, si lo está utilizando para trabajar, seguramente se encuentra a través de la situación: una carta llega al correo, que contiene los datos necesarios para el crujido de procesamiento. Hablaremos sobre el correo de Yandex: en este artículo compartiré con usted, queridos lectores, experimentaremos cómo obtener cartas del cuadro, también analizaremos la opción cuando haya un archivo invertido en la letra, cómo encontrarlo y, finalmente, Descárgalo para nuevas manipulaciones.

Yo mismo encontré esta tarea durante mucho tiempo, y luego, si hay una pequeña experiencia con los programas postales de Yandex, pasé mucho tiempo y nervios para lograr el resultado deseado. Mi primer error fue que, como muchos desarrolladores web, comencé a buscar intensivamente ejemplos similares en la red, pero no usé la ayuda de Yandex. Sí, hay información útil, aunque es muy pequeña, pero es bastante importante para escribir este tipo de script (será inferior). En ese momento, era necesario escribir un script, cuya esencia se redujo: el correo del cliente llegó a la carta de correo del cliente con el precio de los productos en formato XLS una vez al día, fue necesario procesarlo (a Pinte y compare con los datos de la Tienda Online de DB y, según el resultado, que se actualice en algún lugar, desactive o habilite).

Y lo primero que haremos antes de escribir el guión es hacer nuestro plan de acción, que constará de nueve artículos:

  1. Configure el correo para obtener acceso a través de protocolos postales;
  2. Tenga en cuenta la propia estructura Aplicaciones PHP y determinar la codificación de archivos;
  3. Nos familiarizaremos con el protocolo postal IMAP y sus capacidades;
  4. Nos conectamos a Yandex Mail a través del nombre de usuario y la contraseña de la cuenta y rastreamos el error en esta etapa;
  5. Procesar el encabezado de la letra;
  6. Obtenemos y procesamos el cuerpo de la carta;
  7. Obtenemos y guardamos archivos anidados;
  8. Visualizamos el trabajo realizado;
  9. Hacer conclusiones.

El tema es bastante voluminoso, pero intentaré establecer todo es lo más compacto y comprensible. Tal vez proceder.

Configuración del correo

Vaya a su correo e ingrese a la configuración, como se muestra a continuación en la captura de pantalla:



Ahora hemos llegado a la configuración por correo a través de los protocolos IMAP y POP3:


Aquí, muchos verán la imagen como la imagen de arriba, pero me encontré y más de una vez, cuando el acceso está deshabilitado. Por lo tanto, si tiene otras configuraciones, coloque las garrapatas como en la captura de pantalla, para nosotros, la principal cosa para permitir el acceso a través del protocolo IMAP.

Estructura de la aplicación y su codificación.

En este ejemplo, no nos encontraremos con una estructura de aplicación compleja, ya que no es necesario, y agregaremos solo lo que se necesita (trabajo en el editor de texto sublime):


  • tMP - carpeta en la que descargaremos archivos anidados de la letra si lo son;
  • .htaccess: configurando la parte del servidor, si tiene un servidor Apache;
  • functions.php - aquí agregará nuestras funciones;
  • main.css - archivo de estilo;
  • index.php - Punto de entrada de la aplicación;

La codificación usará UTF-8 y, por lo tanto, completará inmediatamente el archivo.htAccess Siguiente Filas:

AddDefaultCharSet UTF-8 AddCarSet UTF-8 * CharsetSourceenc UTF-8 CharlasDefault UTF-8

Protocolo IMAP

Al regresar al primer artículo, se puede ver que también es posible trabajar con el correo de Yandex a través del protocolo POP3. Entonces, ¿por qué exactamente IMAP? De estos dos conductos IMAP es un POP3 más nuevo y alternativo, por lo tanto, tiene una serie de ventajas (se pueden estudiar mediante el uso de Wikipedia), pero en nuestro caso, la elección fue influenciada solo que era nuevo. Personalmente, no veo una diferencia especial que use bajo tarea específica recibir una carta. Si por alguna razón necesita usar el protocolo POP3, todas las funciones que se aplican a IMAP funcionarán para ello.

Conecte al correo yandex usando el protocolo IMAP

Para conectarse a correo, necesitamos conocer tres parámetros: Iniciar sesión, su contraseña y dirección servidor de correo. Si no hay problemas con dos parámetros, entonces el segundo se puede encontrar en la ayuda de Yandex. Al respecto (tuve un problema), fui más alto y escribí una masa de ejemplos, donde el tercer parámetro no es correcto y, imagine que hay errores al menos en la etapa de conexión, es al menos desagradable. No voy a caminar y acercarme e inmediatamente daré un enlace directo a la página de Yandex. configuración programas postales . Aquí está en realidad lo que necesitamos para conectar:


Ahora puedes ir directamente al código en sí:

Encabezado ("Tipo de contenido: Texto / HTML; Charset \u003d UTF-8"); Error_reporting (0); Requerir_once ("functions.php"); $ mail_login \u003d "yandex_pot"; $ Mail_password \u003d "contraseña_text"; $ Mail_imap \u003d "(imap.yandex.ru:993/imap/ssl)"; // Lista de tipos de archivos contables de $ mail_filetypes \u003d Array ("Msword"); $ Conexión \u003d imap_open ($ mail_imap, $ mail_login, $ mail_password); If ("$ Conexión) (Echo (" Conexión de error con el correo - ". $ Mail_login); salida;) otra cosa ($ msg_num \u003d imap_num_msg ($ conexión); $ mails_data \u003d matriz (); para ($ i \u003d 1; $ I.<= $msg_num; $i++){ /* Работать с каждым письмом из IMAP-потока будем тут */ } } imap_close($connection);

Primero, especifique aún más la codificación UTF-8 utilizando el encabezado y apague el mapeo de errores. Conecte las funciones de archivo.php y especifique las configuraciones que se abordaron anteriormente. En la matriz de $ mail_filetypes, recetamos formatos de archivo que necesitamos. Por lo tanto, se decidió hacer la basura innecesaria y recibir archivos específicos. La conexión de correo se produce utilizando la función IMAP_OPEN (), que, con una buena ejecución, devuelve una corriente IMAP, y con la falla FALSE (pero si enciende la pantalla de error, entonces este no es el caso). Trabajo completo con flujos usando la función IMAP_CLOSE () pasándola el indicador de conexión. Hay un operador condicional ordinario entre estas dos funciones.

Con una conexión exitosa utilizando IMAP_NUM_MSG (), aprendemos el número de letras en el correo y agregamos una matriz a la que ponemos todos los datos necesarios de la secuencia. A continuación, se sigue un ciclo en el que cada letra será procesada por su número (la numeración ocurre de 1) por separado.

Procesando el encabezado de la letra

Para obtener un encabezado de letras, debe usar la función IMAP_HEADER (), cuyo segundo parámetro es el número de letra:

// Cap de letra $ msg_header \u003d imap_header ($ conexión, $ i);

En esta etapa, obtendremos un objeto desde el cual tiraremos los datos que necesitamos al mantener la matriz de $ Mails_Data. Aquí hay un ejemplo de una de las letras:

Esta captura de pantalla muestra que todos los datos se duplican, pero no juega un papel especial, tire, lo que es más conveniente. Mucho más importante es la codificación del tema de la letra. Puede ser cualquiera o este momento debe ser controlado. La misma situación con el cuerpo de la letra y con archivos anidados.

$ mails_data [$ i] ["Time"] \u003d Tiempo ($ msg_header-\u003e maildate); $ Mails_data [$ i] ["fecha"] \u003d $ msg_header-\u003e maildate; Foreach ($ msg_header-\u003e a como $ datos) ($ mails_data [$ i] ["to"] \u003d $ data-\u003e buzón. "@. $ Data-\u003e host;) foreach ($ msg_header-\u003e de como $ datos ) ($ mails_data [$ i] ["de"] \u003d $ DATA DE DATOS-\u003e Buzón. "@. $ Datos-\u003e host;)

Guardamos en nuestra matriz: una etiqueta temporal, la fecha de recepción de la carta, el correo electrónico del destinatario y el remitente y vaya a obtener el tema de la letra. Para hacer esto, primero agregamos tres funciones a functions.php Archivo:

Función check_utf8 ($ caracteres) (si (strtolower ($ caracteres)! \u003d "UTF-8") (devolución falsa;) devuelve verdadero;) Función conver_to_utf8 ($ in_charset, $ str) (retorno iconv ($ in_charset), "UTF -8 ", $ str);) Función get_imap_title ($ str) ($ mime \u003d imap_mime_header_decode ($ str); $ title \u003d" "; foreach ($ mime como $ clave \u003d\u003e $ m) (SI (! Check_utf8 ($ M-\u003e caracteres)) ($ title. \u003d Conver_to_utf8 ($ m-\u003e caracteres, $ m-\u003e texto);) otra cosa ($ título. \u003d $ M-\u003e texto;)) devuelva $ title;)

Talk Names y, creo que vale la pena explicar solo la última función. Acepta la cadena codificada y el uso de IMAP_MIME_HEADER_DECODE () la decodifica, como resultado del cual se devuelve una matriz de objetos, cada uno de los cuales tiene dos propiedades de caracteres (codificación) y texto (tema de texto). Además, todo es simple: en el bucle que comprueba la codificación, hacemos clic en UTF-8 y pegamos el tema en un solo encabezado y devolverlo.

Ahora vuelvamos al archivo index.php y extiende el último parámetro:

$ mails_data [$ i] ["Título"] \u003d get_imap_title ($ msg_header-\u003e sujeto);

En este procesamiento del encabezado de la carta se completará.

Trabajamos con una carta de escritura.

Continuamos formando gradualmente nuestra matriz con los datos de las letras procesadas y ahora, para el cuerpo, debemos usar dos funciones:

// letra del cuerpo $ msg_structure \u003d imap_fetchstructure ($ conexión, $ i); $ msg_body \u003d imap_fetchbody ($ conexión, $ i, 1);

En la primera variable $ msg_structure hay una estructura de letras: este es un objeto en el que puede encontrar una masa información útilEl ejemplo de la parte de este objeto se presenta a continuación:

Lo que es importante para resolver nuestro problema:

  • el tipo es el tipo principal de cuerpo de letras, dependiendo de lo que viene a enviarlo, puede cambiar de 0 a 7 (cada dígito aconseja su tipo de contenido que está en el cuerpo de la letra);
  • codificación: codificador de transferencia corporal, varía de 0 a 5 (0 - 7bit, 1 - 8bit, 2 - binario, 3 - bases64, 4 - cotizado-imprimible, 5 - Otro);
  • las partes son una matriz de partes de la letra que corresponde a la estructura del nivel de objeto anterior.

Mira más detalles. Considerar la propiedad Partes. Lo primero que debe decir es que en la célula cero de esta matriz, hay información correspondiente al texto de la letra y comenzando con los archivos First-anular. También en cada tipo específico del objeto y en los parámetros que codifican en forma aparente y no explícita.

La estructura de la carta se puede ocultar, al menos tenía casos cuando alcanzaba cuatro a cinco niveles, de modo que, como dicen, desconectenos en el futuro, será necesario escribir una función recursiva.

La segunda función imap_fetchbody () extrae una parte específica de la letra, con mayor frecuencia en la forma codificada.

Ahora agregue una variable en la que mantendremos la versión procesada del cuerpo de la letra:

$ body \u003d "";

Vuelvemos a las funciones de archivo.php y escriba una función recursiva:

Función recursive_search ($ estructura) ($ codificación \u003d ""; si ($ estructura $ estructura-\u003e subtipo \u003d\u003d "html" || $ estructura-\u003e tipo \u003d\u003d 0) (si ($ estructura-\u003e parámetros-\u003e atributo \u003d\u003d " Caracteres ") ($ chaset \u003d $ estructura-\u003e parámetros-\u003e valor;) devolución de matriz (" codificación "\u003d\u003e $ estructura-\u003e codificación," caracteres "\u003d\u003e strtlower ($ caracteres)," subtipo "\u003d\u003e $ estructura- \u003e subtipo);) otra cosa (si (ISSET ($ estructura-\u003e partes) (devolución recursive_search ($ estructura-\u003e partes);) otra cosa (si ($ estructura-\u003e parámetros-\u003e atributo \u003d\u003d "charset") ($ Caracteres \u003d $ estructura-\u003e parámetros-\u003e valor;) devolución de matriz ("codificación" \u003d\u003e $ estructura-\u003e codificación, "caracteres" \u003d\u003e strtolower ($ caracteres), "subtipo" \u003d\u003e $ estructura-\u003e subtipo);) ))

La función Recursive_Search () toma un parámetro: la estructura de letras donde las propiedades controlan y detienen secuencialmente tres parámetros: codificación, caracteres, subtipo. Un punto de salida de la recursión es la ausencia de la propiedad de las partes con una célula cero. Más para explicar aquí No hay nada más, desde el código, creo que está claro lo que está sucediendo.

Añadiremos otra característica para la contendiente del cuerpo de la carta, que se requerirá en el futuro:

Función estructura_encodificación ($ codificación, $ msg_body) (Caso 4: $ body \u003d imap_mpint ($ msg_body); descanso; Caso 3: $ body \u003d imap_base64 ($ msg_body); descanso; caso 2: $ body \u003d imap_binary ($ msg_body); descanso; Caso 1: $ body \u003d imap_8bit ($ msg_body); ruptura; caso 0: $ body \u003d $ msg_body; break; default: $ body \u003d ""; break;) devuelve $ cuerpo;)

$ Recursive_data \u003d recursive_search ($ msg_tructure); Si ($ recursive_data ["codificación"] \u003d\u003d 0 || $ recursive_data ["codificación"] \u003d\u003d 1) ($ body \u003d $ msg_body;) si ($ recursive_data ["codificación"] \u003d\u003d 4) ($ cuerpo \u003d Station_encoding ($ recursive_data ["codificación"], $ msg_body);) Si ($ recursive_data ["codificación"] \u003d\u003d 3) ($ body \u003d station_encoding ($ recursive_data ["codificación"], $ msg_body);) si ($ recursive_data ["codificación"] \u003d\u003d 2) ($ body \u003d station_encoding ($ recursive_data ["codificación"], $ msg_body);) Si (! Check_utf8 ($ recursive_data ["charset"]) ($ body \u003d conver_to_utf8 ($ recursive_data ["charlas"], $ msg_body);)

Después de que recibimos datos de la recursión, verifique gradualmente la codificación de transferencia y, dependiendo de esto, llame a la función Structure_ENCODING () con los parámetros correspondientes. En la última declaración condicional, consideramos lo que trabajamos en UTF-8 y, si después de todas las manipulaciones, tendremos diferentes de la codificación, la recodificación.

Queda por dibujarse:

$ mails_data [$ i] ["cuerpo"] \u003d base64_encode ($ cuerpo);

En el cuerpo, la letra puede ser, tanto el texto habitual como el marcado HTML con sus estilos. Codificamos en BASE64 para que nuestro diseño no vaya con visualización.

Archivos anidados

Aquí, sin problemas llegamos al final de escribir nuestra solicitud:

// anidado si los archivos (ISSET ($ msg_structure-\u003e partes)) (para ($ j \u003d 1, $ f \u003d 2; $ j< count($msg_structure->partes); $ J ++, $ F ++) (si (in_array ($ msg_structure-\u003e partes [$ j] -\u003e subtipo, $ mail_filetypes)) ($ mails_data [$ i] ["adjunta"] [$ j] [" Tipo "] \u003d $ msg_structure-\u003e partes [$ j] -\u003e subtipo; $ mails_data [$ i] [" adjunta "] [$ j] [" tamaño "] \u003d $ msg_tructure-\u003e partes [$ j] -\u003e bytes ; $ mails_data [$ i] ["adjunta"] [$ j] ["nombre"] \u003d get_imap_title ($ msg_structure-\u003e partes [$ j] -\u003e parámetros-\u003e valor); $ mails_data [$ i] ["adjunta "] [$ J] [" archivo "] \u003d estruction_encoding ($ msg_structure-\u003e partes [$ j] -\u003e codificación, imap_fetchbody ($ conexión, $ i, $ f)); file_put_contents (" tmp / ". Iconv (" tmp / ". UTF-8 "," CP1251 ", $ mails_data [$ i] [" adjunta "] [$ j] [" nombre "]), $ mails_data [$ i] [" adjunta "] [$ j] [" archivo " ]);)))

Una pieza responsable de procesar un archivo incrustado es mucho más pequeño, y ahora, por qué exactamente. El principio de trabajar con el archivo es similar a trabajar con el cuerpo de la letra, solo esta etapa está comenzando con la presencia en la matriz de las propiedades de las partes. No se olvide de cortar innecesario, gire con la lista de tipos. Uso de una función simple_put_contents (), guardamos nuestro archivo en el servidor a la carpeta TMP.

¡Quiero ver el resultado!

En el proceso de trabajo, hemos formado una matriz con $ Mails_Data Data, y para la visualización, trabajaremos directamente con ella. En este artículo, usé una carta de prueba que tuve un correo, veamos lo que hicimos al final:


Aquí está qué tipo de algo necesita para obtener una matriz, ay, tuve que ocultar el contenido del archivo por razones personales. Ahora vaya a nuestro marcado HTML:

Yandex Mail |<?php echo($mail_login);?>

YANDEX CORREO (INCOMING) |

Número de letras:

no hay letras
$ Correo) :?\u003e
Etiqueta de tiempo:
Fecha:
A quien:
De:
Sujeto:
Letra en Base64:
Archivos anidados:
$ Adjuntos) :?\u003e
Un tipo:
Tamaño (en bytes):
Nombre:
Cuerpo:

Estilos No agregaré aquí, ya que no juegan un papel especial, como resultado:


Y en el servidor en la carpeta TMP, tendrá un archivo.

Conclusión

Habiendo realizado todas las etapas del artículo, logre los debimientos, pero todo no es tan fácil como puede parecer, hay escollos que deben ser considerados. Al escribir un script para una tarea específica, debe seguir la codificación en todas las etapas, las cartas pueden pasar de varios correos, cada uno de los cuales puede tener sus propios matices. También será importante tener en cuenta que el correo de Yandex y su documentación periódica se actualizan, por lo que pueden parecer varias subcláusulas para trabajar con programas postales. Tengo todo en esto, espero que use este artículo cuando trabaje con una versión de nivel inferior de Yandex Mail.

Es imposible recibir una letra de fijación (
Si el correo se envía con el archivo, cualquiera desaparece el texto de la letra

ayudame por favor

Está claro ... Si resulta todo, desde Yandex en Yandex ...
Tipo descuidado
Pero es por eso que otros archivos además de Word, este script no acepta que no está claro ... hay una línea Msword cerca de la coma y el PDF y el FLG y PHG, lee y guarda solo la palabra .... Algo así

Algunas aplicaciones web pueden requerir un correo electrónico especial para el usuario. En este caso, podemos escribir su propio código de correo electrónico de SquirrelMail o RoundCube. No importa lo que elija, el conocimiento del correo IMAP será útil.

Cómo trabajar con IMAP en PHP se describe en dos páginas. En la primera página, las características necesarias para conectarse a los servidores de correo y leer mensajes. En la segunda página, hablemos de trabajar con el correo electrónico, por ejemplo, eliminar mensajes, descargar aplicaciones, etc.

Para demostrar la funcionalidad, se utilizarán ejemplos de código que se pueden usar para iniciar los scripts de su propio cliente de correo.

Parámetros de URL para llamar a las funciones necesarias:

  • fUNC - Tipo de función requerida (por ejemplo: lee el correo electrónico, vea el buzón, el mensaje de eliminar)
  • carpeta: el nombre de la carpeta de buzones para la conexión (por ejemplo: entrante, enviado, spam)
  • uID - Identificador de correo electrónico único

Los parámetros se pueden obtener utilizando $ _get y el interruptor se puede usar para llamar a las acciones apropiadas.

Conectar al servidor IMAP

Para establecer una conexión con el servidor IMAP, usamos la función IMAP_CONNECT (), como se muestra a continuación:

Ruta de mensajes, nombre de usuario y contraseña Los parámetros necesarios para conectarse al servidor. Puede aprender sobre los parámetros adicionales en el manual.

La ruta al buzón es una cadena que identifica el servidor y el puerto en los soportes rizados definen el nombre de la carpeta de correo deseada.

Aquí hay algunas filas para la carpeta. Entrante servicios postales:

  • Gmail (imap.gmail.com: 993 / IMAP / SSL) Bandeja de entrada
  • Yahoo (imap.mail.yahoo.com: 993 / IMAP / SSL) Bandeja de entrada
  • AOL (imap.aol.com: 993 / IMAP / SSL) Bandeja de entrada

En algunos servidores, no se habilita SSL, en este caso deberá omitir el "SSL" de la cadena. Otros servidores pueden usar sus propios certificados en los que debe habilitar "Novalidate-Cert".

Con una conexión abierta al servidor de envío, ahora podemos analizar las funciones utilizadas para las siguientes actividades:

  • Muestra la lista de carpeta de buzón en su cuenta de correo electrónico
  • Muestra la lista de mensajes de correo electrónico en la carpeta.
  • Ver el contenido del correo electrónico del autor

Carpetas de correo electrónico

Entrante , Al corriente , Basura y Correo no deseado - Estas carpetas son visibles en casi todas las cuentas de correo electrónico, y los usuarios a menudo pueden crear sus propias carpetas. Para ver los mensajes en estas carpetas, debemos cambiar nuestra cadena de conexión. Por ejemplo, aplique "Bandeja de entrada" (entrante) en la fila de la ruta anterior. Si necesita conectarse a la carpeta SPAM, use algo como "SPAM" (SPAM) en su lugar. Pero aunque se puede enumerar como Correo no deseado En una cuenta de correo electrónico, si observa el cliente de correo electrónico, el nombre actual de las carpetas en el fondo puede ser diferente. Podemos enumerar todas las carpetas disponibles en la cuenta utilizando IMAP_LIST ().

"; foreach ($ carpetas como $ carpeta) ($ carpeta \u003d str_replace (" (imap.gmail..php? carpeta \u003d ". $ carpeta". & FUNC \u003d Ver "\u003e". $ carpeta ".";) Eco"";

Debemos transferir el descriptor de conexión obtenido de IMAP_OPEN () como el parámetro original imap_list (). También debemos pasar por el camino (sin una carpeta, por ejemplo, "Bandeja de entrada"). Como un tercer parámetro, la solicitud de todas las carpetas disponibles.

Notificación del mensaje.

Cada carpeta contiene una lista de los mensajes de correo electrónico disponibles, así que veamos cómo podemos crear una lista de mensajes en nuestro buzón.

Primero, debe obtener la cantidad de mensajes disponibles con IMAP_NUM_MSG (). Luego, podemos usar la función IMAP_HEADER () para obtener información para el título de cada mensaje.

Digamos si queremos las últimas 20 letras:

($ nummesajes - 20); $ i---) ($ encabezado \u003d imap_header ($ imap, $ i); $ fromfo \u003d $ encabezado-\u003e desde; $ ResponderInfo \u003d $ encabezado-\u003e Responder_to; $ Detalles \u003d Array ("FROMADDR" \u003d\u003e (ISSET ($ Frominfo-\u003e mailbox) && isset ($ fromfo-\u003e host)) $ fromfo-\u003e buzón. "@". $ Fromfo-\u003e host: "," fromname "\u003d\u003e (isset))? $ Fromfo-\u003e personal : "", "ResponderAddR" \u003d\u003e (ISSET ($ SHOPLINFO-\u003e BAILBOX) && ISSET ($ SHOPLINFO-\u003e HOST)) $ $ shallinfo-\u003e Buzón. "@". $ ResponderFo-\u003e Host: "", "ResponderName "\u003d\u003e (ISSET ($ Responderto a-\u003e Personal)) $ Responderto-\u003e Personal:" "Asunto" \u003d\u003e (ISSET ($ encabezado-\u003e Asunto)) $ encabezado-\u003e Asunto: "", udate "\u003d\u003e (ISSET ($ HEADER-\u003e UDATE))? $ Encabezado-\u003e Udate:"); $ uid \u003d imap_uid ($ imap, $ i); echo "

    "; Eco"
  • De:". $ Detalles [" fromname "]; echo" ". $ detalles [" fromaddr "]".
  • "; Eco"
  • SUJETO: ". $ Detalles [" Asunto "] ..php? Carpeta \u003d". $ Carpeta. "& Uid \u003d". $ uid ..php? carpeta \u003d ". $ carpeta." & uid \u003d ". $ uid". & FUNC \u003d Eliminar "\u003e Eliminar
  • "; Eco"
"; }

El compuesto $ IMAP debe abrirse en la carpeta deseada. Luego podemos pasar por las últimas 20 letras utilizando el número de mensajes obtenidos por IMAP_NUM_MSG (). La comunicación y el número de correo electrónico reciben IMAP_HEADER () para obtener información sobre el título, que luego se puede periquidarse para obtener información interesante del remitente, la dirección de correo electrónico, el nombre, el sujeto, etc.

Tenga en cuenta que el número de correo electrónico del número total de mensajes no es un identificador único para el mensaje. Si tiene 100 letras en su buzón, el último número será de 100, el anterior será 99, y así sucesivamente. Si elimina un mensaje en el número 100, entonces obtiene un mensaje nuevo, su número será 100.

Para proceder con las siguientes acciones, debe obtener un identificador único para correo electrónico. Cada letra tiene un identificador único llamado UID, que podemos obtener proporcionando un correo electrónico, la función para el número IMAP_UID () UID es único y no cambiará con el tiempo.

Ver el contenido del mensaje

La lectura del correo electrónico no es realmente un asunto simple como tareas anteriores, por lo que debe usar las clases de correo desarrolladas por Mitula Carle. Las siguientes tres funciones para nuestro ejemplo se adaptan a la clase a continuación:

codificación) (CASO 3: RETURNO IMAP_BASE64 ($ texto); CASO 4: RETURSE IMAP_QPRINT ($ texto); Predeterminado: Devuelve $ Texto;)) // Multipart si ($ estructura-\u003e tipo \u003d\u003d 1) (Foreach ($ estructura -\u003e Partes como $ index \u003d\u003e $ substruct) ($ prefijo \u003d ""; si ($ Partnumber) ($ prefijo \u003d $ Partnumber ".";) $ DATA \u003d get_part ($ imap, $ uid, $ mimetype, $ substruct € , $ prefijo. ($ índice + 1)); Si ($ DATA) (devuelva $ DA)))) devuelva false; ) Función get_mime_type ($ estructura) ($ primarioMimetype \u003d Array ("Texto", "Multipart", "Mensaje", "Aplicación", "Audio", "Imagen", "Video", "Otro"); Si ($ estructura -\u003e subtipo) (devuelva $ PrimaryMimetype [(int) $ estructura-\u003e tipo]. "/". $ Estructura-\u003e subtipo;) devuelva "texto / liso";)

La función GetBody () recibe contenido de correo electrónico, pasando su UID y la conexión IMAP. Dentro de la función, aclaramos la función get_part () con el tipo de contenido como texto / html. El mensaje de correo electrónico habitual es mucho más fácil de leer. Por lo tanto, primero intentamos encontrar los contenidos de HTML dentro del correo electrónico.

Luego leemos la estructura de correo electrónico utilizando la función IMAP_FETCHStructure (). Cambiamos las funciones de la biblioteca para usar el UID, en lugar de pasar constantemente FT_UID.

Luego obtenemos el tipo de mensaje de correo electrónico MIME usando la función get_mime_type (). Hay ocho tipos MIME devueltos por esta función como enteros:

  • 0 - Texto.
  • 1 - Multipart.
  • 2 - Mensaje
  • 3 - Aplicación
  • 4 - Audio.
  • 5 - imagen
  • 6 - Video
  • 7 - Otro

Giramos regresar a la cadena MIME de tipo real usando matrices de tipo MIME.

Los mensajes compuestos pueden tener una gran cantidad de subtipos, por lo que somos recursivamente a través de todos los subtipos usando parte de los números y recibiendo el correo electrónico usando IMAP_FETTHBODE () cuando el correcto está utilizando el tipo MIME.

Luego, utilizamos la función de decodificación adecuada de acuerdo con la codificación del tipo de mensaje y extender el contenido. Lista completa de tipos de codificación disponibles:

  • 0 - 7bit
  • 1 - 8bit
  • 2 - binario.
  • 3 - BASE64.
  • 4 - Cotizado-imprimible
  • 5 - Otros

Conclusión

Terminamos de ver los conceptos básicos de la conexión al servidor IMAP, una lista de mensajes dentro de las carpetas disponibles, y terminó de leer el contenido del mensaje de correo electrónico. En la página siguiente del registro, se describirá sobre las funciones que se pueden usar para implementar la funcionalidad adicional del cliente de correo, por ejemplo, eliminar mensajes y accesorios de procesamiento.

El otro día llegué a escribir un pequeño módulo en PHP, lo que permitiría trabajar con el correo entrante. Un poco en el Google, vi que para esta tarea es adecuada para mí, uno de los protocolos. Pop3 y Imap.
Pero la elección era obvia que usaré IMAP, ya que es más funcional y moderno, protocolo POP3.

Ahora, necesitaba averiguar rápidamente cómo trabajar con protocolos IMAP, cómo obtener cartas del servidor de correo electrónico de Yandex / Google.

Para un trabajo más conveniente, elegí la biblioteca. Phpimap Dado que puede implementar rápida y fácilmente todas las tareas que necesita.

Conectarse a POST Server.

Ahora, cuando decidimos la elección del protocolo y la elección de la biblioteca, intentaremos conectarnos al servidor POST.

Para el trabajo PHP completo con el protocolo IMAP, debe conectar la extensión. php_imap.dll / imap.so. en el archivo php.ini.

Para el inicio, intentemos conectarme a Yandex Mail ya que tengo los menos problemas con él.

// Conecte las bibliotecas de inclusión ("/ phpimap / mailbox.php"); Incluir ("/ phpimap / incomingmail.php"); // por conveniencia, cree una constante para conectarse al servidor postal. Definir ("mail_imap_server", "imap.yandex.ru"); Definir ("mail_imap_server_port", 993); Definir ("mail_imap_login", ""); Definir ("mail_imap_pass", "example_pass"); Define ("mail_imap_path", "(" .mail_imap_server. ":" Mail_imap_server_port. "/ IMAP / SSL) Bandeja de entrada"); $ Mailbox \u003d nuevo phpimap \\ mailbox (mail_imap_path, mail_imap_login, mail_imap_pass, __dir__); Intente ($ mailbox-\u003e getimapstream ();) captura (excepción $ e) (Die ($ e-\u003e getMessage ());)

Como vemos un diseñador de clase. Buzón Toma los siguientes argumentos:

  • Mail_imap_path - juntos una dirección de servidor (mail_imap_server), un puerto de conexión (mail_imap_server_port), un tipo de conexión (IMAP) y muestre que la conexión se cifrará (SSL). Después de los soportes rizados, especifique la carpeta a la que nos conectaremos, en este caso a los mensajes entrantes (Bandeja de entrada).
  • Mail_imap_login. - Buzón que se conectará.
  • Mail_imap_pass. - Contraseña (con mayor frecuencia es una contraseña del buzón).
  • __Dir__- Este es el camino a la carpeta en la que se guardarán los archivos anidados y los mensajes de correo electrónico.

Después de eso, verificaremos si nuestra conexión se creó a través del método. getimapstream () Si por alguna razón no se creará la conexión, entonces la aplicación arroja exclusiones con la causa de no una buena conexión.

Es importante tener en cuenta el hecho de que en la configuración de Yandex Mail puede deshabilitar la posibilidad de conectarse a través del protocolo IMAP.

Ahora vamos a comparar la conexión con el correo de Gmail.

Definir ("mail_imap_server", "imap.gmail.com"); Definir ("mail_imap_server_port", 993); Definir ("mail_imap_login", ""); Definir ("mail_imap_pass", "example_pass"); Define ("mail_imap_path", "(" .mail_imap_server. ":" Mail_imap_server_port. "/ IMAP / SSL) Bandeja de entrada");

Como vemos, casi no se diferencia de la conexión anterior, pero lo más probable es que tenga una excepción al conectarse al servidor.
Este problema se debe al hecho de que El trabajo de protocolo de Gmail IMAP está deshabilitado por defecto. Puede habilitarlo en la configuración en la pestaña Reenvío y POP / IMAP en la opción de acceso mediante el protocolo IMAP ⇒ Habilitar IMAP.

Después de que hemos encendido el trabajo en el protocolo IMAP, necesitamos crear una aplicación de contraseña. Para poder crear, necesitamos hacer dos factores de autorización para este perfil. Después de eso, puedes proceder a su creación. Cuando creamos una nueva contraseña para la aplicación, debemos insertarnos en la constante Mail_Imap_Pass para conectarse al servidor.

Tenga en cuenta que al crear una aplicación de contraseña, es posible que no pueda conectarse al servidor está conectado con el hecho de que esta contraseña aún no se ha aplicado finalmente al servicio de Gmail generalmente toma 5-60 minutos.

Muestreo de datos

Después de una conexión exitosa, podemos ejecutar una solicitud para obtener mensajes de sudor del servidor. Para esto usaremos el método. searchmailbox (cadena $ criterios) que es esencialmente un método de envoltura imap_search.. Es importante entender que el argumento de $ criterios es una búsqueda determinada para la búsqueda que necesitamos, el método en sí, devuelve los identificadores de los elementos que posteriormente lo usan para obtener información detallada por correo.

$ Mailsids \u003d $ mailbox-\u003e searchmailbox ("all");

Como ya has adivinado aquí, obtenemos todos los mensajes.
Y ahora intentemos resolverlo con otros criterios de búsqueda igualmente importantes:

// Todos los mensajes durante 3 días. $ Mailsids \u003d $ mailbox-\u003e searchmailbox ("desde" .date ("D-M-Y", Strtotime ("- 3 día")). ""); ""); // Mensajes no leídos durante 3 días. $ Mailsids \u003d $ mailbox-\u003e searchmailbox ("invisible desde" .date ("D-M-Y", Strtotime ("- 3 días")). ""); ""); // Buscar mensajes con una correspondencia de este tipo en el título del texto. $ Mailsids \u003d $ mailbox-\u003e SearchmailBox ("Texto" boletín "); // Busca mensajes con tal correspondencia en el encabezado del cuerpo. $ Mailsids \u003d $ mailbox-\u003e SearchmailBox ("Body" Mensaje informativo "); // Buscar por correo electrónico remitente. $ Mailsids \u003d $ mailbox-\u003e searchmailbox ("de" "); // Obtener mensajes en el sujeto $ MailSids \u003d $ Mailbox-\u003e SearchmailBox ("Asunto" Actualizaciones para su teléfono ");

Este ejemplo refleja los conceptos básicos para usar los criterios de búsqueda.

Recibiendo la información

Ahora, cuando tenemos una matriz de identificadores de mensajes, estamos listos para procesarlo:

// Obtenga el identificador del último mensaje de la matriz. $ Id \u003d final ($ mailsids); // Obtenga una instancia de un objeto de clase incomingmail que contiene información sobre el mensaje. $ Mail \u003d $ mailbox-\u003e getmail ($ id); // Obtenga archivos incrustados en este mensaje si lo es. $ Mail-\u003e gettatchments (); // Mostrar mensajes. Echo $ mail-\u003e texthtml;

Así que recibimos mensajes de nuestra carta y sus inversiones sin ningún problema.

Características adicionales.

En esta biblioteca, también la presencia de una serie de métodos útiles para un trabajo más conveniente con mensajes postales:

Guarda mensajes por su identificación.

$ BAILBOX-\u003e SAFEMAIL ($ ID, $ ID. "EML");

Establecemos mensajes como no leídos por su identificación.

$ BAILBOX-\u003e MarkmailasunRead ($ ID);

Establecemos mensajes como leídos por su identificación.

$ BAILBOX-\u003e MarkmailasRead ($ ID);

Instale el mensaje en su ID.

$ BAILBOX-\u003e MarkmailasImportante ($ ID);

Eliminar mensajes por su ID.

Una de las posibles características de las solicitudes de IMAP es la creación de un demonio postal, que administrará los usuarios de suscripción y orientación de su lista de correo. Para implementar esta tarea, se usan dos métodos generalmente en los bloqueos de correo. El primero sugiere que el usuario debe ir a una página determinada y confirmar sus acciones, el segundo requiere enviar una carta. El segundo también requiere que el script de procesamiento se lanzará regularmente CRON DAEX-OM. Debido a esto, no es tan popular como el primer camino.

Pero, como puede ver, los boletines más graves utilizan el segundo método. Por lo tanto, si tiene la capacidad de usar Cron, use.

En realidad, no es difícil entender las funciones. Algunas dificultades pueden surgir con el análisis de los encabezados de letras que procesarán el guión.

El algoritmo de la obra del script en sí es fácil. El demonio establece una conexión con el servidor de correo y comprueba la presencia de letras. En caso de que no haya letras, el trabajo del script se detiene. Si hay letras, hay un análisis de los encabezados de la primera letra. Puedes ver los campos desde y sujetos. Si el campo de asunto contiene una de las dos opciones de encabezado permisibles (suscripción o grabación), el registro que corresponde al campo desde el campo se está activo (confirmado) o se elimina de la tabla. En ambos casos, la dirección especificada en el campo FROM se envía a la notificación apropiada de la acción del script. Después de eso, la letra está marcada para su eliminación. Si el sujeto no contiene temas permisibles, se envía una notificación de error, y la letra también está marcada para la eliminación. Luego el script se mueve a la siguiente letra. Habiendo terminado el análisis de todas las letras, limpia la caja.

La función IMAP_OPEN se usa para abrir la caja. A medida que PHP admite múltiples protocolos, entonces es necesario especificar explícitamente qué protocolo se usa para trabajar con el cajón. En nuestro caso, es POP3 a 110 puerto (estándar). Asignamos el resultado del script al script My_Box.

$ My_box \u003d imap_open ("(you.pop.host/pop3:110)", "Iniciar sesión", "Contraseña");

En el futuro, verá que esta variable se usará de manera práfica en todas las características de IMAP. A continuación, marque la casilla para las letras. La verificación realiza la función IMAP_NUM_MSG.

$ n \u003d imap_num_msg ($ my_box);

Como resultado, la variable $ N contendrá el número de letras en la caja. El número puede ser más cero, o igual a él (si la caja está vacía). Si hay letras, entonces en el ciclo del tiempo, realizamos el análisis de letras, aumentando constantemente el número de letra por unidad. Tenga en cuenta que la primera letra en la caja tendrá el número 0, y el primer elemento de la matriz. Para aumentar el número de letra, asignar un valor de $ m variable 0, y luego en condiciones del ciclo, lo aumentamos por unidad $ M ++.

Para analizar los titulares de interés para nosotros, dos funciones son suficientes: imap_header e imap_fetch_overview. Para realizar cada uno de ellos, además del cajón, debe especificar el número de letra. En nuestro caso, será igual a la variable de $ m.

iMAP_HEADER devuelve un objeto como resultado de la ejecución que contiene información exhaustiva sobre el encabezado de la letra. Entre otras cosas, este objeto contiene una matriz de la de, que contiene cuatro valores. Esto es personal, adl, buzón y host. Solo estamos interesados \u200b\u200ben el buzón y el anfitrión. Sustituyendo, obtenemos la dirección de la que se envió la carta.

$ H \u003d imap_header ($ my_box, $ m); $ H \u003d $ h-\u003e de; Foreach ($ H como $ k \u003d\u003e $ V) ($ buzón \u003d $ v-\u003e buzón; $ host \u003d $ v-\u003e host; $ personal \u003d $ v-\u003e personal; $ correo electrónico \u003d $ buzón. "@". $ Host;

imap_fetch_overview: nos permitirá conocer el sujeto de la letra. Para los mismos fines, se podría usar IMAP_HEADER, pero por varias razones, a veces puede no funcionar. De la matriz que devuelve esta función, solo necesitamos el campo de la asignatura.

$ s \u003d imap_fetch_overview ($ my_box, $ m); foreach ($ s como $ k \u003d\u003e $ v) $ SUBJ \u003d $ v-\u003e sujeto;

Además, nuestras acciones se reducen para extraer un correo electrónico de la base, y en caso de tenerlo allí, marque toda la cadena con esta entrada, o eliminada. Supongamos que después de completar el formulario de correo en el sitio, el suscriptor se le asigna el estado 0, y después de confirmar la suscripción, cambia a 1.

If ($ subj \u003d\u003d "Suscríbase") (MYSQL_QUERY ("ACTUALIZACIÓN DESCRIBIRSE SET STAT \u003d 1 DONDE EL CORREO ELECTRÓNICO \u003d $ MY_EMAIL"); $ DEL \u003d IMAP_DELETE ($ MY_BOX, $ M); correo ($ correo electrónico, $ add_sbj, $ add_text , $ $ Encabezados);) De lo contrario, si ($ SUBJ \u003d\u003d "DESCRIBIRSE DE SUBSCRIBIR") (MYSQL_QUERY ("Eliminar desde suscribirse donde correo electrónico \u003d $ my_email"); $ del \u003d imap_delete ($ my_box, $ m); correo ($ email, $ $) del_sbj, $ del_text, $ encabezados);) otra cosa ($ del \u003d imap_delete ($ my_box, $ m); correo ($ correo electrónico, $ er_sbj, $ er_text, $ encabezados);) Después de realizar todas las acciones, el script limpia la caja . $ Claro \u003d imap_expunge ($ my_box);

Este simple programa es solo una demostración que puede escribir, no solo cambiando dinámicamente los sitios, sino también los servicios que no son visibles en absoluto.

Listado de todo el programa con la excepción de los parámetros de conexión con la base de datos:

Incluir "config.php"; // Conexión de la base de datos $ my_box \u003d imap_open ("(you.pop.host/pop3:110)", "Iniciar sesión", "Contraseña"); $ n \u003d imap_num_msg ($ my_box); $ m \u003d 0; $ add_text \u003d "Gracias por confirmar su suscripción"; $ add_sbj \u003d "¡Usted agregó!"; $ Del_Text \u003d "Ha sido eliminado de la lista de correo"; $ del_sbj \u003d "Eliminar de la lista"; $ ERR_TEXT \u003d "Lo sentimos, pero este buzón se usa solo para administrar el correo"; $ ERR_SBJ \u003d "ERROR"; $ Encabezados \u003d "Desde: Suscríbase Robot X-MAILER: PHP4 Tipo de contenido: Texto / Plain; Charset \u003d Windows-1251"; Si ($ n! \u003d 0) (mientras que ($ M ++< $n) { $h = imap_header($my_box, $m); $s = imap_fetch_overview($my_box, $m); $h = $h->dE; Foreach ($ H como $ k \u003d\u003e $ V) ($ buzón \u003d $ v-\u003e buzón; $ host \u003d $ v-\u003e host; $ personal \u003d $ v-\u003e personal; $ correo electrónico \u003d $ buzón. "@". $ host; $ my_email \u003d mysql_escape_string ($ correo electrónico);) foreach ($ s como $ k \u003d\u003e $ v) $ subj \u003d $ v-\u003e sujeto; if ($ subj \u003d\u003d "Suscríbase") (MySQL_QUERY ("STUD DE ACTUALIZACIÓN DE LA TABLATA DE LA TABLA \u003d 1 DONDE EL CORREO ELECTRÓNICO \u003d $ MY_EMAIL"); // imprime mysql_error (); $ del \u003d imap_delete ($ my_box, $ m); correo ($ Correo electrónico, $ add_sbj, $ add_text, $ encabezados);) else ($ subj \u003d\u003d "darse de baja") (MySQL_QUERY ("Eliminar de la tabla donde el correo electrónico \u003d $ my_email"); $ del \u003d imap_delete ($ my_box, $ m) ; Correo ($ correo electrónico, $ del_sbj, $ del_text, $ encabezados);) otra cosa ($ del \u003d imap_delete ($ abre_box, $ m); correo ($ correo electrónico, $ er_sbj, $ er_text, $ encabezados))) despejado \u003d imap_expunge ($ my_box); )

En Listinge, no hay algunos detalles, como la posible conversión de la victoria en KOI, volviendo a compretar el buzón del remitente, etc. Estos ya son excesos funcionales que todos pueden agregarse según sea necesario.