2

Androidアプリでメールを読むためにJavaMailを使用しています。私はすべての組み合わせ、つまりカスタムサーバー/ Gmail ID /LiveIDで送受信されるメールをカバーしようとしました。

この問題は、GMailWITHAttachmentから送信された一部のメールで発生します。添付ファイルを受信できますが、コンテンツが返されますjavax.mail.internet.MimeMultipart@44f2e698

メッセージの受信と読み取りに使用されるコードは次のとおりです。

    Properties props = System.getProperties();
    props.setProperty("mail.store.protocol", "imap");

    try {
     /* Create the session and get the store for read the mail. */
     Session session = Session.getInstance(props, null);
     Store store = session.getStore("imaps");
     store.connect("imap.gmail.com", Username, Password);

     /* Mention the folder name which you want to read. */
     Folder inbox = store.getFolder("INBOX");
     System.out.println("No of Unread Messages : " + inbox.getUnreadMessageCount());         

     /* Open the inbox using store. */
     inbox.open(Folder.READ_ONLY);

     Message messages[] = inbox.getMessages();       
     Log.d("Inbox", "Message Count: "+inbox.getMessageCount());

     for (int i = messages.length - 1 ; i > 0; --i) {
         Log.i("ContentType", "ContentType: "+messages[i].getContentType());

         Object msgContent = messages[i].getContent();

         String content = "";

         /* Check if content is pure text/html or in parts */            
         if (msgContent instanceof Multipart) {

             Multipart multipart = (Multipart) msgContent;

             Log.e("BodyPart", "MultiPartCount: "+multipart.getCount());

             for (int j = 0; j < multipart.getCount(); j++) {

              BodyPart bodyPart = multipart.getBodyPart(j);

              String disposition = bodyPart.getDisposition();

              if (disposition != null && (disposition.equalsIgnoreCase("ATTACHMENT"))) { // BodyPart.ATTACHMENT doesn't work for gmail
                  System.out.println("Mail have some attachment");

                  DataHandler handler = bodyPart.getDataHandler();
                  System.out.println("file name : " + handler.getName());                                 
                }
              else { 
                  System.out.println("Content: "+bodyPart.getContent());
                  content= bodyPart.getContent().toString();
                }
            }
         }
         else                
             content= messages[i].getContent().toString();

問題のあるメールについて私が知っていること:

  • getFromまた、名前を返します。つまり、この形式で提供されますFirstName LastName&ltemailID @ gmail.com&gt

  • MultiPartには2つのBodyPartが含まれています。

    • BodyPart 1は、コンテンツを次のように返します。javax.mail.internet.MimeMultipart@44f2e698

    • BodyPart 2は、アタッチメントの正しい名前を返します

4

2 に答える 2

1

BodyPart 1は、コンテンツをjavax.mail.internet.MimeMultipart@44f2e698として返します。

MimeMultiPartでgetBodyPartを呼び出してみてください

これはおそらく、 http: //docs.oracle.com/javaee/5/api/javax/mail/internet/MimeBodyPart.html#contentでgetContent()を 呼び出すことができるMimeBodyPartを返します。

于 2012-10-18T12:52:45.433 に答える
0

おそらく、添付ファイル付きのテキストメッセージの最も単純なケースのみを処理しています。MIMEではさらに多くのことが可能です。マルチパート/混合、マルチパート/代替、マルチパート/関連、およびマルチパート/署名の違いについて学ぶ必要があります。JavaMail FAQには、添付ファイルの処理に関する詳細情報があり、JavaMailダウンロードバンドルに含まれているmsgshow.javaデモプログラムは、ネストされたマルチパートを持つメッセージを処理する方法を示しています。

于 2012-10-18T16:47:04.337 に答える