PHP - Ayuda guardar email en BD

 
Vista:
Imágen de perfil de Alfredo
Val: 7
Ha aumentado su posición en 23 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda guardar email en BD

Publicado por Alfredo (3 intervenciones) el 30/11/2020 21:49:35
buenas tardes, quisiera saber si me pueden ayudar con un pequeño problema que tengo,
quisiera guardar los correos que llegan a un email en una base de datos y se reenvíen a otros dos destinatario,
tengo este código pero me da un error en el imap_open adjunto codigo y error, quisiera saber como podría solucionar el error,
o como podría hacer para lograr guardar los correos entrantes en la BD y que se reenvíen a otros 2 destinatarios.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
    error_reporting(E_ALL);
    ini_set("display_errors", 1);
 
    $mysqli = new mysqli("localhost","xxxx","xxxxx","xxxxx");
 
    // Las fechas de la anterior carga, para buscar solo los correos nuevos
    $consulta = "SELECT fecha FROM EmailRecibidos order by fecha desc limit 1";
    $resultado = $mysqli->query($consulta);
    $fila = $resultado->fetch_row();
 
    $ultima_fecha = $fila[0];
    $ultima_nueva_fecha = strtotime('+1 second', strtotime($ultima_fecha));
    $ultima_nueva_fecha = date('Y-m-d H:i:s', $ultima_nueva_fecha);
    $fecha_actual = date("Y-m-d H:i:s");
 
    // Datos del correo para guardar el inbox
    $hostname = '{imap.gmail.com:993/imap/ssl/novalidate-cert}';
    $username = 'correo@corporativo.com'; $password = 'contraseña';
    $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());
    print_r(imap_errors());
 
    $MC = imap_check($inbox);
    $result = imap_fetch_overview($inbox,"1:{$MC->Nmsgs}",0);
 
    foreach ($result as $overview) {
        // Estas lineas son para formatear los datos para ser guardados en MySQL sin errores.
        $unixTimestamp = strtotime($overview->date);
        $fecha = date("Y-m-d H:i:s", $unixTimestamp);
        $header = imap_headerinfo($inbox, $overview->msgno);
        $desde = $header->from[0]->mailbox . "@" . $header->from[0]->host;
        $asunto = imap_utf8($overview->subject);
        $cuerpo = quoted_printable_decode(imap_fetchbody($inbox,$overview->msgno,1));
 
        // Guardo los correos nuevos en la DB
        $mysqli->query("INSERT INTO EmailRecibidos VALUES ($overview->msgno, '$fecha', '$desde', '$asunto',  '$cuerpo')");
    }
 
    // Comparo las fechas, para ver si existen nuevos correos (para re-enviar)
    $resultado2 = $mysqli->query("SELECT * FROM EmailRecibidos WHERE fecha BETWEEN '$ultima_nueva_fecha' AND '$fecha_actual'");
    $num = $resultado2->num_rows;
 
    // Se re-envia cualquier correo nuevo.
    if ($num>0) {
        while($row = $resultado2->fetch_assoc()) {
            $id = $row["id"];
            $fecha = $row["fecha"];
            $desde = $row["desde"];
            $asunto = utf8_decode($row["asunto"]);
            $cuerpo = utf8_decode($row["mensaje"]);
 
            echo "Los correo se han re-enviado con exito";
 
            $to = "correo1@corporativo.com"; //editar despues
            $to2 = "correo2@corporativo.com"; //editar despues
            $subject = "Redireccion de correo cliente";
            $headers = 'MIME-Version: 1.0' . "\r\n";
            $headers = "From: correo@corporativo.com" . "\r\n";
            $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
            $message = "
            <html>
            <head>
            <title>HTML</title>
            </head>
            <body>
            <h1>#{$id} - Fecha: ({$fecha}) - Desde: {$desde} Asunto: {$asunto}</h1>
            <br><br>
            <p>Cuerpo: $cuerpo</p>
            </body>
            </html>";
            mail($to, $subject, $message, $headers);
            mail($to2, $subject, $message, $headers);
        }
    } else {
        echo "No existen correos nuevos";
    }
?>

1
2
3
4
5
6
7
8
9
10
11
12
PHP Warning:  imap_open(): Couldn't open stream {imap.gmail.com:993/imap/ssl/novalidate-cert} in /Apps/toolbox/cl/bash/email.php on line 20
Warning: imap_open(): Couldn't open stream {imap.gmail.com:993/imap/ssl/novalidate-cert} in /Apps/toolbox/cl/bash/email.php on line 20
Cannot connect to Gmail: Can not authenticate to IMAP server: [AUTHENTICATIONFAILED] Invalid credentials (Failure)PHP Notice:  Unknown: Retrying PLAIN authentication after [AUTHENTICATIONFAILED] Invalid credentials (Failure) (errflg=1) in Unknown on line 0
 
Notice: Unknown: Retrying PLAIN authentication after [AUTHENTICATIONFAILED] Invalid credentials (Failure) (errflg=1) in Unknown on line 0
PHP Notice:  Unknown: Retrying PLAIN authentication after [AUTHENTICATIONFAILED] Invalid credentials (Failure) (errflg=1) in Unknown on line 0
 
Notice: Unknown: Retrying PLAIN authentication after [AUTHENTICATIONFAILED] Invalid credentials (Failure) (errflg=1) in Unknown on line 0
PHP Notice:  Unknown: Can not authenticate to IMAP server: [AUTHENTICATIONFAILED] Invalid credentials (Failure) (errflg=2) in Unknown on line 0
 
Notice: Unknown: Can not authenticate to IMAP server: [AUTHENTICATIONFAILED] Invalid credentials (Failure) (errflg=2) in Unknown on line 0


Saludos, Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Ayuda guardar email en BD

Publicado por Alejandro (839 intervenciones) el 03/12/2020 17:25:08
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
1
2
3
4
5
6
Comprueba que IMAP esté activado
En la computadora, abre Gmail.
En la esquina superior derecha, haz clic en Configuración Configuración y luego Ver toda la configuración.
Haz clic en la pestaña Reenvío y correo POP/IMAP.
En la sección "Acceso IMAP", haz clic en Habilitar IMAP.
Haz clic en Guardar cambios.
https://support.google.com/mail/answer/7126229?hl=es-419
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Ayuda guardar email en BD

Publicado por Mauro (1036 intervenciones) el 09/12/2020 12:55:31
Si estás trabajando con Gmail te conviene usar la SDK que ellos te proveen
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Yoel
Val: 617
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Ayuda guardar email en BD

Publicado por Yoel (198 intervenciones) el 09/12/2020 18:55:45
Hola, si el correo que estas usando es gmail, tienes que darle permiso en la seguridad para aplicaciones menos seguras ya que si esta opción esta deshabilitada no te permite la conexión ni por imap ni por smtp. Lo cual te impide la carga de los correo.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar