Чтение части тела пантомимы multipart
Хорошо, поэтому я использую.getcontent и получаю javax.mail.internet.MimeMultipart@fd13b5 и т. д.
Я знаю, что мне нужно что-то подобное в моем коде, но я не знаю, что именно нужно.
if (p.isMimeType("text/plain")) {
pr("This is plain text");
pr("---------------------------");
if (!showStructure && !saveAttachments)
System.out.println((String)p.getContent());
} else if (p.isMimeType("multipart/*")) {
pr("This is a Multipart");
pr("---------------------------");
Multipart mp = (Multipart)p.getContent();
level++;
int count = mp.getCount();
for (int i = 0; i < count; i++)
dumpPart(mp.getBodyPart(i));
level--;
} else if (p.isMimeType("message/rfc822")) {
pr("This is a Nested Message");
pr("---------------------------");
level++;
dumpPart((Part)p.getContent());
level--;
в данный момент я пытаюсь поместить всю информацию в astring, которая затем отображается в графическом интерфейсе, в то время как у меня все работает нормально, за исключением содержимого тела, которое отображается как. javax.mail.internet.MimeMultipart@fd13b5. любая помощь будет высоко ценится, так как я застрял.
package EmailTable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Email implements ActionListener
{
private mail mail;
private List mails;
private String password;
private String user;
private String getText;
private boolean textIsHtml = false;
public Email(List mails,String password,String user) throws MessagingException, IOException {
password = "password";
user = "user";
this.mails = mails;
String host = "10..10.10.10";
Properties properties = System.getProperties();
Session session = Session.getDefaultInstance(properties);
Store store = session.getStore("pop3");
store.connect(host, user, password);
Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_ONLY);
Message[] messages = folder.getMessages();
int length = messages.length-1;
for (int i = length; i > length-30; i--) {
mail = new mail();
mail.setEmail(messages[i].getFrom()[0]);
String to = InternetAddress.toString(
messages[i].getRecipients(Message.RecipientType.TO));
if (to != null) {
mail.setEmail2(to);
}
mail.setSubject(messages[i].getSubject());
mail.setDate(messages[i].getSentDate());
mail.setMessage(messages[i]);
mail.setContent(((MimeMessage)messages[i]).getContent());
Email.this.mails.add(mail);
}
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
2 ответа
Да, вам нужно перебрать каждый BodyPart, чтобы узнать его тип, а затем получить содержимое соответственно. Вот то, что я использовал, чтобы получить содержание сообщения. Но я все еще не могу получить правильный контент для некоторых сообщений.
отредактированный
Работает лучше после реализации кода, предложенного Биллом.
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"))) {
System.out.println("Mail have some attachment");
DataHandler handler = bodyPart.getDataHandler();
System.out.println("file name : " + handler.getName());
}
else {
content = getText(bodyPart); // the changed code
}
}
}
else
content= messages[i].getContent().toString();
Это решение работало намного лучше для меня. Я просто хотел записать свое электронное письмо в целях разработки / тестирования. Используйте метод MimeMessage.writeTo(OutputStream).
void logMimeMessage(MimeMessage msg) throws MessagingException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
msg.writeTo(out);
} catch (IOException e) {
logger.catching(new MyException("Cannot log MimeMessage",e));
}
logger.error(out.toString());
}
Благодаря комментарию @zzzzz выше, который связал этот ответ JavaMail - Парсинг содержимого электронной почты, похоже, не может заставить его работать! (Message.getContent ())