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

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

Ответы [ 3 ]

6 голосов
/ 01 октября 2009

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

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 является лишь одним из них.

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

6 голосов
/ 22 июля 2010

Поскольку JavaMail 1.4 - mail.jar - содержит javax.mail.util.ByteArrayDataSource

привет

0 голосов
/ 01 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...