Как отправить нелокальное вложение с помощью JavaMail

100
8

Я создаю приложение, используя jsp, сервлеты и все эти забавные вещи. Прямо сейчас у меня есть форма, которая передает всю информацию из формы в html-адрес электронной почты, который отправляется с использованием API JavaMail. Это работает, но я пытаюсь отправить вложение, и способ, который я установил прямо сейчас, не работает...

<div class="section">Upload Files: <input id="fileUpload" type="file" /></div>

Я беру это значение ввода, передаю его на свой сервлет и пытаюсь отправить электронное письмо. Проблема в том, что когда файл отправляется, сервлет не может найти файл, потому что этот тег дает ему путь

C:\fakepath\file.doc

Любая помощь будет потрясающей.

спросил(а) 2021-01-19T17:24:18+03:00 6 месяцев назад
1
Решение
64

Я понял. Fakepath - это функция безопасности в браузерах. Что происходит, хотя с tomcat заключается в том, что файл фактически хранится в папке temp внутри папки tomcat. Так что мне просто пришлось играть с библиотекой tomcat, commons.fileupload, и я использовал это, чтобы вытащить данные из файла, независимо от местоположения fakepath.

//Handle File Upload for the attachment
ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());

try{
List fileItemsList = servletFileUpload.parseRequest(request);

//TODO: Take datafile input from the field and pass the file name so that we can view the file name

Iterator it = fileItemsList.iterator();
while (it.hasNext()){
FileItem fileItem = (FileItem)it.next();
if (fileItem.isFormField()){
/* The file item contains a simple name-value pair of a form field */
}
else{ //do what you want with the file}

Затем я передал его в свою почтовую утилиту, изменил имя файла на правильное имя, чтобы иметь правильное расширение, и оно сработало. Конечно, вам нужно закодировать форму как многочастную форму, и вам также нужно сделать Mmail Message multipart. Но это довольно просто после всего этого.

    MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent(body, "text/html");

MimeBodyPart attachFilePart = new MimeBodyPart();
FileDataSource fds =
new FileDataSource(file);
attachFilePart.setDataHandler(new DataHandler(fds));
attachFilePart.setFileName(fileName);

Multipart mp = new MimeMultipart();
mp.addBodyPart(textPart);
mp.addBodyPart(attachFilePart);

ответил(а) 2021-01-19T17:24:18+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема