Cuando estamos trabajando con Java Mail, por ejemplo para realizar envíos de email, en caso de fallo con el protocolo SMTP, puede ser complicado encontrar una solución a un problema. Es por ello que es bueno que sepamos cómo depurar una conexión SMTP con Java Mail.
En una gestión de errores basada en excepciones, cuándo se nos genere un fallo saldrá el código asociado al fallo. Por ejemplo, si no se puede verificar el destinatario, la excepción será la siguiente:
javax.mail.SendFailedException: Invalid Addresses; nested exception is: com.sun.mail.smtp.SMTPAddressFailedException: 550-Verification failed for550-No Such User Here 550 Sender verify failed
Pero, ¿qué ha pasado hasta entonces? ¿qué se ha negociado en el protocolo SMTP?
Para depurar una conexión SMTP con Java Mail simplemente tenemos que activar el modo de depuración a la Session con el método .setDebug().
mailSession.setDebug(true);
Con esto conseguiremos ver en la consola todo el negociado del protocolo SMTP. Por ejemplo:
DEBUG: setDebug: JavaMail version 1.4.1 DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc] DEBUG SMTP: useEhlo true, useAuth false DEBUG SMTP: trying to connect to host "mail.lineadecodigo.com", port 25, isSSL false 220-box548.bluehost.com ESMTP Exim 4.69 #1 Sun, 27 Mar 2011 17:35:58 -0600 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail. DEBUG SMTP: connected to host "mail.lineadecodigo.com", port: 25 EHLO vivaldi 250-box548.bluehost.com Hello vivaldi [89.140.22.132] 250-SIZE 52428800 250-PIPELINING 250-AUTH PLAIN LOGIN 250-STARTTLS 250 HELP DEBUG SMTP: Found extension "SIZE", arg "52428800" DEBUG SMTP: Found extension "PIPELINING", arg "" DEBUG SMTP: Found extension "AUTH", arg "PLAIN LOGIN" DEBUG SMTP: Found extension "STARTTLS", arg "" DEBUG SMTP: Found extension "HELP", arg "" DEBUG SMTP: use8bit false MAIL FROM:250 OK RCPT TO: 550-Verification failed for 550-No Such User Here 550 Sender verify failed
Realmente útil y sencillo activar cómo depurar una conexión SMTP con Java Mail.