-1

このコードを使用して、Java を使用してメールを送信します。ここでは、pdf ファイルをメールに添付します。ファイルが見つからない場合は、スローしてファイルが見つからないという例外が発生します。

    try{
    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress(from));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(receiver));
    message.setSubject(subject);
    // Create the message part
    BodyPart messageBodyPart = new MimeBodyPart();
    // Fill the message
    messageBodyPart.setText("hai");
    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);
    //Attachement
    messageBodyPart = new MimeBodyPart();
    String filename = "file";
        DataSource source = new FileDataSource(filename);
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName(source.getName());
        multipart.addBodyPart(messageBodyPart);
    }
    message.setContent(multipart);
    Transport transport = session.getTransport("smtp");
    try{
        transport.connect(host,from,password);
    } catch (AuthenticationFailedException err){
        String errMsg = "Authentication fails when sending mail. Sent failed to " + receiver;
        log.error(errMsg,err);
        throw new AuthenticationFailedException(errMsg + err.getMessage());
    }
    transport.send(message);
} catch (MessagingException re) {
    String localizedError = "Unexpected error occurred at Email client. Sent failed to:" + receiver + ". ";
    log.error(localizedError + re.getLocalizedMessage(), re);
    throw new MessagingException(localizedError + re.getLocalizedMessage(), re);
}

これは、ファイルが見つからないという例外を追加したいコードです

4

3 に答える 3

3

どういう意味ですか?

if(!new File(filename).exists()) throw new FileNotFoundException(filename);

とにかくファイルを読み取る関数はこれをスローするはずなので、追加する必要はないと思います。

于 2012-08-10T10:16:16.663 に答える
1

入出力ストリーム メソッドのFileDataSourceのドキュメントから:

このメソッドは、データを表す ...Stream を返し、それができない場合は IOException をスローします。このメソッドは、呼び出しごとに InputStream の新しいインスタンスを返します。

以上を処理する必要があることFileNotFoundExceptionに注意してください。ディレクトリを渡された場合、または読み取り不能なファイルが渡された場合はどうなりますか? IOExceptionこれらすべてをカプセル化します。

于 2012-08-10T10:20:08.420 に答える
0

FileDataSource または DataHandler のいずれかがそれを行うと思っていたでしょうが、そうでない場合は、次を追加してください。

new FileInputStream(filename).close();

ファイル名引数を FileDataSource に渡す前に。その例外がスローされます。

于 2012-08-10T10:18:52.993 に答える