Domanda

Ho appena ricevuto una richiesta dal mio capo per un'applicazione su cui sto lavorando.Fondamentalmente stiamo ottenendo una configurazione dell'indirizzo e-mail per un client esterno a cui inviare file Excel.

Ciò di cui ho bisogno è un modo per raccogliere automaticamente qualsiasi email inviata a questo indirizzo, in modo da poter prendere l'allegato, elaborarlo e salvarlo in una cartella.

Qualsiasi informazione anche su dove iniziare sarebbe utile.\

Nota:Per farlo utilizziamo un server Lotus Notes, ma un metodo generico sarebbe più utile (se possibile).

È stato utile?

Soluzione

E-mail -> server di posta ->[qualcosa] -> file su disco.

Il file su disco è abbastanza facile da analizzare e utilizzare JavaMail.

Il [qualcosa] potrebbe essere:

  • ascoltatore per connessioni SMTP (eccessivo)!
  • Pop3/imap cliente
  • Maildir/Cassetta postale

Altri suggerimenti

Modificare: da quando ho scritto questa risposta per la prima volta, Wiser si è spostato e ora afferma di essere solo uno strumento di test unitario, quindi prendi la risposta di seguito con un pizzico di sale...


La risposta di Svrist è buona, ma se vuoi evitare il suo passaggio intermedio (il server di posta che scrive la posta su disco per poi essere ritirata dal sistema Java) puoi usare Più saggio.

Wiser ti consente di avviare un server di posta in Java:

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

Quindi puoi semplicemente interrogarlo periodicamente per la posta:

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

    MimeMessage mess = message.getMimeMessage();

    // mail processing goes here
}

Utilizza un messaggio di posta nel database (il tuo amministratore Domino può configurarlo per te ma è anche nel file della guida).

In quel database è possibile creare un agente che viene eseguito periodicamente per elaborare tutti i nuovi documenti.Tale agente utilizzerà la proprietà EmbeddedObjects della classe NotesRichTextItem e il metodo ExtractFile della classe NotesEmbeddedObject per ottenere un handle sul file allegato ed estrarlo nella posizione specificata.

Ad esempio, questo script esamina tutti i file allegati, i collegamenti agli oggetti e gli oggetti incorporati nell'elemento Corpo di un documento.Ogni volta che trova un file allegato, scollega il file nella directory SAMPLES sull'unità C e rimuove l'allegato dal 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

Ultimamente ho lavorato parecchio con gli agenti Java sui server Domino.Il server Domino 8.5 supporta Java 6 ed è integrato, quindi non ci vorrà molto a qualcuno con un po' di esperienza nello sviluppo di Domino per mettere insieme un agente che viene eseguito quando arriva nuova posta.In LotusScript è ancora più semplice, ma richiede competenze più specializzate che probabilmente ti serviranno per ottenere un appaltatore.

La limitazione che potresti incontrare riguarda il file estratto, puoi facilmente posizionarlo nella struttura dei file del server Domino ma potresti essere limitato dalla sicurezza del sistema operativo nel posizionarlo su un server diverso.

Lotus Notes/Domino archivia la posta in un database Notes.Sono disponibili API per ottenere documenti (e-mail), leggere valori di campo (Da, Oggetto) e scollegare file.

Le API includono

-LotusScript (variante VB, disponibile nel database Notes)

-Java (dall'interno o dall'esterno del database)

-C API (esterno)

-Stessa API disponibile tramite il server COM

È possibile creare un "agente pianificato" all'interno del database (utilizzando LotusScript o Java) in grado di individuare i documenti creati dall'ultima esecuzione, individuare gli allegati ed estrarli.L'agente dovrà essere firmato con un ID che disponga delle autorizzazioni appropriate sul server, comprese quelle necessarie per scrivere nel file system e avviare qualsiasi altro processo.

Esternamente al database, puoi utilizzare qualsiasi API tranne LotusScript per accedere al server/database di posta e seguire un processo simile, ad es.estraendo i file localmente su un client o un server separato.L'API C e COM richiedono l'installazione del client Notes, ma le applicazioni Java possono essere configurate per l'esecuzione tramite CORBA/DIIOP senza un'installazione completa.

Consultare la guida di Domino Designer (o il sito Web IBM per l'API C) per ulteriori informazioni.

Per quanto riguarda un "modo generico" per farlo, se accedi ai dati in Notes e hai bisogno di estrarre allegati, credo che queste API siano la soluzione migliore.Se prevedi di trasferire l'applicazione su un altro sistema di posta, considera di disaccoppiare le routine API tramite un'"interfaccia", in modo da dover solo aggiungere una nuova implementazione di quell'interfaccia per supportare un nuovo sistema di posta.

Puoi accedere ai documenti di Notes in modo relativamente semplice utilizzando DIIOP, sarebbe molto più semplice che percorrere la strada C Api...

Prova POP3Client in Pacchetto Net Commons;consentirà al tuo programma Java di verificare la presenza di nuova posta per un particolare account a qualsiasi intervallo tu voglia (ogni pochi minuti?ogni ora?) e ricevere/eliminare i messaggi come desiderato.

SMTP/POP3 può essere abilitato sul server Domino.Ci ho già lavorato prima e ho fatto funzionare Squirrel Mail.SMTP richiede un po' di risorse, ma ne vale la pena perché in questo modo non è necessario scendere in LotusLand per far funzionare le cose.Basta scrivere un piccolo programma Java CLI che controllerà una casella di posta elettronica specifica (POP3 o SMTP) e analizzerà i messaggi, estraendo gli allegati e posizionandoli dove necessario.

Un sacco di documentazione ed esempi qui:http://java.sun.com/products/javamail/

Le tecniche che svilupperai adottando questo approccio saranno più ampiamente applicabili nella tua futura carriera rispetto a qualsiasi altra cosa specifica di Lotus/Domino.

Qualunque cosa tu faccia, avrai bisogno di comprendere le strutture dati di Lotus Notes.La buona notizia è che è possibile creare molto facilmente una soluzione completamente automatizzata in Notes.

La soluzione migliore è averlo integrato in Notes e può essere configurato per essere eseguito automaticamente ogni volta che viene ricevuta nuova posta.La risposta di Gary è precisa, ma senza alcuna esperienza probabilmente sarebbe difficile capire come implementarla da soli.D'altra parte, un programmatore Notes competente non dovrebbe impiegare più di un'ora o due per configurarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top