Как получить код ошибки электронной почты в javax.mail - PullRequest
0 голосов
/ 14 февраля 2019

Теперь я использую эти зависимости.группа компиляции: 'javax.mail', имя: 'mail', версия: '1.4' testCompile группа: 'javax.mail', имя: 'mail', версия: '1.4'

Я хотел быполучить код ошибки (например, ошибка 5.1.1) при отправке электронной почты не удалосьМогу ли я получить этот код ошибки из MessagingException?И как его получить?

import javax.mail.*;
import org.springframework.stereotype.Component;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;

@Component
public class SendEmailClient
{
    /**
     * send email to receiver.
     */
    public void send(String _sender, String _receiver, String _subject, String _subjectCharset, String _body, String _bodyContentType, String _bodyCharset)
    {
        MimeMessage message = new MimeMessage(getSmtpSession());
        Multipart multipartMessage = new MimeMultipart();
        MimeBodyPart bodyPart = new MimeBodyPart();

        try {
            message.setFrom(new InternetAddress(_sender));
            message.setRecipients(Message.RecipientType.TO, _receiver);
            message.setSubject(_subject,_subjectCharset);
            bodyPart.setContent(_body, "text/" +_bodyContentType + "; charset=" + _bodyCharset);
            multipartMessage.addBodyPart(bodyPart);
            message.setContent(multipartMessage);
            Transport.send(message);

        } catch (MessagingException _e) {

        }
    }

    /**
     * Get smtp session.
     * @return
     */
    private Session getSmtpSession()
    {
        final String username = "email";
        final String password = "password";

        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "587");

        return Session.getInstance(props,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, password);
                    }
                });
    }
}

1 Ответ

0 голосов
/ 14 февраля 2019

Вы должны перехватить SMTPSendFailedException javax.mail, когда возникает ошибка.Это исключение предлагает вызов метода getReturnCode():

public int getReturnCode()

Возвращает код возврата с SMTP-сервера, который указывает причину сбоя.См. RFC 821 для интерпретации кода возврата.

Глядя на RFC821 , разделы 4.2.1 и 4.2.2, вы найдете определение кодов ошибок.Итак, в вашей программе должно быть что-то вроде:

try
{
   //connect,...

}
catch(SMTPSendFailedException e) 
{
    int errorCode = e.getReturnCode(); //f.e: 401
    //check what error message the code relates, print it, etc..
}
...