2010-08-12 13 views
5

Solo para decir ... No tengo idea de cómo voy a hacer esto :).¿Cómo insertar un mensaje de correo electrónico entrante en la base de datos mySQL?

En otras palabras, la cosa es: Recibes un mensaje de correo de algún tipo [email protected], respondes con tu propio contenido, y [email protected] tiene tu respuesta almacenada en su base de datos.

Adicional: Uso el alojamiento compartido, código en PHP, entiendo ASP. Si tiene una idea de cómo escribir este guión en otro idioma, no se moleste en explicarme, porque no entenderé nada.

También se agradece un enlace a una solución.

Gracias de antemano.

+0

Este es un tipo de servicio, no creo que esto sea posible en alojamiento compartido, necesitará más privilegios. – Youssef

+0

Esta es una pregunta frecuente intenta buscar SO para las muchas respuestas anteriores. – symcbean

Respuesta

6

Así
- Dispone de un servidor
- se obtiene correos electrónicos
- que desea guardarlos int una base de datos MySQL

Cpanel config
- ir al correo electrónico cpnal promotor de
- agregue uno nuevo
- redireccione a PATH - > /home/your_user/whatever/php.script.php

script php (puede que tenga que cambiar la ruta "/ usr/bin/php -q" dependiendo de la configuración del servidor)

#!/usr/bin/php -q 
<?php 
chdir(dirname(__FILE__)); 
$fd = fopen("php://stdin", "r"); 
$email = ""; 
while (!feof($fd)) { 
    $email .= fread($fd, 1024); 
} 
fclose($fd); 

if(strlen($email)<1) { 
    die(); 
} 

// handle email 
$lines = explode("\n", $email); 

// empty vars 
$from = ""; 
$to=""; 
$subject = ""; 
$headers = ""; 
$message = ""; 
$splittingheaders = true; 

for ($i=0; $i < count($lines); $i++) { 
    if ($splittingheaders) { 
     // this is a header 
     $headers .= $lines[$i]."\n"; 
     // look out for special headers 
     if (preg_match("/^Subject: (.*)/", $lines[$i], $matches)) { 
      $subject = $matches[1]; 
     } 
     if (preg_match("/^From: (.*)/", $lines[$i], $matches)) { 
      $from = $matches[1]; 
     } 
     if (preg_match("/^To: (.*)/", $lines[$i], $matches)) { 
      $to = $matches[1]; 
     } 
    } else { 
     // not a header, but message 
     $message .= $lines[$i]."\n"; 
    } 
    if (trim($lines[$i])=="") { 
     // empty line, header section has ended 
     $splittingheaders = false; 
    } 
} 

Obras en alojamiento compartido también! :)

Todo lo que necesita agregar es la inserción mysql y usar las variables definidas anteriormente. ¿Sabes cómo usar una base de datos mysql de php? ¿O necesitas ayuda con eso también?

+0

Solo esta parte estoy confundido en: '- ir a ccnal reenviador de correo electrónico' Yo uso Nginx servidor web con Ubuntu - alguna sugerencia para mí ?? – TheBlackBenzKid

+0

¿Qué software/servicio de servidor de correo estás usando? –

+0

Por el momento nada. Estoy usando Sendgrid el servidor SMTP principalmente y también SwiftMailer - Nginx para el servidor HTTP - no hay ningún panel de control. Es todo núcleo duro ... – TheBlackBenzKid

1

Tuve el mismo problema y estaba buscando algo en PHP, así que primero busqué un analizador y luego un importador de DB.

Así que ellos juntos y conseguimos esto: https://github.com/escobar022/php-imap-ToDB

me encontré con que la parte más importante era saber cómo un correo electrónico se rompe (cabecera, cuerpo, etc). Así que encontré una clase de analizador (https://github.com/barbushin/php-imap) que elimina los correos electrónicos y recupera el correo electrónico en sus partes esenciales y tiene la capacidad de descargar los elementos. Yo recomendaría intentar dividir un correo electrónico complejo en partes y ver qué está sucediendo exactamente.

Una vez que entendí esto, traté de enviarlo usando PHPmailer, y descubrí cómo se necesita cada parte para replicar el correo electrónico. Una vez que descubrí esto, almacené estas partes, descomponiendo los encabezados/cuerpo/archivos adjuntos (rutas relativas) en la base de datos.

Espero que esto ayude!

Cuestiones relacionadas