Как отправить нелокальное вложение с помощью JavaMail - PullRequest
0 голосов
/ 07 июля 2011

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

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

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

C:\fakepath\file.doc

Любая помощь будет удивительной.

1 Ответ

1 голос
/ 11 июля 2011

Я понял это. Поддельный путь был функцией безопасности в браузерах. Что происходит с tomcat, так это то, что файл фактически хранится во временной папке внутри папки tomcat. Поэтому мне просто нужно было поиграть с библиотекой Tomcat, commons.fileupload, и я использовал ее для извлечения данных из файла, независимо от местоположения ложного пути.

//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}

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

    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);
...