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&gtMultiPartには2つのBodyPartが含まれています。
BodyPart 1は、コンテンツを次のように返します。
javax.mail.internet.MimeMultipart@44f2e698
BodyPart 2は、アタッチメントの正しい名前を返します