У меня работает фоновая работа, и каждое утро в 7:00 я вызываю метод, чтобы отправить электронное письмо на определенный адрес, для этого я использую Java-почту.
Я спрашиваю об этом потому, что иногда посылает MessagingException
(всегда это исключение, когда это происходит). Это ошибка:
nested exception is:
class javax.mail.MessagingException: 530 5.7.1 Client was not authenticated
Как я уже сказал, это происходит только время от времени; но это немного раздражает, так как я должен удостовериться, что отправляю почту вручную в случае неудачи. Я не нашел причину для этого, я попытался найти это, и некоторые ответы предполагают, что это проблема с сервером; к сожалению, я не могу это контролировать. Когда я выполняю процедуру вручную, иногда требуется до 5 или 7 попыток, пока письмо не будет отправлено.
Итак, я пытаюсь вызвать тот же метод в секции catch, также я бы поставил счетчик для контроля количества попыток в случае, если исключение перехватывается больше, чем, скажем, 5 раз.
Вы бы предложили этот подход? Я ценю вашу помощь и ответы.
Вот код для метода, который я пытаюсь вызывать каждый раз при возникновении исключения MessagingException:
public void sendMail(String msj, String dest, String asunto, File attachmentSource, int count) {
String to = dest;
String from = "some.user@vw.com.mx";
String host = "someserver.xx.xx.xx";
boolean debug = true;
Properties props = new Properties();
props.put("mail.smtp.host", host);
if (debug) {
props.put("mail.debug", "");
}
Session session = Session.getInstance(props, null);
session.setDebug(debug);
try {
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
InternetAddress[] address = {new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject("Reporte");
msg.setSentDate(new Date());
msg.setText(msj);
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setDataHandler(new DataHandler(new FileDataSource(attachmentSource)));
messageBodyPart.setFileName(attachmentSource.getName());
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
msg.setContent(multipart);
Transport.send(msg);
} catch (MessagingException mex) {
Logger.getLogger(SendMSG.class.getName()).log(Level.SEVERE, ("ERROR EN ENVÍO!!!! " + mex.getMessage()));
//THIS IS a TEST TO TRY UNTIL THE MSG IS SENT
count++;
if (count <= 5) {
Logger.getLogger(SendMSG.class.getName()).log(Level.INFO, ("Intento No: " + count + " de 5" + mex.getMessage()));
sendMail(msj, dest, asunto, attachmentSource, count);
} else {
Logger.getLogger(SendMSG.class.getName()).log(Level.SEVERE, ("No. de Intentos excedido " + count + " SALIR DE MÉTODO" + mex.getMessage()));
}
mex.printStackTrace();
}
}