1

メールの送信中に例外の問題に直面しています。ここに私のコードがあります

public static void sendEmail(String email, String subjectBody, String srcAndFile) throws Exception {
    System.out.println(srcAndFile);

    try {
        logger.debug("sending email to: " + email + "with attached file: " + srcAndFile);

        Properties props = System.getProperties();
        props.put("mail.smtp.host", address);
        props.put("mail.smtp.port", "25");
        props.put("mail.smtp.auth", "false");

        Session session_m = Session.getDefaultInstance(props, null);
        MimeMessage message = new MimeMessage(session_m);
        message.setFrom (new InternetAddress(sender, sender));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
        message.setSubject(subjectBody);
        message.setText("Hi");
        message.setHeader("Content-Type","text/plain;charset=windows-1251");

        Multipart multiPart = new MimeMultipart();
        MimeBodyPart messageText = new MimeBodyPart();
        messageText.setContent(subjectBody, "text/plain");
        multiPart.addBodyPart(messageText);

        MimeBodyPart rarAttachment = new MimeBodyPart();
        File f = new File(srcAndFile);
        FileDataSource rarFile = new FileDataSource(f);
        rarAttachment.setDataHandler(new DataHandler(rarFile));
        rarAttachment.setFileName(rarFile.getName());
        multiPart.addBodyPart(rarAttachment);

        message.setContent(multiPart);

        SMTPTransport t = (SMTPTransport)session_m.getTransport("smtp");
        t.connect(addrress, sender, null);
        t.sendMessage(message, message.getAllRecipients());
        success = true;

        } catch (AddressException e) {
            logger.error(e.getMessage());
            throw new AddressException("[sendEmail]: Incorrect email address");

        } catch (MessagingException e) {
            logger.error(e.getMessage());
            throw new MessagingException("[sendEmail]: Unable to send email");

        } catch (IOException e) {
            logger.error(e.getMessage());
            throw new IOException("[sendEmail]: Unable to find file to attach");

        } catch (Exception e) {
            logger.error(e.getMessage());
            DBWrapper.processStatusDB("[sendEmail]","failed",e.getMessage());
            throw  new Exception("[sendEmail]: Error in method " + e.getMessage());
        }
        DBWrapper.processStatusDB("[sendEmail]","finished","process to send an email with " + FileManager.getFile(srcAndFile) + " has finished properly");


}

いくつかのエラーをキャッチしたいときに問題が発生します。

  1. 無効なアドレス

  2. サーバーに接続できません

これらのケースはどちらも (MessagingException e) でキャッチされます。それらを異なる例外に分割する方法はありますか。

問題は、受信者の電子メールアドレスが無効な場合、私のプログラムは他の受信者で続行する必要があるということです. ただし、プログラムがメール サーバーに接続できない場合は、プログラムを終了する必要があります。しかし、私の場合、メールアドレスが無効な場合でも終了します。(MessagingException e) は、コードに示すようにエラーをスローするためです。

INVALID EMAIL ADDRESS をキャッチする他の例外はありますか? (AddressException e) は、無効な電子メールでエラーをキャッチしていません。

ありがとうございました。

4

3 に答える 3

0

を使用できますSendFailedException。ドキュメントからの抜粋

この例外は、メッセージを送信できない場合にスローされます。

例外には、メッセージを送信できなかったアドレス、メッセージが送信された有効なアドレス、およびメッセージが送信されなかった有効なアドレスが含まれます。

于 2013-09-30T10:36:23.047 に答える
0

メールを送信する前に、メールアドレスを検証したほうがよいと思います。これは知っていることであり、例外が発生する前でも修正できます。メールサーバーにアクセスできないことは、予期できる例外であるため、それをキャッチして後処理を行うことは理にかなっています。

于 2013-09-30T10:33:43.980 に答える
0

私は数日前に同じ問題に直面していました。使ってみて

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

それ以外の

Session session_m = Session.getDefaultInstance(props, null);

また、ポート番号を再確認してください。

于 2013-09-30T10:46:31.267 に答える