Pregunta

Acabo de recibir una solicitud de mi jefe para una aplicación en la que estoy trabajando.Básicamente, estamos configurando una dirección de correo electrónico para que un cliente externo envíe archivos de Excel.

Lo que necesito es una manera de recoger automáticamente cualquier correo electrónico enviado a esta dirección, para poder tomar el archivo adjunto, procesarlo y guardarlo en una carpeta.

Cualquier información sobre por dónde empezar sería útil.\

Nota:Estamos usando un servidor de Lotus Notes para hacer esto, pero una forma genérica sería más útil (si es posible).

¿Fue útil?

Solución

Correo electrónico -> servidor de correo ->[algo] -> archivo en disco.

El archivo en el disco es bastante fácil de analizar, use Correo Java.

El [algo] podría ser:

Otros consejos

Editar: Desde que escribí esta respuesta por primera vez, Wiser se ha mudado y ahora afirma ser solo una herramienta de prueba unitaria, así que toma la respuesta a continuación con una pizca de sal...


La respuesta de Svrist es buena, pero si desea evitar el paso intermedio (el servidor de correo que escribe el correo en el disco para que el sistema Java lo recoja más tarde), puede usar Más sabio.

Wiser te permite iniciar un servidor de correo en Java:

Wiser wiser = new Wiser();
wiser.setPort(2500);
wiser.start();

Luego puedes sondearlo periódicamente para recibir correo:

for (WiserMessage message : wiser.getMessages())
{
    String envelopeSender = message.getEnvelopeSender();
    String envelopeReceiver = message.getEnvelopeReceiver();

    MimeMessage mess = message.getMimeMessage();

    // mail processing goes here
}

Utilice una base de datos de correo (su administrador de Domino puede configurarla, pero también está en el archivo de ayuda).

En esa base de datos, puede crear un agente que se ejecute periódicamente para procesar todos los documentos nuevos.Ese agente utilizará la propiedad EmbeddedObjects de la clase NotesRichTextItem y el método ExtractFile de la clase NotesEmbeddedObject para controlar el archivo adjunto y extraerlo a la ubicación que especifique.

Por ejemplo, este script revisa todos los archivos adjuntos, enlaces de objetos y objetos incrustados en el elemento Cuerpo de un documento.Cada vez que encuentra un archivo adjunto, lo separa del directorio SAMPLES en la unidad C y elimina el archivo adjunto del documento.

Dim doc As NotesDocument
Dim rtitem As Variant
'...set value of doc...
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
  Forall o In rtitem.EmbeddedObjects
    If ( o.Type = EMBED_ATTACHMENT ) Then
      Call o.ExtractFile( "c:\samples\" & o.Source )
      Call o.Remove
      Call doc.Save( False, True )
    End If
  End Forall
End If

Últimamente he trabajado bastante con agentes Java en servidores Domino.El servidor Domino 8.5 es compatible con Java 6 y está integrado, por lo que no le llevará mucho tiempo a alguien con un poco de experiencia en desarrollo de Domino crear un agente que se ejecute cuando llegue nuevo correo.En LotusScript es aún más fácil, pero requiere habilidades más especializadas que probablemente necesitaría contratar a un contratista.

La limitación que probablemente encontrará se refiere al archivo extraído; puede colocarlo fácilmente en la estructura de archivos del servidor Domino, pero la seguridad del sistema operativo puede limitarle a colocarlo en un servidor diferente.

Lotus Notes/Domino almacena el correo en una base de datos de Notes.Hay API disponibles para obtener documentos (correos electrónicos), leer valores de campos (De, Asunto) y separar archivos.

Las API incluyen

-LotusScript (variante VB, disponible en la base de datos de Notes)

-Java (desde dentro o fuera de la base de datos)

-C API (externa)

-La misma API disponible a través del servidor COM

Puede crear un "agente programado" dentro de la base de datos (usando LotusScript o Java) que pueda localizar documentos creados desde la última ejecución, localizar los archivos adjuntos y extraerlos.El agente deberá estar firmado con una identificación que tenga los permisos adecuados en el servidor, incluidos los necesarios para escribir en el sistema de archivos e iniciar cualquier otro proceso.

Externo a la base de datos, puede utilizar cualquier API excepto LotusScript para iniciar sesión en el servidor/base de datos de correo y seguir un proceso similar, p.extraer los archivos localmente en un cliente o servidor separado.C API y COM requieren una instalación del cliente de notas, pero las aplicaciones Java se pueden configurar para ejecutarse a través de CORBA/DIIOP sin una instalación completa.

Consulte la ayuda de Domino Designer (o el sitio web de IBM para C API) para obtener más información.

En cuanto a una "forma genérica" ​​de hacer esto, si accede a datos en Notes y necesita extraer archivos adjuntos, creo que estas API son su mejor opción.Si imagina migrar la aplicación a otro sistema de correo, considere desacoplar las rutinas API a través de una "interfaz" para que solo necesite agregar una nueva implementación de esa interfaz para admitir un nuevo sistema de correo.

Puede acceder a los documentos de Notes con relativa facilidad utilizando DIIOP, sería mucho más fácil que seguir el camino de C Api...

Pruebe POP3Client en el Paquete Net Commons;Permitirá que su programa Java busque correo nuevo para una cuenta en particular en el intervalo que desee (¿cada pocos minutos?cada hora?), y obtener/eliminar mensajes según lo desee.

SMTP/POP3 se puede habilitar en el servidor Domino.Trabajé con esto antes y ejecuté Squirrel Mail con él.SMTP requiere un poco de recursos, pero vale la pena el esfuerzo porque así no tendrás que descender a LotusLand para que todo funcione.Simplemente escriba un pequeño programa Java CLI que marque una casilla de correo electrónico específica (POP3 o SMTP) y analice los mensajes, extraiga los archivos adjuntos y los coloque donde sea necesario.

Mucha documentación y ejemplos aquí:http://java.sun.com/products/javamail/

Las técnicas que desarrolle adoptando este enfoque serán más aplicables en su futura carrera que cualquier cosa específica de Lotus/Domino.

No importa lo que haga, necesitará comprender las estructuras de datos de Lotus Notes.La buena noticia es que se puede crear una solución totalmente automatizada en Notes muy fácilmente.

Lo mejor que puede hacer es tenerlo integrado en Notes y puede configurarlo para que se ejecute automáticamente cada vez que se reciba correo nuevo.La respuesta de Gary es acertada, pero sin ninguna experiencia, probablemente sería difícil descubrir cómo implementarla usted mismo.Por otro lado, ningún programador competente de Notes debería tardar más de una o dos horas en configurarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top