entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Se puede insertar el contenido de un correo en la base de datos?

Buenas tardes amigos, se me ha planteado el siguiente proyecto. Nuestro sistema de gestión envía un correo electrónico al usuario cuando ocurre cualquier actualización en entradas que el usuario haya realizado. Nuestro proyecto ahora es que el usuario pueda insertar comentarios en su entrada con sólo responder al correo electrónico. La tabla de comentarios tiene la siguiente estructura:

IdComentario   IdEntrada   filecomment  UserLogin   Fecha_dd   Fecha_mm   Fecha_yy   FileUpload1   FileUpload2   FileUpload3
------------   ---------   ----------   ---------   --------   --------   --------   -----------   -----------   -----------
1              9974        Comentario1  lopezg      15         02         2016       201602151.jpg

------ EJEMPLO CONSULTA SQL ------
$mail_from = persona que envía el correo y por lo tanto responde comentando algo sobre la Entrada en cuestión
$IdEntrada_obtenida_de_cabecera = número encontrado después del patrón: {{Entrada: y antes de }}
$mailbody = contenido del mensaje que responde el usuario desde el inicio hasta que encuentre la nueva cabecera del reenvío
***************
$sql = "insert into entries (IdEntrada, date_dd, date_mm, date_yy, login, filecomment) values (".$IdEntrada_obtenida_de_cabecera.", datepart(dd,getdate()), datepart(mm,getdate()), Right(Cast(Year(getdate()) As Char(4)),2), '".$mail_from."', '".$mailbody."')";

Nuestra base de datos es SQL y nuestra Web corre en PHP. Mi cuestión es, habrá alguna forma de que ejecutar un script PHP que recorra todos los correos que cumplan un determinado formato en el asunto, por ejemplo se me ocurre RE:{{Entrada:9974}} y cuando encuentre ese asunto pues coja el cuerpo del mensaje y realice una consulta SQL con los parámetros necesarios y los archivos adjuntos los mueva a una carpeta determinada con un nombre formateado que luego se agreguen de igual manera en la consulta SQL de inserción del comentario?

La verdad es que no sé como se haría esto, lo que estoy seguro es de que se puede hacer porque en programación prácticamente todo es posible y lo que busco creo que no viola ningún protocolo de seguridad que me prohibiera hacerlo...

Qué pensáis? Creéis que es muy complicado de hacer?

1 Respuesta

3votos

carlossevi Puntos63580

En cuanto a arquitectura no lo veo complicado. El buzón de correo al que los usuarios van a enviar sus respuestas supongo que ya lo tenéis. A partir de ahí necesitais programar una pieza de software que se comporte como cliente de correo que se conecte con el servidor (bien por IMAP, POP3...) y procese las respuestas. Cada email procesado podría ser eliminado, movido a otro buzón, carpeta, etc.

Lo que sí que veo más complejo es la lógica que debe seguir el software durante el procesado de cada correo. Independientemente de plataforma y lenguaje de programación (podría hacerse en cualquiera que tenga acceso al servidor de correo y a la base de datos) la dificultad está en interpretar la entrada de datos que no deja de ser un texto plano o incluso formateado con html como un email cualquiera.

Yo intentaría hacer un uso muy intensivo de expresiones regulares para validar el formato de los emails recibidos, extraer los datos concretos del texto y validar longitudes, tipos de datos... si esto no se hace con muchísimo cuidado puedes tener un problema de seguridad e integridad de los datos. Con las expresiones regulares puedes ser muy extricto para que sólo se procesen los emails que lleguen con las reglas determinadas.

Si estuviera en tu lugar no desacartaría que los datos fuesen incorporados a un sitio temporal donde un usuario mediante una interfaz deba aprobar los cambios.

1voto

ankeorum comentado

Muchas gracias por tu punto de vista, ha sido muy constructivo. En cuanto a la forma de procesar los correos podría hacerlo un script PHP? Obviamente lo que propones de que una vez procesados se muevan de carpeta (cambiarlos de inbox) es excelente ya que haría que no se tuviera que procesar todo el set de correos todas las veces.

Tomo nota de todas las recomendaciones, ahora para ir "al turrón" qué sugieres utilizar? Existen funciones PHP que recorran un set de correos en un inbox concreto? De ser así lo de utilizar las RegEx lo controlo ya que soy el más experto aquí en la empresa haciéndolo. Sería cuestión de una vez encontrada la forma de recorrer los correos hacer algo así como:

foreach $correo en $inbox
{
if ($asunto match "RegEx")
{
   obtener_body($correo);
   obtener_from($correo);
}
}

El problema para mi ahora mismo radica en que no se si eso que quiero hacer se puede hacer, es decir, si existen funciones que lo hagan.

2votos

carlossevi comentado

Yo no haría este desarrollo en PHP porque me sentiría más cómodo con otro lenguaje de backend, pero te recomiendo echarle un vistazo a todas las funciones que PHP tiene para la gestión de conexiones IMAP.

1voto

Leonardo-Tadei comentado

Tal y como dice el colega @carlossevi, PHP puede leer una casilla de e-mail.

Si bien las fucniones se llaman IMAP_*, sirven tanto para leer mensajes POP3, IMAP y NNTP.

0voto

ankeorum comentado

Buscaré la documentación que me recomendáis. @carlossevi que lenguaje utilizarías tu?

1voto

carlossevi comentado

El lenguaje que utilizaría yo es lo de menos, PHP es un lenguaje que puede ser válido incluso para crear aplicaciones de escritorio, pero yo me encuentro cómodo con él para hacer aplicaciones que manejan solicitudes web, para temas de puro backend prefiero otros con los que tengo más soltura y base. Pero como te digo ya entramos en cuestión de preferencias personales, conocimiento de las librerías y funciones disponibles, etc.

0voto

ankeorum comentado

Lo he solucionado satisfactoriamente usando PHP. Lo más complicado, como bien apuntaste, es mediante expresiones regulares y comparaciones en la cadena que compone el texto encontrar donde empieza la respuesta.

0voto

carlossevi comentado

¡Qué bueno! Genial.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta