Я не очень опытный разработчик (на Java), но мне нужно прочитать файл .eml и просмотреть содержимое тела в браузере (с изображениями) иссылка на любые вложения.
Я пытался создать три файла:
index.html домашняя страница с кнопкой для начала чтения.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Read EML file</title>
</head>
<body>
<h1>Read Email</h1>
<p>Click here to read the eml example file.</p>
<form action="MailServlet" method="post">
<table cellspacing="5" border="0">
<tr><td></td><td><input type="submit" value="Read" /></td></tr></table>
</form>
</body></html>
MailServlet.java соединитель для HTML и Java
package email;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import helper.MailUtility;
public class MailServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
private static final long serialVersionUID = 1L;
public MailServlet(){ super(); }
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
String url = request.getParameter("URL");
out.println("<HTML>");
out.println("<BODY>");
if (url == null || url.length() < 1) {
out.println("<B>No .eml file found</B>");
} else {
try
{
String[] myEML = MailUtility.displayEML(url);
for(int i=0;i<myEML.length;i++) {
out.println(myEML[i]+"<br/>");
}
}
catch (Exception exc)
{
out.println("<B>No .eml file was found</B>");
out.println("<br/><br/>");
out.println("<B>" + exc.toString() + "</B>");
out.println("<br/><br/>");
}
}
out.println("</BODY>");
out.println("</HTML>");
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
this.doPost(request, response);
}
}
MailUtility.java функция для чтения файла .eml.
package helper;
import javax.mail.internet.*;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
public class MailUtility {
public static String[] displayEML(String emlID) throws Exception{
String[] mymessageArray = null;
//WINDOWS PATH
String mypath = "C:\\pippo\\";
String mypathHref = "C:\\pippo\\";
String emlFile = "C:\\pippo\\"+emlID+".eml";
Properties props = new Properties();
Session mailSession = Session.getDefaultInstance(props, null);
InputStream source = new FileInputStream(emlFile);
MimeMessage message = new MimeMessage(mailSession, source);
Address[] emlFrom = message.getFrom();
String email = emlFrom == null ? null : ((InternetAddress) emlFrom[0]).getAddress();
email = message.getFrom()[0] + "(" + email + ")";
String emlBody = "";
String emlAttach = "";
String myTable = "<table><tr><td><B>Subject:</B></td><td>" + message.getSubject() + "</td></tr><tr><td><B>From:</B></td><td>" + email +"</td></tr><tr><td><B>Received Data:</B></td><td>" + message.getSentDate()+"</td></tr>";
if (message.isMimeType("text/plain")) {
emlBody = message.getContent().toString();
} else if(message.isMimeType("text/html")) {
emlBody = message.getContent().toString();
} else if (message.isMimeType("multipart/*")) {
MimeMultipart mimeMultipart = (MimeMultipart) message.getContent();
emlBody = getTextFromMimeMultipart(mimeMultipart);
Multipart multiPart = (Multipart) message.getContent();
int numberOfParts = multiPart.getCount();
for (int partCount = 0; partCount < numberOfParts; partCount++) {
MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
if(part.getFileName()!=null) {
String strAttachment = "";
try {
if (partCount==1) {
// System.out.println("partCount: " + partCount);
strAttachment = "<B>Attachment:</B>";
} else {
strAttachment = "";
}
part.saveFile(mypath + part.getFileName());
emlAttach = emlAttach + "<tr><td>" + strAttachment + "</td><td><a href=\"" + mypathHref + part.getFileName() + "\" target=\"_blank\">"+ part.getFileName() +"</a></td></tr>";
} catch (IOException exc) {
System.out.println(exc.toString());
}
}
}
}
myTable = myTable + emlAttach + "</table><br/>";
mymessageArray = new String[]{myTable,emlBody};
return mymessageArray;
}
private static String convertSendDate(Date mydate) {
String myDD = "";
String myMM = "";
Calendar cal = Calendar.getInstance();
cal.setTime(mydate);
if ((cal.get(Calendar.MONTH) + 1)<10) {
myMM = "0" + (cal.get(Calendar.MONTH) + 1);
} else {
myMM = "" + (cal.get(Calendar.MONTH) + 1);
}
if (cal.get(Calendar.DATE)<10) {
myDD = "0" + cal.get(Calendar.DATE);
} else {
myDD = "" + cal.get(Calendar.DATE);
}
String formatedDate = "" + cal.get(Calendar.YEAR) + myMM + myDD;
return formatedDate;
}
private static String getTextFromMimeMultipart(MimeMultipart mimeMultipart) throws MessagingException, IOException{
String result = "";
int count = mimeMultipart.getCount();
for (int i = 0; i < count; i++) {
BodyPart bodyPart = mimeMultipart.getBodyPart(i);
if (bodyPart.isMimeType("text/plain")) {
System.out.println("1. bodyPart.isMimeType(\"text/plain\")");
result = result + "\n" + bodyPart.getContent();
break; // without break same text appears twice in my tests
} else if (bodyPart.isMimeType("text/html")) {
System.out.println("2. bodyPart.isMimeType(\"text/html\")");
result = result + "\n" + (String)bodyPart.getContent();
} else if (bodyPart.getContent() instanceof MimeMultipart){
System.out.println("3. bodyPart.getContent() instanceof MimeMultipart");
result = result + getTextFromMimeMultipart((MimeMultipart)bodyPart.getContent());
}
}
return result;
}
}
Я могу прочитать информацию как тему, отправитель, я могу сохранить и создать ссылку для вложений, но у меня проблема с чтением и записью тела письма, когда это MimeMultiPart. Я попытался создать функцию
getTextFromMimeMultipart (MimeMultipart mimeMultipart)
, но вывод не отформатирован как html. Не могли бы вы помочь мне понять, как я могу реализовать свою функцию, чтобы правильно видеть тело письма с изображениями (в виде подписи) и прикрепленным файлом.