我有一个函数在java中发送带附件的邮件。它在我上传附件时有效。但问题是,如果我必须发送没有附件的邮件,它会在我发送邮件时说错误,而且我没有上传任何附件。
这是我的代码:
Properties props = new Properties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
String html = text;
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("abdool.latiff@gmail.com"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(email));
message.setSubject(subject);
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(html, "text/html");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
String filename = "C:/Users/gro/Desktop/"+attachment;
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
任何想法我怎么能解决这个问题?
我收到此错误:
org.apache.jasper.JasperException:java.lang.RuntimeException:javax.mail.MessagingException:发送消息时发生IOException; 嵌套异常是: java.io.FileNotFoundException:C:\ Users \ gro \ Desktop(访问被拒绝)
答案 0 :(得分:0)
它只是无法找到文件..
我不确定您在哪里设置attachment
字段。
但是,将附加文件的代码片段包装到消息中,下面的内容应该对你有用:
if(attachment != null && attachment.length() > 0) {
messageBodyPart = new MimeBodyPart();
String filename = "C:/Users/gro/Desktop/"+attachment;
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
}
答案 1 :(得分:0)
我不太了解您的实现,因为文件名是在代码中设置的,没有任何用户交互。我建议你稍微改变身体以获得类似的东西:
if(filename!=null) {
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
}
答案 2 :(得分:0)
让我看看,如果我理解,当你尝试发送没有附件的电子邮件时,你会得到这个吗?
所以变量“attachment”是null?
所以你试图加载文件“C:/ Users / gro / Desktop / null”??
而你得到一个FileNotFoundException? -.-
答案 3 :(得分:0)
没有看到"附件"是的,很难弄清楚你在做什么。正如其他人已经提到的那样,你需要检查"附件"的价值。如果它存在(非null或File.exists()),则应执行将文件附加到电子邮件的代码块。
答案 4 :(得分:0)
你能不能硬编码文件路径(包括文件名)并尝试操作,我认为你的'attachement'要么设置为null,要么设置为某个非现有目录。