У меня есть отчет на моей странице jsp
, и я пишу этот отчет в формате PDF.
И я хочу отправить PDF как электронную почту с вложением, но я не хочу хранить файл на локальном компьютере или сервере, но я хочу отправить электронное письмо с вложением.
Отправка электронной почты с приложением с использованием JAVA Mail API без сохранения на локальном компьютере
Ответ 1
Так как JavaMail 1.4 - mail.jar - содержит javax.mail.util.ByteArrayDataSource
- https://javamail.java.net/nonav/docs/api/javax/mail/util/ByteArrayDataSource.html
- (https://javamail.java.net/nonav/docs/api/)
- http://www.oracle.com/technetwork/java/javamail/index-138643.html - расположение загрузки
рассматривает
Ответ 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.