我正在尝试发送带附件的邮件。我正在使用javamail api来执行此操作。由于多个用户可以同时发送邮件,因此我创建了一个线程以确保其安全。我可以使用file.delete()函数删除文件,该函数在邮件附件完成之前发生。但我发送附件/邮件后无法删除该文件。请帮我解决这个问题。
以下是我用来附加和发送邮件的代码:
public void sendMailWithAttachment(String from, final String to, final String subject, final String msg, final String filePath) {
Thread ty = new Thread(){
public void run(){
MimeMessage message = mailSend.createMimeMessage();
try{
MimeMessageHelper helper = new MimeMessageHelper(message, true);
//helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(msg);
FileSystemResource file = new FileSystemResource(filePath);
helper.addAttachment(file.getFilename(), file);
//I want to write code to delete the file here
}catch (MessagingException e) {
throw new MailParseException(e);
}
mailSend.send(message);
}
};
ty.start();
}
答案 0 :(得分:1)
无论如何,你正在初始化你的Thread实现。你可以覆盖Thread实现的finalize()方法,当Thread对象即将被垃圾收集时,它会被调用。
代码如下所示:
Thread ty = new Thread(){
public void run(){
// do mail sending stuff here.
}
@Override
protected void finalize() throws Throwable {
// delete file here
}
};
ty.start();
答案 1 :(得分:0)
您有多种方法可以执行此任务,我建议您使用第二个
1)启动该文件,然后如果您的java环境对该文件夹具有更正权限,则可以删除该文件,如下所示
try{
File file = new File("filePath");
if(file.delete()){
System.out.println("Deleted file: " + file.getName());
}else{
System.out.println("Delete failed on file ": + file.getName());
}
}catch(Exception e){
e.printStackTrace();
}
2)您也可以使用通用类文件
try {
Files.delete(path);
} catch (NoSuchFileException x) {
System.err.format("%s: no such" + " file or directory%n", path);
} catch (DirectoryNotEmptyException x) {
System.err.format("%s not empty%n", path);
} catch (IOException x) {
// File permission problems are caught here.
System.err.println(x);
}
如果您在删除文件时遇到问题,可能是因为FileSystemResource指向该文件,尝试使用
完成该对象file.finalize()
看一下这个问题来完成Threads
答案 2 :(得分:0)
在发送操作后删除finally块中的文件。