Thorbjørn e symcbean hanno entrambi fornito un sacco di informazioni utili, ma può essere schiacciante nella sua completezza.Cercherò di renderlo più accessibile:
La cosa peggiore che puoi fare è creare un client SMTP nella tua applicazione e affidarti a questo per inviare posta in qualche parte del mondo. Una soluzione molto migliore è quella di eseguire un server MTA e/o SMTP "standard" sulla propria confezione locale o, nella peggiore delle ipotesi, all'interno della propria rete.
Quindi la tua app deve solo arrivare alla posta fino al tuo server di posta, che si spera possa essere sulla porta 25 sulla stessa macchina. Nessuna codifica SSL, nessun filtro spam, non un mucchio di cose che possono andare storte. Inoltre, se il tuo server di posta si trova sullo stesso computer della tua app, saranno (di solito) entrambi inattivi o inattivi.
Una volta che la tua app ha inserito la posta nel tuo server di posta locale (che è veloce e quasi infallibile), è il problema del server quello di far arrivare la posta alla destinazione finale. Su un server Linux avrai qualcosa come Sendmail, qmail, exim o postfix installati; su Windows, non lo so.
Uno qualsiasi di questi server di posta "pronti all'uso" è estremamente competente per ricevere la posta. Una ripetizione automatica è già incorporata, con tentativi dopo (ad esempio) 1 ora, 2 ore, 4, 12, 24 e 48 ore. Il tuo server di posta proverà il più maleducato a consegnare la tua posta, e lo farà senza ulteriori sforzi da parte tua. I tentativi falliti verranno visualizzati nel registro del server di posta, e potrai analizzarli e trarre le tue conclusioni. Se fallisce dopo l'ultimo tentativo possibile, questo viene anche annotato nel file di registro e si può concludere che qualcosa è andato storto sul lato ricevente. Tutto questo potere è già integrato e non dovresti nemmeno pensare di provare a crearlo in un tuo client di posta.
Nota finale: è possibile che il trasferimento abbia esito positivo, ovvero il messaggio è stato recapitato, ma successivamente è stato considerato come spam dal server o dal client di posta del destinatario; o il destinatario (umano) l'ha semplicemente cancellato per sbaglio. Nessun software risolverà il problema con certezza.
Ottenere Java Mail per inviare attraverso un server SMTP di Google richiede un po 'di Java voodoo e di un account per autorizzare con. Non l'ho fatto da solo, ma sarei abbastanza certo che la domanda è stata posta su StackOverflow –