Thorbjørn y symcbean han tanto proporcionado mucha información útil, pero puede ser abrumador en su integridad.Trataré de hacerlo más accesible:
Lo peor que puedes hacer es crear un cliente SMTP en tu aplicación y confiar en eso para enviar correos a algún lugar del mundo. Una solución mucho mejor es ejecutar localmente un servidor MTA y/o SMTP "estándar" o, en el peor de los casos, dentro de su propia red.
De modo que su aplicación solo tiene que recibir el correo hasta su propio servidor de correo, que con suerte estará en el puerto 25 en la misma máquina. Sin codificación SSL, sin filtro de spam, no hay muchas cosas que pueden salir mal. Además, si su servidor de correo está en la misma máquina que su aplicación, (normalmente) ambos estarán inactivos o ambos arriba.
Una vez que su aplicación ha enviado su correo a su servidor de correo local (que es rápido y casi infalible), es el problema de ese servidor que el correo se envíe al destino final. En un servidor Linux, tendrá algo como Sendmail, qmail, exim o postfix instalado; en Windows, no sé.
Cualquiera de esos servidores de correo "listos para usar" es altamente competente para recibir correo. Ya se ha incorporado una repetición automática, con reintentos después de (por ejemplo) 1 hora, 2 horas, 4, 12, 24 y 48 horas. Su servidor de correo intentará hacer todo lo posible para entregar su correo, y lo hará sin ningún esfuerzo adicional de su parte. Los intentos fallidos aparecerán en el registro del servidor de correo, y usted puede analizar eso y sacar sus conclusiones. Si falla después del último intento posible, eso también se observa en el archivo de registro, y puede concluir que algo estuvo mal en el lado de recepción. Todo este poder ya está incorporado, y ni siquiera debería pensar en tratar de construirlo en un cliente de correo propio.
Nota final: es posible que la transferencia sea exitosa físicamente, es decir, que el mensaje fue entregado, pero luego fue tratado como correo no deseado por el servidor o cliente de correo del destinatario; o el destinatario (humano) simplemente lo borró por accidente. Ningún software resolverá ese problema con certeza.
Obtención de Java Mail para enviar a través de un servidor SMTP Google requiere un poco de vudú Java y una cuenta para autorizar con. No lo he hecho yo mismo, pero estoy bastante seguro de que la pregunta se ha hecho en StackOverflow –