【问题标题】:Error when sending Mail and attachment in Java用 Java 发送邮件和附件时出错
【发布时间】:2016-02-10 03:42:51
【问题描述】:

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

【问题讨论】:

  • 你得到什么错误?
  • org.apache.jasper.JasperException: java.lang.RuntimeException: javax.mail.MessagingException: 发送消息时出现IOException;嵌套异常是:java.io.FileNotFoundException: C:\Users\gro\Desktop (Access is denied)
  • 错误的哪一部分你不明白?为什么您希望您的代码能够正常工作?
  • 当我发送没有附件的邮件时会发生此错误。如果我没有上传文件,那么我无法发送邮件
  • 阅读错误信息。您正在尝试附加一个不存在的文件。您需要更改您的代码以不这样做。

标签: java jakarta-mail


【解决方案1】:

只是找不到文件..

我不确定您从哪里获得 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); 
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      让我看看我是否明白,当您尝试发送不带附件的电子邮件时会收到此信息??
      所以变量“附件”为空??
      所以你正在尝试加载文件“C:/Users/gro/Desktop/null”??
      你会得到一个 FileNotFoundException 吗? -.-

      【讨论】:

      • 是的,当我尝试发送不带附件的电子邮件时,我收到此错误.. 有时我需要发送不带附件的电子邮件..
      【解决方案4】:

      如果不了解“附件”是什么,就很难弄清楚你在做什么。正如其他人在上面已经提到的,您需要检查“附件”的值,如果它存在(非 null 或 File.exists()),则应执行将文件附加到电子邮件的代码块。

      【讨论】:

      • 即使我检查文件是否存在我仍然得到错误
      • “附件”的值是多少?
      【解决方案5】:

      您能否对文件路径(包括文件名)进行硬编码并尝试操作,我认为您的“附件”设置为 null 或某些不存在的目录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-26
        • 1970-01-01
        • 1970-01-01
        • 2013-04-13
        • 2015-09-16
        • 2015-11-28
        • 2019-01-11
        相关资源
        最近更新 更多