¿Cómo recibir correos electrónicos usando PHP e IMAP?

Leer correos de la cuenta de Gmail usando PHP será una tarea enriquecedora para los desarrolladores web por su sencillez de código a través de IMAP (Protocolo de Acceso a Mensajes de Internet). A veces puede haber un requerimiento en proyectos web o de un cliente que necesita la gestión completa de los correos electrónicos de la bandeja de entrada o el acceso a los contenidos del correo electrónico desde su cuenta de Gmail. Esta característica también puede ser útil en marketing por correo electrónico o boletines por correo electrónico que se enviarán automáticamente en un horario particular. Entonces, mientras investiga el acceso a la cuenta de Gmail, debe intentar enumerar los correos electrónicos de la cuenta de Gmail usando PHP y su extensión de funciones IMAP.

IMAP es un protocolo estándar de Internet utilizado por los clientes para recibir correos electrónicos de un servidor de correo a través de una conexión TCP/IP con seguridad SSL. La extensión IMAP disponible en las bibliotecas de PHP proporciona un procesamiento eficiente de su estructura de correo electrónico y acceso a los mensajes de correo electrónico a través de la comunicación con los servidores de correo electrónico. 
Usamos código PHP para conectarnos al servidor de Gmail y usamos funciones IMAP estándar para abrir la cuenta de Gmail y acceder o buscar correos electrónicos según ciertos criterios.

Requisitos básicos: Se necesitan los siguientes para el desarrollo de la funcionalidad.

  1. PHP5 o la última versión de PHP.
  2. Habilite la extensión IMAP en la instalación de PHP.
  3. En la configuración de la cuenta de Gmail, IMAP debe estar habilitado.

Pasos para habilitar IMAP en XAMPP:

  1. Ir al archivo de configuración php.ini
  2. Busque “;extensión=php_imap.dll”
  3. Elimine el comienzo del punto y coma y debería ser «extensión = php_imap.dll»
  4. Edite también max_execution_time = 4000

Pasos para habilitar IMAP en la cuenta de Gmail:

  1. Abre Gmail.
  2. Haga clic en Configuración.
  3. Seleccione la pestaña azul Reenvío y POP/IMAP.
  4. Seleccione la sección «Acceso IMAP:» y el botón de radio Habilitar IMAP.
  5. Haga clic en Guardar cambios.
  6. No olvide activar el acceso para aplicaciones menos seguras para la cuenta de Gmail.

Nota: Para aplicaciones normales, un servidor IMAP escucha en el número de puerto 143.

Código PHP: el siguiente es el código HTML y PHP para enumerar los correos electrónicos de la cuenta de Gmail. Para conectarse a Gmail, el desarrollador necesita que el «nombre de usuario» y la «contraseña» de la persona se establezcan en el código. Una vez conectado, buscamos todos los correos electrónicos o correos electrónicos según ciertos criterios mediante el uso de la función imap_search() . Los correos electrónicos se ordenan de forma inversa para que los últimos correos estén disponibles en la parte superior utilizando la función PHP rsort() . Esta función de PHP ordena una array en orden descendente. Para cada correo electrónico devuelto, se capturan el asunto, el remitente, el contenido parcial y los mensajes de fecha y hora. La función imap_fetchbody() obtiene una sección particular del cuerpo del correo electrónico. Entonces, para obtener la parte de texto sin formato del correo electrónico, podemos usar la opción «1.1» como tercer parámetro. 
 

HTML

<!DOCTYPE html>
<html>
  
<head>
    <link rel="stylesheet" href=
"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <link rel="stylesheet" href="style.css">
  
    <script>
        function getEmails() {
            document.getElementById('dataDivID')
                .style.display = "block";
        }
    </script>
</head>
  
<body>
    <h2>List Emails from Gmail using PHP and IMAP</h2>
  
    <div id="btnContainer">
        <button class="btn active" onclick="getEmails()">
            <i class="fa fa-bars"></i>Click to get gmail mails
        </button>
    </div>
    <br>
      
    <div id="dataDivID" class="form-container" style="display:none;">
        <?php
            /* gmail connection,with port number 993 */
            $host = '{imap.gmail.com:993/imap/ssl/
                    novalidate-cert/norsh}INBOX';
            /* Your gmail credentials */
            $user = 'YOUR-EMAIL@GMAIL.COM';
            $password = 'YOUR-PASSWORD';
  
            /* Establish a IMAP connection */
            $conn = imap_open($host, $user, $password) 
                 or die('unable to connect Gmail: ' . imap_last_error());
  
            /* Search emails from gmail inbox*/
            $mails = imap_search($conn, 'SUBJECT "Comment"');
  
            /* loop through each email id mails are available. */
            if ($mails) {
  
                /* Mail output variable starts*/
                $mailOutput = '';
                $mailOutput.= '<table><tr><th>Subject </th><th> From  </th> 
                           <th> Date Time </th> <th> Content </th></tr>';
  
                /* rsort is used to display the latest emails on top */
                rsort($mails);
  
                /* For each email */
                foreach ($mails as $email_number) {
  
                    /* Retrieve specific email information*/
                    $headers = imap_fetch_overview($conn, $email_number, 0);
  
                    /*  Returns a particular section of the body*/
                    $message = imap_fetchbody($conn, $email_number, '1');
                    $subMessage = substr($message, 0, 150);
                    $finalMessage = trim(quoted_printable_decode($subMessage));
  
                    $mailOutput.= '<div class="row">';
  
                    /* Gmail MAILS header information */                   
                    $mailOutput.= '<td><span class="columnClass">' .
                                $headers[0]->subject . '</span></td> ';
                    $mailOutput.= '<td><span class="columnClass">' . 
                                $headers[0]->from . '</span></td>';
                    $mailOutput.= '<td><span class="columnClass">' .
                                 $headers[0]->date . '</span></td>';
                    $mailOutput.= '</div>';
  
                    /* Mail body is returned */
                    $mailOutput.= '<td><span class="column">' . 
                    $finalMessage . '</span></td></tr></div>';
                }// End foreach
                $mailOutput.= '</table>';
                echo $mailOutput;
            }//endif 
  
            /* imap connection is closed */
            imap_close($conn);
            ?>
    </div>
</body>
  
</html>

Código CSS: El siguiente es el código para el archivo «style.css» utilizado en el código anterior.

CSS

body {
   font-family: Arial;
 }
  table {
     font-family: arial, sans-serif;
     border-collapse: collapse;
     width: 100%;
 }
  tr:nth-child(even) {
     background-color: #dddddd;
 }
 td, th {
     padding: 8px;
     width:100px;
     border: 1px solid #dddddd;
     text-align: left;                
 }
 .form-container {
     padding: 20px;
     background: #F0F0F0;
     border: #e0dfdf 1px solid;                
     border-radius: 2px;
 }
 * {
     box-sizing: border-box;
 }
 
 .columnClass {
     float: left;
     padding: 10px;
 }
 
 .row:after {
     content: "";
     display: table;
     clear: both;
 }
 
 .btn {
     background: #333;
     border: #1d1d1d 1px solid;
     color: #f0f0f0;
     font-size: 0.9em;
     width: 200px;
     border-radius: 2px;
     background-color: #f1f1f1;
     cursor: pointer;
 }
 
 .btn:hover {
     background-color: #ddd;
 }
 
 .btn.active {
     background-color: #666;
     color: white;
 }

Salida: La siguiente es la salida que se muestra para los correos electrónicos recuperados con el asunto «Comentario».

Publicación traducida automáticamente

Artículo escrito por geetanjali16 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *