Hi Ikai, thanx for you help.

I've copy pasted your code on my webapp (webwinewatch), I've no error
but the mail isn't correctly relayed, all attachements are removed.

I've just modified the sender, from and recipient lines :

message.setSender(new InternetAddress("<myaddress>@gmail.com", "Relay
account"));
message.setFrom(message.getSender());
message.setRecipient(Message.RecipientType.TO, message.getSender());

Do you have any clue ?

You can test it, sending an email to : contact-
t...@webwinewatch.appspotmail.com

Thanx again for your help.

On 16 nov, 21:35, "Ikai L (Google)" <ika...@google.com> wrote:
> I couldn't reproduce your exact error, but I was able to put together a
> working example of an inbound email handler to relay messages. I'm going to
> expand the documentation about processing inbound emails. Here's some
> working code:http://pastie.org/701517
>
> Does this example help any? Code is also pasted below, but it'll be easier
> for you to look at the Pastie.
>
> import javax.servlet.http.HttpServlet;
> import javax.servlet.http.HttpServletRequest;
> import javax.servlet.http.HttpServletResponse;
> import javax.servlet.ServletException;
> import javax.mail.*;
> import javax.mail.util.ByteArrayDataSource;
> import javax.mail.internet.MimeMessage;
> import javax.mail.internet.MimeMultipart;
> import javax.mail.internet.MimeBodyPart;
> import javax.mail.internet.InternetAddress;
> import javax.activation.DataHandler;
> import java.io.IOException;
> import java.io.InputStream;
> import java.util.logging.Logger;
> import java.util.Properties;
>
> public class MailHandlerServlet extends HttpServlet {
>     private static final Logger log =
> Logger.getLogger(MailHandlerServlet.class.getName());
>     private static final String RECIPIENT = "recipi...@gmail.com";
>     private static final String SENDER = "sen...@google.com";
>
>     protected void doPost(HttpServletRequest request, HttpServletResponse
> response) throws ServletException, IOException {
>         Properties props = new Properties();
>         Session session = Session.getDefaultInstance(props, null);
>         try {
>             MimeMessage message = new MimeMessage(session,
> request.getInputStream());
>
>             Object content = message.getContent(); // You could also
> probably just use message.getInputStream() here
>                                                    // and avoid the
> conditional type check
>
>             if (content instanceof String) {
>                 log.info("Received a string");
>             } else if (content instanceof InputStream) {
>                 // My somewhat limited testing indicates that this is always
> getting returned as an
>                 // InputStream
>
>                 InputStream inputStream = (InputStream) content;
>                 ByteArrayDataSource inboundDataSource = new
> ByteArrayDataSource(inputStream, message.getContentType());
>                 Multipart inboundMultipart = new
> MimeMultipart(inboundDataSource);
>
>                 // Set the body with whatever text you want
>                 Multipart outboundMultipart = new MimeMultipart();
>                 MimeBodyPart messageBodyPart = new MimeBodyPart();
>                 messageBodyPart.setText("Set your body here");
>                 outboundMultipart.addBodyPart(messageBodyPart);
>
>                 // Loop over the multipart message coming in and
>                 // append them to the outbound Multipart object
>                 for (int i = 0; i < inboundMultipart.getCount(); i++) {
>                     BodyPart part = inboundMultipart.getBodyPart(i);
>                     /*
>                         The content-disposition header is optional:
>                        http://www.ietf.org/rfc/rfc1806.txt
>
>                         This header specifies the filename and type of
>                         a MIME part.
>                     */
>                     if(part.getDisposition() == null) {
>                         // This is just a plain text email
>                     } else {
>                         // We have something interesting. Let's parse it.
>
>                         // Create a new ByteArrayDataSource with this part
>                         MimeBodyPart inboundMimeBodyPart = (MimeBodyPart)
> part;
>                         InputStream is = part.getInputStream();
>                         ByteArrayDataSource mimePartDataSource = new
> ByteArrayDataSource(is, inboundMimeBodyPart.getContentType());
>
>                         // Create a new outbound MimeBodyPart and set this
> as the handler
>                         MimeBodyPart outboundMimeBodyPart = new
> MimeBodyPart();
>                         outboundMimeBodyPart.setDataHandler(new
> DataHandler(mimePartDataSource));
>
> outboundMimeBodyPart.setFileName(inboundMimeBodyPart.getFileName());
>                         outboundMultipart.addBodyPart(outboundMimeBodyPart);
>
>                     }
>
>                 }
>                 message.setContent(outboundMultipart);
>
>             }
>             message.setFrom(new InternetAddress(SENDER, "Relay account"));
>             message.setRecipient(Message.RecipientType.TO, new
> InternetAddress(RECIPIENT, "Recipient"));
>
>             Transport.send(message);
>
>         } catch (MessagingException e) {
>             throw new ServletException(e);
>         }
>     }
>
>
>
> }
> On Sat, Nov 14, 2009 at 1:11 AM, mably <fm2...@mably.com> wrote:
> > 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 <fm2...@mably.com> 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) {...
>
> plus de détails »

--

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 google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=.


Reply via email to