0

Android に電子メール プロジェクトがあり、メールとその添付ファイルを受信して​​ダウンロードできますが、メッセージに添付ファイルがあるかどうか、および添付ファイルの数を知りたいと考えています。

つまり、次のような if 句を実行するだけです。

if(messages[i].hasAttachment)
{
   int numberOfAttachments = messages[i].attachmentNumber;
  // do smthng
}
else
{
  // do smthng
}

多分その助け: 私はこのコードサンプルで私の体の部分を受け取っています. 一方、私の主題によると、 isMimeType = "Multipart/alternative" または "Multipart/*" の場合、添付ファイルがあることを意味しますか?

public String getText(Part p) throws MessagingException, IOException {

        if (p.isMimeType("text/*")) {
            boolean textIsHtml = false;
            String s = (String) p.getContent();
            textIsHtml = p.isMimeType("text/html");
            return String.valueOf(s);
        }

        if (p.isMimeType("multipart/alternative")) {
            // prefer html text over plain text
            Multipart mp = (Multipart) p.getContent();
            String text = null;
            for (int i = 0; i < mp.getCount(); i++) {
                Part bp = mp.getBodyPart(i);
                if (bp.isMimeType("text/plain")) {
                    if (text == null)
                        text = getText(bp);
                    continue;
                } else if (bp.isMimeType("text/html")) {
                    String s = getText(bp);
                    if (s != null)
                        return String.valueOf(s);
                } else {
                    return getText(bp);
                }
            }
            return text;
        } else if (p.isMimeType("multipart/*")) {
            Multipart mp = (Multipart) p.getContent();
            for (int i = 0; i < mp.getCount(); i++) {
                String s = getText(mp.getBodyPart(i));
                // fileName = bp.getFileName();
                if (s != null)
                    return String.valueOf(s);
            }
        }

        return null;
    }
4

1 に答える 1

1

添付ファイルの解析に使用するコードは次のとおりです。以前は multipart/attachment または multipart/* で解析していましたが、次のように変更しました。

            if( mimeMessage.getContent() instanceof Multipart) {
            Multipart multipartContent = (Multipart) mimeMessage.getContent();
            List<BodyPart> deleteThese = new ArrayList<BodyPart>();
            for( int i = 0; i < multipartContent.getCount(); i++ ) {
                MimeBodyPart part = (MimeBodyPart) multipartContent.getBodyPart(i);
                String disposition = part.getDisposition();
                if( disposition != null
                        && ( disposition.equalsIgnoreCase( Part.ATTACHMENT )
                        || ( disposition.equalsIgnoreCase( Part.INLINE )
                             && !part.isMimeType( PLAIN_TEXT_MIME_TYPE )
                             && !part.isMimeType( HTML_MIME_TYPE ) )
                ) ) {
                    // do something with part
                }
            }

基本的に、電子メールにマルチパートが含まれている場合、添付ファイルの可能性がありますが、実際に知るにはコンテンツの配置を確認する必要があります。Part.ATTACHMENT は関心のあるものであり、必要に応じて Part.INLINE を無視または解析できます。

于 2012-04-27T13:16:15.223 に答える