2011-02-06 13 views
6

L'invio di e-mail da un'applicazione scritta in Java non è un grosso problema. In molti tipi di software è necessario avere quel servizio affidabile (a livello di applicazione -> livello di connessione del server SMTP). Questo implica avere qualcosa di simile a un tavolo buffer con messaggi di posta elettronica per inviare e qualche lavoro ciclico per riprovare più tardi, se per esempio il server SMTP non è disponibile, il numero limite di invio di messaggi al secondo o per segnalare un problema permanente per l'amministratore.Una biblioteca per le email affidabili Invio da un'applicazione Java - con il buffering, riprovare, ecc

ho implementato tale funzionalità in un ambito fondamentale in un progetto (non era molto complicato), ma mi chiedo se c'è qualche libreria Java dedicato che potrebbe essere riutilizzato per tale scopo?

ho fatto qualche ricerca, ma senza alcun risultato (vesijama, spring mail o commons mail semplicemente lo rendono facile da preparare messaggio e-mail, ma non fornisce caratteristiche menzionate).

risposta

3

Tutte le preoccupazioni che descrivi sono gestite dall'agente di trasferimento postale (ad esempio sendmail, postfix, Exchange, ecc.) Grazie ai Good 'Ole Days quando Internet è stato progettato per sopravvivere alla guerra nucleare e ai modem 300 baud. Non c'è bisogno di una libreria che li aggiunge, perché sono già lì.

Tutti MTA volontà tampone i loro messaggi in un file di spool o qualche altro archivio di dati e automaticamente tentativi eventuali guasti recuperabili. Questo è richiesto dalla RFC 2821 (sezione 4.5.4):

... mentre la posta che non possono essere trasmessi immediatamente DEVE essere messo in coda e periodicamente ritentata dal mittente [...]

Tentativi continuerà fino a quando il messaggio viene trasmesso o il mittente dà up; il tempo di abbandono in genere deve essere di almeno 4-5 giorni. I parametri all'algoritmo tentativi DEVE essere configurabile.

Qualsiasi MTA è in grado segnalare i problemi che incontra, questo è solo comune senso del pudore. In genere scrivono sulla funzione syslog del sistema operativo host, che può essere monitorato in vari modi.

Suppongo che non tutti implementino la limitazione di velocità , ma una ricerca Google molto veloce suggerisce che tutti e tre i nomi menzionati sono tutti in grado di farlo.

+0

Proprio così che i noobies non pensano di urlare: RFC2119 specifica il significato di alcune parole in maiuscolo importanti usate in molte RFC. È un * must * read;) – SyntaxT3rr0r

+0

ma l'OP ha bisogno di un MTA in esecuzione sullo stesso server come fa la sua applicazione Java?Se il collegamento al MTA non funziona, RFC2821 non sarà di grande utilità, giusto? – SyntaxT3rr0r

+1

Grazie per la risposta. Sono a conoscenza delle abilità MTA, ma mi preoccupo di una situazione in cui MTA non è disponibile da un po 'di tempo e devo inviare centinaia di e-mail importanti con allegati attivati ​​in quel lasso di tempo a mano avendo errori solo "Impossibile inviare email" da registro delle applicazioni. L'affidabilità di cui sto parlando è "all'applicazione -> livello di connessione al server SMTP". –

0

Dai un'occhiata a OOP MailScheduler API Questa libreria memorizza le e-mail non riuscite nel database dalla Serializzazione degli oggetti. All'ora pianificata, il Thread back-ground selezionerà l'e-mail dalla tabella SQL e la invierà al server SMTP. Se le comunicazioni con il server SMTP non riescono, il Thread back-ground continuerà a inviare l'e-mail fino al conteggio specificato.

2

mi consiglia Asprin.

Aspirin è un server SMTP di sola invio integrabile per sviluppatori Java.

Problemi correlati