I have updated my example now for 1.2.8 if that helps:
http://jeremyblythe.blogspot.com/2009/12/gae-128-fixes-mail-but-not-jaxb.html


2009/12/5 m seleron <[email protected]>:
> Hi.Peter,
>
> As one example.
>
> When you use
> ----------------------------------------------------------------------------
> InputStream inputStream = message.getInputStream(); //
> ByteArrayDataSource inboundDataSource = new
>        ByteArrayDataSource(inputStream, message.getContentType());
> Multipart inboundMultipart = new MimeMultipart(inboundDataSource);
> ----------------------------------------------------------------------------
>
> Please switch the processing of each type by using
> MimeMessage#isMimeType.
> (In the offered source it is variable [message]. )
>
> MimeMessage#isMimeType("multipart/*") == true
> Convert into MimeMultipart.
>
> MimeMessage#isMimeType("text/plain") == true
> MimeMessage#isMimeType("text/html") == true
> Need not convert into MimeMultipart.
>
> Of course,
> Jeremy Blythe have provided us information that [contentType.indexOf
> ( "multipart")] also Behave the same.
> Thanks Jeremy Blythe.
>
> Ikai.
> Thank you variously for useful information as for processing
> concerning the attached file to datastore ,etc.
>
>
> Though it noticed now.
>
> MimeMessage#isMimeType("multipart/*") == true
> The return value of MimeMessage#getContent() seems to have changed
> into Multipart. (SDK-1.2.8)
> (The real thing environment has been updated recently. )
>
> http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes
>
>
> When you use [message.getContent() ]
> Such a method might be able to be used.
>
> Object content = message.getContent();
> if ( content instanceof Multipart){
>        MimeMultipart mmp = (MimeMultipart)content;
> }
> else{
>        //plain text/html part .etc
> }
>
> Though there might be an insufficient condition.
> Please try.
> thanks.
>
>
> On 12月5日, 午前3:24, Peter Ondruska <[email protected]> wrote:
>> OK. now I am really puzzled. message.getContent() is very much
>> dependent on how message is sent, e.g. email from Gmail:
>> message.getContent().getClass().getName() is
>> javax.mail.internet.MimeMultipart
>>
>> email from Hotmail and Yahoo mail:
>> message.getContent().getClass().getName() throws:
>> Uncaught exception from servlet
>> java.io.IOException: Truncated quoted printable data
>>         at
>> org.apache.geronimo.mail.util.QuotedPrintableEncoder.decodeNonspaceChar
>> (QuotedPrintableEncoder.java:597)
>>         at org.apache.geronimo.mail.util.QuotedPrintableEncoder.decode
>> (QuotedPrintableEncoder.java:584)
>>         at org.apache.geronimo.mail.util.QuotedPrintableDecoderStream.read
>> (QuotedPrintableDecoderStream.java:80)
>>         at org.apache.geronimo.mail.handlers.TextHandler.getContent
>> (TextHandler.java:107)
>>         at javax.activation.DataSourceDataContentHandler.getContent(Unknown
>> Source)
>>         at javax.activation.DataHandler.getContent(Unknown Source)
>>         at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:927)
>>
>> On Dec 4, 6:38 pm, Peter Ondruska <[email protected]> wrote:
>>
>> > Ikai, my code looks same as yours to me:
>>
>> > package eu.kaibo.server;
>>
>> > import java.io.ByteArrayInputStream;
>> > import java.io.IOException;
>> > import java.io.InputStream;
>> > import java.util.Properties;
>> > import java.util.logging.Level;
>> > import java.util.logging.Logger;
>>
>> > import javax.mail.Address;
>> > import javax.mail.MessagingException;
>> > import javax.mail.Multipart;
>> > import javax.mail.Part;
>> > import javax.mail.Session;
>> > import javax.mail.internet.MimeMessage;
>> > import javax.mail.internet.MimeMultipart;
>> > 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 com.google.appengine.api.labs.taskqueue.QueueFactory;
>> > import com.google.appengine.api.labs.taskqueue.TaskOptions;
>>
>> > public class MailHandler extends HttpServlet {
>>
>> >         private static final long serialVersionUID = 895612806305910032L;
>>
>> >         private final Logger logger = 
>> > Logger.getLogger(getClass().getName());
>>
>> >         @Override
>> >         protected void doPost(HttpServletRequest request, 
>> > HttpServletResponse
>> > response) throws ServletException, IOException {
>>
>> >                 Session session = Session.getDefaultInstance(new 
>> > Properties(),
>> > null);
>>
>> >                 try {
>>
>> >                         MimeMessage message = new MimeMessage(session,
>> > request.getInputStream());
>>
>> >                         StringBuffer sb = new StringBuffer();
>>
>> >                         sb.append("From: ");
>> >                         Address[] senders = message.getFrom();
>> >                         for (int i = 0; i < senders.length; i++)
>> >                                 sb.append(senders[i].toString()).append("; 
>> > ");
>> >                         sb.append("\n");
>>
>> >                         sb.append("To: ");
>> >                         Address[] receivers = message.getAllRecipients();
>> >                         for (int i = 0; i < receivers.length; i++)
>> >                                 
>> > sb.append(receivers[i].toString()).append("; ");
>> >                         sb.append("\n");
>>
>> > line 55:                        InputStream is = (InputStream) 
>> > message.getContent();
>> >                         ByteArrayDataSource byteArrayDataSource = new 
>> > ByteArrayDataSource
>> > (is, message.getContentType());
>> >                         Multipart mmp = new 
>> > MimeMultipart(byteArrayDataSource);
>>
>> >                         for (int i = 0; i < mmp.getCount(); i++) {
>> >                                 Part p = mmp.getBodyPart(i);
>> >                                 if 
>> > ("text/plain".equals(p.getContentType())) {
>> >                                         if (i > 0) sb.append("*******");
>> >                                         ByteArrayInputStream bais = 
>> > (ByteArrayInputStream) p.getContent
>> > ();
>> >                                         byte[] buffer = new byte[1024];
>> >                                         int length = 0;
>> >                                         while ((length = 
>> > bais.read(buffer)) != -1)
>> >                                                 sb.append(new 
>> > String(buffer, 0, length));
>> >                                 }
>> >                         }
>>
>> >                         TaskOptions taskOptions = 
>> > TaskOptions.Builder.url("/worker/mail");
>> >                         taskOptions.param("sender", "x");
>> >                         taskOptions.param("receiver", "x");
>> >                         taskOptions.param("subject", "FW: " + 
>> > message.getSubject());
>> >                         taskOptions.param("body", sb.toString());
>> >                         QueueFactory.getDefaultQueue().add(taskOptions);
>>
>> >                 } catch (MessagingException e) {
>> >                         logger.log(Level.SEVERE, null, e);
>> >                 }
>>
>> >         }
>>
>> > }
>>
>> > I am still getting exception:
>>
>> > Uncaught exception from servlet
>> > java.io.IOException: Truncated quoted printable data
>> >         at
>> > org.apache.geronimo.mail.util.QuotedPrintableEncoder.decodeNonspaceChar
>> > (QuotedPrintableEncoder.java:597)
>> >         at org.apache.geronimo.mail.util.QuotedPrintableEncoder.decode
>> > (QuotedPrintableEncoder.java:584)
>> >         at org.apache.geronimo.mail.util.QuotedPrintableDecoderStream.read
>> > (QuotedPrintableDecoderStream.java:80)
>> >         at org.apache.geronimo.mail.handlers.TextHandler.getContent
>> > (TextHandler.java:107)
>> >         at javax.activation.DataSourceDataContentHandler.getContent(Unknown
>> > Source)
>> >         at javax.activation.DataHandler.getContent(Unknown Source)
>> >         at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:927)
>> >         at eu.kaibo.server.MailHandler.doPost(MailHandler.java:55)
>> >         at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
>>
>> > On Dec 2, 7:08 pm, "Ikai L (Google)" <[email protected]> wrote:
>>
>> > > Peter,
>>
>> > > I'm working on a cookbook entry for processing incoming mail in Java. 
>> > > Here's
>> > > some code I had working. Can you take a look at this and see if there's
>> > > anything you can adapt?
>>
>> > > import com.google.appengine.api.datastore.Blob;
>> > > import com.google.appengine.api.datastore.Key;
>>
>> > > import javax.jdo.annotations.*;
>>
>> > > @PersistenceCapable(identityType = IdentityType.APPLICATION)
>> > > public class Image {
>>
>> > >     @PrimaryKey
>> > >     @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
>> > >     private Key key;
>>
>> > >     @Persistent
>> > >     private Blob data;
>>
>> > >     @Persistent
>> > >     private String contentType;
>>
>> > >     public Image(Blob data, String contentType) {
>> > >         this.data = data;
>> > >         this.contentType = contentType;
>> > >     }
>>
>> > >     public Key getKey() {
>> > >         return key;
>> > >     }
>>
>> > >     public Blob getData() {
>> > >         return data;
>> > >     }
>>
>> > >     public void setData(Blob data) {
>> > >         this.data = data;
>> > >     }
>>
>> > >     public String getContentType() {
>> > >         return contentType;
>> > >     }
>>
>> > >     public void setContentType(String contentType) {
>> > >         this.contentType = contentType;
>> > >     }
>>
>> > > }
>>
>> > > import Image;
>> > > import com.google.appengine.api.datastore.Blob;
>>
>> > > 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.MimeBodyPart;
>> > > import javax.mail.internet.MimeMessage;
>> > > import javax.mail.internet.MimeMultipart;
>> > > import javax.jdo.PersistenceManager;
>> > > import java.io.IOException;
>> > > import java.io.InputStream;
>> > > import java.io.ByteArrayOutputStream;
>> > > import java.util.Properties;
>>
>> > > public class IncomingMailHandlerServlet extends HttpServlet {
>>
>> > >     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());
>>
>> > >             InputStream inputStream = message.getInputStream();
>>
>> > >             ByteArrayDataSource inboundDataSource = new
>> > > ByteArrayDataSource(inputStream, message.getContentType());
>> > >             Multipart inboundMultipart = new
>> > > MimeMultipart(inboundDataSource);
>>
>> > >             for (int i = 0; i < inboundMultipart.getCount(); i++) {
>> > >                 BodyPart part = inboundMultipart.getBodyPart(i);
>>
>> > >                 if (part.getDisposition() == null) {
>> > >                     // This is just a plain text part
>> > >                 } else if (part.getDisposition().equals("attachment")) {
>> > >                     // Create a new ByteArrayDataSource with this part
>> > >                     MimeBodyPart inboundMimeBodyPart = (MimeBodyPart) 
>> > > part;
>>
>> > >                     // The call to getContentType here may return a
>>
>> ...
>>
>> もっと読む ≫
>
> --
>
> 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.
>
>
>

--

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.


Reply via email to