example - javamail netbeans
¿Cómo puedo obtener una respuesta del servidor SMTP usando JavaMail? (1)
Estoy usando JavaMail 1.5 para enviar correos y veo en mis pruebas que los mensajes se enviaron con éxito. Uso SMTPTransport
para obtener la respuesta del último servidor, pero está vacío, igual que el código. getReportSuccess()
devuelve false
.
SMTPTransport t = (SMTPTransport)session.getTransport("smtps");
t.send(message);
String response = t.getLastServerResponse();
boolean s = t.getReportSuccess();
int code = t.getLastReturnCode();
return response;
¿Cuál puede ser el motivo de obtener dicha respuesta, aunque el mensaje se envía con éxito?
¿Hay alguna forma de obtener una respuesta SMTP correcta?
No estoy seguro de que cubra completamente esta pregunta, pero cuando eché un vistazo a SMTPTransport.java , la descripción de getReportSuccess()
dice:
/**
* Should we report even successful sends by throwing an exception?
* If so, a <code>SendFailedException</code> will always be thrown and
* an {@link com.sun.mail.smtp.SMTPAddressSucceededException
* SMTPAddressSucceededException} will be included in the exception
* chain for each successful address, along with the usual
* {@link com.sun.mail.smtp.SMTPAddressFailedException
* SMTPAddressFailedException} for each unsuccessful address.
*
* @return true if an exception will be thrown on successful sends.
*
* @since JavaMail 1.3.2
*/
public synchronized boolean getReportSuccess() {
return reportSuccess;
}
Por lo tanto, en mi código, para estar seguro de que el proceso de envío se realizó con éxito, setReportSuccess(true);
antes de enviar y luego manejó una excepción com.sun.mail.smtp.SMTPAddressSucceededException
. El siguiente fragmento de código me funciona bien:
public synchronized void sendMail(String subject, String body, String user, String oauthToken, String recipients, String attachment)
{
try {
SMTPTransport smtpTransport = connectToSmtp("smtp.gmail.com", 587, user, oauthToken, true);
MimeMessage message = new MimeMessage(session);
/*Set whether successful sends should be reported by throwing
**an exception.
*/
smtpTransport.setReportSuccess(true);
/**
***All actions to got the formated message
**/
/*Send message*/
smtpTransport.sendMessage(message, message.getAllRecipients());
} catch(android.os.NetworkOnMainThreadException e){
Log.d("MY_LOG","NetworkOnMainThreadException");
}
catch(com.sun.mail.smtp.SMTPAddressSucceededException e){
/**
***Message has been sent. Do what you need.
**/
}
catch (Exception e) {
Log.d("MY_LOG", e.getMessage());
}
}