François,

I'm not familiar with any standards with regard to inline images. Do you
have this working outside of App Engine? Do you have working code from that?
If there are discrepancies in our implementation of javax.mail.* and
standard implementations we should be aware.

On Mon, Nov 16, 2009 at 10:30 PM, mably <fm2...@mably.com> wrote:

> In fact standards attachments works.
>
> But it's not what I'm trying do do.
>
> I'm need to relay HTML messages with inline images and this is still
> not working.
>
> Is it a kind of limitation of GAE or is it supposed to work ?
>
> Thanx for your help.
>
> François
>
> On 16 nov, 23:09, mably <fm2...@mably.com> wrote:
> > 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);
> > > > >                        ...
> >
> > 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<google-appengine-java%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-appengine-java?hl=.
>
>
>


-- 
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 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=en.


Reply via email to