Hi Ikai, have you been able to reproduce my "Converting attachment
data failed" exception ?

I'm still stuck on this strange bug.

Thanx for your help.

On 11 nov, 00:00, mably <[email protected]> wrote:
> 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=.


Reply via email to