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

在Java中发送邮件和附件时出错,java,jakarta-mail,Java,Jakarta Mail,我有一个用java发送带有附件的邮件的功能。当我上传附件时,它工作正常。然而,问题是,如果我必须发送一封没有附件的邮件,当我发送一封邮件并且我没有上传任何附件时,它会显示错误 这是我的密码: Properties props = new Properties(); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.auth", "true"); props.put("mail.smt

我有一个用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.jaspereException:java.lang.RuntimeException:javax.mail.MessaginException:IOException发送消息时; 嵌套异常是:
java.io.FileNotFoundException:C:\Users\gro\Desktop(访问被拒绝)

只是找不到文件

我不确定您从哪里获得
附件
字段集

但是,包装将文件附加到消息的代码片段,下面这样的内容应该适合您:

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); 
}

我不太理解您的实现,因为文件名是在代码中设置的,没有任何用户交互。我建议你稍微改变一下身体,得到如下东西:

if(filename!=null) {
    messageBodyPart.setFileName(filename);
    multipart.addBodyPart(messageBodyPart);

}

让我看看我是否理解,当您尝试发送一封没有附件的电子邮件时,您会收到此消息???
所以变量“附件”为空??
那么您正试图加载文件“C:/Users/gro/Desktop/null”?

你会因此得到一个FileNotFoundException-

如果看不到“依恋”是什么,就很难理解你在做什么。如上所述,您需要检查“attachment”(附件)的值,如果它存在(非null或File.exists()),则应执行将文件附加到电子邮件的代码块。

能否请您硬编码文件路径(包括文件名)并尝试该操作,我认为您的“attachement”要么设置为null,要么设置为某个不存在的目录。

您会遇到什么错误?org.apache.jasper.jaspereException:java.lang.RuntimeException:javax.mail.MessaginException:IOException,同时发送消息;嵌套异常为:java.io.FileNotFoundException:C:\Users\gro\Desktop(访问被拒绝)您不理解错误的哪一部分?为什么希望代码正常工作?当我发送一封没有附件的邮件时,会发生此错误。。如果我没有上传文件,那么我无法发送邮件并读取错误消息。您试图附加一个不存在的文件。您需要更改您的代码以不执行此操作。是的,当我尝试发送不带附件的电子邮件时,我收到此错误。。有时我需要发送没有附件的电子邮件。即使我检查文件是否存在,我仍然会收到错误“附件”的值是多少?