package eu.gaetan.grigis.mail.server; import java.io.IOException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.jdo.PersistenceManager; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.internet.MimeMessage; import java.util.Properties; import javax.mail.Address; import eu.gaetan.grigis.mail.client.Mail; import eu.gaetan.grigis.mail.client.lib.Config; import eu.gaetan.grigis.mail.server.Users; import eu.gaetan.grigis.mail.server.PMF; public class MailHandlerServlet extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null); MimeMessage message; PersistenceManager pm = PMF.get().getPersistenceManager(); try{ message = new MimeMessage(session, req.getInputStream()); String to=getEmailString(message.getRecipients(Message.RecipientType.TO)).replaceAll(Config.DOMAIN_ADRESS_CLEANUP, ""); if(Users.isMailRecipientValid(to)) { Mail m=new Mail( message.getSubject(), getEmailString(message.getFrom()), to, getHtmlContent(message.getContent()) ); pm.makePersistent(m); } else System.out.println("Attempting to send a mail to an unknown or expired recipient : "+to); }catch(Exception ex){ System.out.println("Erreur lors de la sauvegarde!!"); ex.printStackTrace(); }finally{pm.close();} } protected String getEmailString(Address[] a) { String ret=""; for (Address address : a) { ret+=address.toString()+","; } return ret.substring(0, ret.length()-1); } protected String getHtmlContent(Object o) throws MessagingException, IOException { //TODO: Support several type and file download String ret=""; if (o instanceof String) { return (String) o; } else if (o instanceof Multipart) { System.out.println("getHtmlContent : Object is multipart"); for (int i=0;i<((Multipart)o).getCount();i++) { String type=((Multipart)o).getBodyPart(i).getContentType(); System.out.println("getHtmlContent : "+type); if(type.startsWith("text/")) ret+=getHtmlContent(((Multipart)o).getBodyPart(i).getContent()); } } else if (o instanceof Message) { System.out.println("getHtmlContent : Object is message"); } return ret; } }