Отправка электронной почты с приложением с использованием JAVA Mail API без сохранения на локальном компьютере

У меня есть отчет на моей странице jsp, и я пишу этот отчет в формате PDF. И я хочу отправить PDF как электронную почту с вложением, но я не хочу хранить файл на локальном компьютере или сервере, но я хочу отправить электронное письмо с вложением.

Ответ 2

Если вы используете Spring API JavaMail, вы можете делать такие вещи довольно легко (или, по крайней мере, так же легко, как JavaMail API позволяет, что мало). Таким образом, вы могли бы написать что-то вроде этого:

JavaMailSenderImpl mailSender = ... instantiate and configure JavaMailSenderImpl here
final byte[] data = .... this holds my PDF data

mailSender.send(new MimeMessagePreparator() {
   public void prepare(MimeMessage mimeMessage) throws Exception {
      MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);
     // set from, to, subject using helper
     helper.addAttachment("my.pdf", new ByteArrayResource(data));
   } 
});

Данные вложения могут быть любыми из Spring абстракций ресурсов, ByteArrayResource является только одним из них.

Обратите внимание, что эта часть API Spring стоит сама по себе, она не требует (но приносит пользу) контейнера Spring.

Ответ 3

Вы должны написать собственную реализацию javax.activation.DataSource для чтения данных вложений из памяти вместо использования одной из включенных реализаций (для чтения из файла, URL-адреса и т.д.). Если у вас есть отчет PDF в массиве байтов, вы можете реализовать DataSource, который возвращает массив байтов, завернутый в ByteArrayOutputStream.