javamail收邮件很麻烦。要作很多判断,如附件中文,附件存放等。这段代码不算完整。仅作参考。
/**
* 存放收件到系统中
*
* @param sess
* @param pmm
* @return
*/
private boolean storeReceiveMail(Session sess, PlatMessageMailset pmm) throws Exception {
Store store = null;
POP3Folder folder = null;
long size = 0;
try {
URLName url = new URLName("pop3", pmm.getPop3(), 110, "", pmm.getUsername(), pmm.getPassword());
javax.mail.Session s = javax.mail.Session.getDefaultInstance(System.getProperties(), null);
store = s.getStore(url);
// if (folder == null) throw new Exception("No default folder");
//如果是收件箱
store.connect();
folder = (POP3Folder) store.getFolder("INBOX");
if (folder == null) throw new Exception("No POP3 INBOX");
//使用只读方式打开收件箱
folder.open(Folder.READ_WRITE);
//得到文件夹信息,获取邮件列表
FetchProfile profile = new FetchProfile();
profile.add(UIDFolder.FetchProfileItem.UID);
profile.add(FetchProfile.Item.ENVELOPE);
Message[] msgs = folder.getMessages();
folder.fetch(msgs, profile);
for (int msgNum = 0; msgNum < msgs.length; msgNum++) {
Message message = (msgs[msgNum]);
if (!message.getFlags().contains(Flags.Flag.SEEN)) {
PlatMessage pm = new PlatMessage();
pm.setReceiver(pmm.getOwner());
pm.setRec_email(pmm.getMailaddr());
pm.setSend_date(message.getSentDate());
pm.setFolder("INBOX");
pm.setMsg_tag(2);
pm.setCreate_date(new Date());
pm.setIstag(0);
pm.setAcctag(0);
///存放邮件
//获得发送邮件地址
String text = "";
String from = ((InternetAddress) message.getFrom()[0]).getPersonal();
//InternetAddress ia = new InternetAddress(from);
if (from == null) from = ((InternetAddress) message.getFrom()[0]).getAddress();
pm.setSender(from);
//获取主题
String subject = message.getSubject();
pm.setMsg_title(subject);
System.out.println("收取邮件,来自:" + from + "。主题:" + subject);
//获取信息对象
Part messagePart = message;
Object content = messagePart.getContent();
String acc_id = "";
System.out.println("content" + content);
if (content instanceof String) {
//附件
text = String.valueOf(content);
System.out.println("这儿" + text);
} else if (content instanceof Multipart) {
Multipart mp = ((Multipart) content);
for (int k = 0; k < mp.getCount(); k++) {
BodyPart bp = mp.getBodyPart(k);
Object t = bp.getContent();
if (t instanceof String) {
text = (String.valueOf(t));
System.out.println("这儿1" + text);
} else if (t instanceof InputStream) {
String physical = UUIDHex.getUUIDHex();
FileControl fc = new FileControl();
fc.setMyFile(new File(MESSAGE_ACC_PATH + "//" + physical));
fc.createFile();
fc.writeFile(bp.getInputStream());
PlatMsgAccessary pma = new PlatMsgAccessary();
pma.setFile_name(StringUtil.getString(MailUtil.decodeText(bp.getFileName()), "未知文件名"));
pma.setPhysical(physical);
pma.setFile_size(bp.getSize());
sess.save(pma);
acc_id += physical + "||";
System.out.println("收取附件,名称:" + MailUtil.decodeText(bp.getFileName()) + "。大小:" + bp.getSize());
size += bp.getSize();
pm.setAcctag(1);
}
}
}
pm.setAcc_id(acc_id);
/**
//获取content类型
String contentType = messagePart.getContentType();
//如果邮件内容是纯文本或者是HTML,那么打印出信息
String context = "";
if (contentType.startsWith("text/plain") ||
contentType.startsWith("text/html")) {
InputStream is = messagePart.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String thisLine = reader.readLine();
context += thisLine;
while (thisLine != null) {
thisLine = reader.readLine();
context += thisLine;
}
size += context.length();
}
**/
pm.setMsg_size(message.getSize());
pm.setMsg_sys("SSEIP");
// pm.setMsg_text(context);
sess.save(pm);
sess.flush();
System.out.println("邮件正文:" + text);
saveMessageText(sess, pm.getMsg_id(), text);//
if (pmm.getDeltag() == 1) {
message.setFlag(Flags.Flag.DELETED, true);
} else {
message.setFlag(Flags.Flag.SEEN, true);
}
}
// folder.expunge();
结束
}
return true;
} catch (Exception ex) {
throw ex;
} finally {
if (folder != null) {
folder.close(true);
}
store.close();
}
}