在Java中发送邮件和附件时出错

时间:2016-02-09 18:35:16

标签: java javamail

我有一个函数在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(访问被拒绝)

5 个答案:

答案 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,要么设置为某个非现有目录。