如何使用JavaMail发送非本地附件

如何使用JavaMail发送非本地附件,java,jsp,jakarta-mail,attachment,Java,Jsp,Jakarta Mail,Attachment,我正在使用jsp、servlet和所有有趣的东西构建一个应用程序。现在,我有一个表单,它将表单中的所有信息传递到使用JavaMail API发送的html电子邮件。它可以工作,但我正在尝试发送附件,而我现在设置它的方式不起作用 <div class="section">Upload Files: <input id="fileUpload" type="file" /></div> 任何帮助都将是惊人的。我想出来了。伪造路径是浏览器中的一项安全功能。但tom

我正在使用jsp、servlet和所有有趣的东西构建一个应用程序。现在,我有一个表单,它将表单中的所有信息传递到使用JavaMail API发送的html电子邮件。它可以工作,但我正在尝试发送附件,而我现在设置它的方式不起作用

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

任何帮助都将是惊人的。

我想出来了。伪造路径是浏览器中的一项安全功能。但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);

您使用什么来处理文件上载@MultipartConfig还是Apache Commons文件上载?我不确定你所说的“获取输入值”是什么意思,因为就文件上传而言,表单字段本身对你没有任何用处。你能发布一些你的代码吗?@Perception输入字段是我处理上传的全部。它似乎基本上是将文件作为字段传递,这显然只适用于本地文件(如果有的话)。我只是从输入字段中获取值,然后立即传递它。我试图找到一些东西来上传文件,并以这种方式处理它,而不是使用Java。有什么想法吗?我明白了。您想使用它允许用户从他们的计算机上传文件,作为您将要发送的电子邮件的附件,对吗?@Perception是的,对。@Perception我找到了。我把它贴在下面作为答案。
    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);