-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 回答