如何使用JavaMail发送非本地附件
我正在使用jsp、servlet和所有有趣的东西构建一个应用程序。现在,我有一个表单,它将表单中的所有信息传递到使用JavaMail API发送的html电子邮件。它可以工作,但我正在尝试发送附件,而我现在设置它的方式不起作用如何使用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
<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);