Of course, here is below my email relay servlet class. What I'm willing to do is to hide my customers email addresses by relaying email to them via my google app email adress.
I would like to be able to relay html emails with images which is quite common nowadays. I am sending my test emails from a gmail account. Thanx for your help. /* * Copyright (C) 2009 Francois Masurel * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/ >. */ package com.mably.cms.web; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeMessage.RecipientType; import javax.mail.util.ByteArrayDataSource; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.inject.Inject; import com.google.inject.Singleton; import com.mably.cms.model.ContentManager; import com.mably.cms.utils.TraitementStream; /** * @author f.masurel * */ @Singleton public class ContactMailServlet extends HttpServlet { /** serialVersionUID. */ private static final long serialVersionUID = 7131942698661805870L; /** Logger. */ private static final Logger LOG = LoggerFactory.getLogger(ContactMailServlet.class); @Inject private ContentManager contentManager; /** * {...@inheritdoc} */ public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null); try { MimeMessage msg = new MimeMessage(session, req.getInputStream ()); String contentType = msg.getContentType(); LOG.info("Mail content type : " + contentType); LOG.info("Mail sent to " + Arrays.toString( msg.getRecipients(RecipientType.TO))); LOG.info("Mail received from " + msg.getSender()); MimeMessage resmsg = new MimeMessage(session); resmsg.setSubject(msg.getSubject()); resmsg.setRecipient(Message.RecipientType.TO, msg.getSender()); Multipart rescontent = new MimeMultipart(); Object content = msg.getContent(); if (content instanceof String) { LOG.info("Content : string"); } else if (content instanceof Multipart) { LOG.info("Content : multipart"); Multipart mpcontent = (Multipart) msg.getContent(); for (int i = 0; i < mpcontent.getCount(); i++) { BodyPart part = mpcontent.getBodyPart(i); MimeBodyPart respart = new MimeBodyPart(); respart.setContent( part.getContent(), part.getContentType()); rescontent.addBodyPart(respart); } } else if (content instanceof InputStream) { LOG.info("Content : inputstream"); InputStream inputStream = (InputStream) content; ByteArrayDataSource ds = new ByteArrayDataSource(inputStream, contentType); Multipart mpcontent = new MimeMultipart(ds); for (int i = 0; i < mpcontent.getCount(); i++) { BodyPart part = mpcontent.getBodyPart(i); MimeBodyPart respart = new MimeBodyPart(); String level = String.valueOf(i); this.processInputStreamPart(part, respart, level); rescontent.addBodyPart(respart); } } resmsg.setContent(rescontent); resmsg.setSender(new InternetAddress("[email protected]")); resmsg.setFrom(msg.getSender()); //resmsg.setReplyTo(new Address[] { msg.getSender() }); resmsg.setSubject(msg.getSubject()); resmsg.setRecipient(Message.RecipientType.TO, msg.getSender()); resmsg.saveChanges(); Transport.send(resmsg); } catch (MessagingException e) { LOG.error(e.toString(), e); } } private void processInputStreamPart( BodyPart srcPart, MimeBodyPart tgtPart, String level) throws MessagingException, IOException { String partType = srcPart.getContentType(); LOG.info("Part " + level + " content type : " + partType); Object partContent = srcPart.getContent(); LOG.info("Part " + level + " content : " + partContent); if (partType.startsWith("multipart/")) { String subType = partType.substring(partType.indexOf('/') + 1); Multipart tgtPartMP = new MimeMultipart(subType); ByteArrayDataSource srcPartDS = new ByteArrayDataSource( (InputStream) partContent, partType); Multipart srcPartMP = new MimeMultipart(srcPartDS); for (int j = 0; j < srcPartMP.getCount(); j++) { BodyPart srcChildPart = srcPartMP.getBodyPart(j); MimeBodyPart tgtChildPart = new MimeBodyPart(); String childLevel = level + "." + j; this.processInputStreamPart( srcChildPart, tgtChildPart, childLevel); tgtPartMP.addBodyPart(tgtChildPart); } tgtPart.setContent(tgtPartMP); } else if (partType.startsWith("text/")) { String data = TraitementStream.toString( (InputStream) partContent); tgtPart.setContent(data, partType); } else { String dataType = partType.substring(0, partType.indexOf(';')); byte[] srcData = TraitementStream.getBytesFromInputStream( srcPart.getInputStream()); LOG.info("Data type = " + dataType); LOG.info("Data size = " + srcData.length); LOG.info("File name = " + srcPart.getFileName()); tgtPart.setFileName(srcPart.getFileName()); tgtPart.setDisposition(srcPart.getDisposition()); DataSource tgtPartDS = new ByteArrayDataSource(srcData, dataType); tgtPart.setDataHandler(new DataHandler(tgtPartDS)); //tgtPart.setContent(srcData, dataType); } } /** * {...@inheritdoc} */ public void doHead(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { } /** * {...@inheritdoc} */ public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { } } On 10 nov, 23:46, "Ikai L (Google)" <[email protected]> wrote: > François, > > Do you have a code snippet, log entries or a stack trace? > > -- > Ikai Lan > Developer Programs Engineer, Google App Engine --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en -~----------~----~----~----~------~----~------~--~---
