我在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;
}
答案 0 :(得分: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
}
}
基本上,如果电子邮件具有Multipart,则可能存在附件,但您必须查看内容处置才能真正了解。 Part.ATTACHMENT将是您感兴趣的,并且您可以选择忽略或解析Part.INLINE。