Java Mail API - источник данных из FileInputStream

Я интегрирую JavaMailAPI в мое веб-приложение. Я должен встраивать изображения в тело HTML. Как получить изображения из каталога src / main / resource вместо жесткого кода пути к изображению.

Пожалуйста, найдите ниже код, который я жестко закодировал путь изображения.

try {
messageBodyPart = new MimeBodyPart();
DataSource fds = new FileDataSource("C:\\email\\logo_email.png");
messageBodyPart.setDataHandler(new DataHandler(fds));
messageBodyPart.setHeader("Content-ID","<image>");
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
Transport.send(message);
System.out.println("Done");
} catch (Exception e) {
e.printStackTrace();
}

Я хочу получить изображения из следующего кода: ( src/main/resource)

ClassLoader classLoader = getClass().getClassLoader();
FileInputStream fileinputstream = new FileInputStream(new 
File(classLoader.getResource("email/logo_email.png").getFile()));

У меня нет идеи для вызова fileinputstream внутри DataSource

1 ответ

Решение

Не использовать URL.getFile() так как он возвращает часть имени файла URL...

использование URLDataSource вместо FileDataSource, Попробуйте что-то вроде этого:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL url = classLoader.getResource("email/logo_email.png");
DataSource ds = new URLDataSource(url);

редактировать

В веб-приложениях getClass().getClassLoader() может не получить правильный загрузчик классов. Следует использовать Threadзагрузчик классов контекста...

Другие вопросы по тегам