从java中的类路径加载图像时出错

从java中的类路径加载图像时出错,java,image,email,classpath,jakarta-mail,Java,Image,Email,Classpath,Jakarta Mail,我正在尝试使用以下代码通过java邮件api发送图像 MimeMessage message = new MimeMessage(mailSession); message.setSubject(username +"'s Second Story Forgotten Password"); message.setFrom(new InternetAddress(EmailAddress.ADMIN.getValue()))

我正在尝试使用以下代码通过java邮件api发送图像

            MimeMessage message = new MimeMessage(mailSession);
            message.setSubject(username +"'s Second Story Forgotten Password");
            message.setFrom(new InternetAddress(EmailAddress.ADMIN.getValue()));
            message.setContent(msg, "text/html");
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(email));


             Multipart multipart = new MimeMultipart();


             BodyPart htmlPart = new MimeBodyPart();
             htmlPart.setContent(msg, "text/html");
             multipart.addBodyPart(htmlPart);

             BodyPart imgPart = new MimeBodyPart();
             DataSource ds = getImage();
             imgPart.setDataHandler(new DataHandler(ds));
             imgPart.setHeader("Content-ID", "the-img-1");
             multipart.addBodyPart(imgPart);
             message.setContent(multipart);
             transport.connect();
             transport.sendMessage(message,message.getRecipients(Message.RecipientType.TO));    
下面可以看到ds=getImage

private static DataSource getImage(){
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    if (classLoader == null) {
        classLoader = MailSender.class.getClassLoader();
    }
    DataSource ds = new FileDataSource("/VimbaEmailLogo.png");
    return ds;
}
我有一个资源文件夹,里面有我的图像,它已添加到类路径中。我知道这是正确的,因为我可以从这里加载其他文件

每次我尝试加载png并发送电子邮件时,都会出现以下错误

DEBUG SMTP: IOException while sending, closing, THROW: 
java.io.FileNotFoundException: /VimbaEmailLogo.png (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:146)
    at javax.activation.FileDataSource.getInputStream(FileDataSource.java:97)
    at javax.activation.DataHandler.writeTo(DataHandler.java:305)
    at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1608)
    at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:961)
    at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:553)
    at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:103)
    at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:889)
    at javax.activation.DataHandler.writeTo(DataHandler.java:317)
    at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1608)
    at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1849)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1196)
    at com.secondstory.mailsender.MailSender.sendSimpleMessage(MailSender.java:75)
    at com.secondstory.mailsender.MailSender.generateLostPasswordEmail(MailSender.java:124)
    at com.secondstory.mailsender.MailSender.main(MailSender.java:149)
发送、关闭、抛出时调试SMTP:IOException:
java.io.FileNotFoundException:/VimbaEmailLogo.png(无此类文件或目录)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(FileInputStream.java:146)
位于javax.activation.FileDataSource.getInputStream(FileDataSource.java:97)
位于javax.activation.DataHandler.writeTo(DataHandler.java:305)
在javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1608)
在javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:961)
位于javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:553)
位于com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:103)
位于javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:889)
位于javax.activation.DataHandler.writeTo(DataHandler.java:317)
在javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1608)
在javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1849)
在com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1196)上
位于com.secondstory.mailssender.mailssender.sendSimpleMessage(mailssender.java:75)
在com.secondstory.mailssender.mailssender.generateLostPasswordEmail(mailssender.java:124)上
位于com.secondstory.mailsender.mailsender.main(mailsender.java:149)

我是否正确加载了用于发送电子邮件的图像?如果没有,我需要如何更改它?谢谢

您得到了一个类加载器,但随后尝试使用对象从文件系统加载映像。将其更改为,并从从类加载器获得的URL加载图像

private static DataSource getImage() {
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    if (classLoader == null) {
        classLoader = MailSender.class.getClassLoader();
    }
    DataSource ds = new URLDataSource(classLoader.getResource("VimbaEmailLogo.png"));
    return ds;
}

下面是您的答案-java.io.FileNotFoundException:/VimbaEmailLogo.png(没有这样的文件或目录)。尝试更改VIMBA_徽标值。这种方法会导致数据源中没有url(url为空)填充因此,我假设它没有从资源文件夹中提取文件?可能需要删除斜杠。您在问题中提到,您可以通过类加载器从资源文件夹中正确加载其他资源,对吗?是的,这是正确的,我能够加载p12文件和属性文件-为此,我使用以下方法(属性文件)
try(InputStream resourceStream=DatabaseUtilities.class.getResourceAsStream(appName.getValue()){if(resourceStream!=null){