¿Como resolver este problema? ¿Alguna idea?

A mi jefe se le ha ocurrido que sus correos electrónicos se descarguen solos... y se guarden en el servidor solos.

-En un principio he visto un par de scripts en python que sirven para descargar correos.

El punto es : se descargan los correos y luego deberia pasarselos segun pienso a algun otro script que los recibiera como argumento

nombre_script archivo_correo


y me insertara el nombre en una base de datos para despues poder descargarlos.

Ahora seria algo como un cron para estar descargando los correos (los correos pueden llegar en cualquier momento) así que este cron debiese estar funcionando todo el tiempo. Luego como hacer para que cuando se descargue se realice la acción automática para pasarle el archivo al script que lo insertara en la bd para su posterior descarga :-?

PD : lo del cron es un ejemplo. Tal vez hay otra cosa que desconozco

¿Por qué descargar los correos? porque necesito el adjunto...

Cualquier idea es bienvenida. Saludos :)
kyo2009 escribió:A mi jefe se le ha ocurrido que sus correos electrónicos se descarguen solos... y se guarden en el servidor solos.

-En un principio he visto un par de scripts en python que sirven para descargar correos.

El punto es : se descargan los correos y luego deberia pasarselos segun pienso a algun otro script que los recibiera como argumento

nombre_script archivo_correo


y me insertara el nombre en una base de datos para despues poder descargarlos.

Ahora seria algo como un cron para estar descargando los correos (los correos pueden llegar en cualquier momento) así que este cron debiese estar funcionando todo el tiempo. Luego como hacer para que cuando se descargue se realice la acción automática para pasarle el archivo al script que lo insertara en la bd para su posterior descarga :-?

PD : lo del cron es un ejemplo. Tal vez hay otra cosa que desconozco

¿Por qué descargar los correos? porque necesito el adjunto...

Cualquier idea es bienvenida. Saludos :)

No sé si es necesario que programes eso que quieres hacer en Python; tal vez con herramientas ejecutándose en segundo plano cada X tiempo podrías hacerlo.

Si estamos hablando de un equipo que corre bajo GNU/Linux tal vez esto te pueda venir bien: http://sgcg.es/articulos/2009/08/09/cor ... l-y-msmtp/

Ya nos comentarás cómo evoluciona la solución.

Saludos
Newton escribió:
kyo2009 escribió:A mi jefe se le ha ocurrido que sus correos electrónicos se descarguen solos... y se guarden en el servidor solos.

-En un principio he visto un par de scripts en python que sirven para descargar correos.

El punto es : se descargan los correos y luego deberia pasarselos segun pienso a algun otro script que los recibiera como argumento

nombre_script archivo_correo


y me insertara el nombre en una base de datos para despues poder descargarlos.

Ahora seria algo como un cron para estar descargando los correos (los correos pueden llegar en cualquier momento) así que este cron debiese estar funcionando todo el tiempo. Luego como hacer para que cuando se descargue se realice la acción automática para pasarle el archivo al script que lo insertara en la bd para su posterior descarga :-?

PD : lo del cron es un ejemplo. Tal vez hay otra cosa que desconozco

¿Por qué descargar los correos? porque necesito el adjunto...

Cualquier idea es bienvenida. Saludos :)

No sé si es necesario que programes eso que quieres hacer en Python; tal vez con herramientas ejecutándose en segundo plano cada X tiempo podrías hacerlo.

Si estamos hablando de un equipo que corre bajo GNU/Linux tal vez esto te pueda venir bien: http://sgcg.es/articulos/2009/08/09/cor ... l-y-msmtp/

Ya nos comentarás cómo evoluciona la solución.

Saludos


Gracias por comentar , al final mi jefe desistió de la idea, y se conformo solo con poder descargar los correos. Pero yo igual seguí con la duda de como poder implementar algo como lo que describo. Lo que alcance a obtener fue esto :
(Que quizás en algún momento a alguien le sirva)

Script python para descargar los adjuntos : (Este lo deje en un cron al final y es hasta donde llegue...)

import imaplib
import email
import re

# Connect to an IMAP server
def connect(server, user, password):
    m = imaplib.IMAP4_SSL(server)
    m.login(user, password)
    m.select()
    return m

# Download all attachment files for a given email
def downloaAttachmentsInEmail(m, emailid, outputdir):
    resp, data = m.fetch(emailid, "(BODY.PEEK[])")
    email_body = data[0][1]
    mail = email.message_from_string(email_body)

    emailRegex = re.search(r'[\w\.-]+@[\w\.-]+', mail['From'])
    emailFrom = emailRegex.group(0)

    if mail.get_content_maintype() != 'multipart':
        return

    for part in mail.walk():
        if part.get_content_maintype() != 'multipart' and part.get('Content-Disposition') is not None:
            print "Correo desde: " + emailFrom
            open(outputdir + '/' + part.get_filename(), 'wb').write(part.get_payload(decode=True))

# Download all the attachment files for all emails in the inbox.
def downloadAllAttachmentsInInbox(server, user, password, outputdir, nuevos=False):
    m = connect(server, user, password)
    tipo = "(ALL)"
    if nuevos:
        tipo = "(UNSEEN)"
    resp, items = m.search(None, tipo)

    items = items[0].split()
    for emailid in items:
        downloaAttachmentsInEmail(m, emailid, outputdir)

downloadAllAttachmentsInInbox('imap.gmail.com', 'Email', 'Pass', 'PATH', nuevos=True)


Luego tenía otro script en php para recibir el adjunto e insertarlo en BD :

<?php

$mysqli = new mysqli('localhost', 'user', 'pass', 'NameBD');
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }


date_default_timezone_set("America/Santiago");
$fecha_subida = date("d-m-Y H:i:s");

if (isset($argv[1])) {
   $archivo = $argv[1];
   $file_sin_extension = basename($archivo, ".csv");
   $nombreNuevoArchivo = $file_sin_extension."_".uniqid(rand(0,10)).".csv";

        $stmt = $mysqli->prepare("INSERT INTO correo (nombre_archivo,fecha_subida) VALUES (?,?)");
        $stmt->bind_param('ss', $nombreNuevoArchivo,$fecha_subida);
        $stmt->execute();
   $mysqli->close();
}
else{
   echo "error...\n";
}


Bueno quedé con la duda de como luego de descargar el adjunto se lo podía pasar al otro script, pero bueno al menos ya mi jefe no ha insistido en el tema XD
Básicamente tienes que hacer un cliente de correo, con python por ejemplo si te gusta, una tarea que se ejecuta en segundo plano al iniciar el equipo por ejemplo.

Te conectas al servidor, descargas el email, si vas a querer filtrar más adelante tendrás que separar el asunto,mensaje,remitente,fecha y adjunto.

Una vez tienes el objeto email lo registras a la BD, los adjuntos pueden ser más de uno, puedes meterlo todo en un único zip y te evitas crear una tabla, o creas la tabla si vas a querer filtrar.

La rutina es muy sencilla, se repite cada x tiempo comprobando el numero de mensajes
3 respuestas