2012-08-10 40 views
-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); 
} 

这是我想补充文件中的代码未发现异常

+1

除非我在这里丢失了一些明显的东西,否则当您尝试使用该文件并且找不到它时,您的代码将抛出* some *异常。 – posdef 2012-08-10 10:16:30

回答

0

我本来认为无论是FileDataSource或DataHandler的会做到这一点,但如果没有,只需添加:

new FileInputStream(filename).close(); 

传递文件名参数FileDataSource之前。 这会为您抛出异常。

3

你的意思是?

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

虽然任何读取文件的函数都应该抛出这个,所以我没有看到需要添加它。

1

从DOC为FileDataSource的输入/输出流的方法:

此方法将返回一个表示数据的...流和 将抛出IOException如果不能做到这一点。此方法将在每次调用时返回 InputStream的新实例。

您需要处理超过FileNotFoundException的注意事项。如果你通过一个目录或一个不可读的文件会发生什么? IOException将封装所有这些。