最近看了不少資料 寫了 javamail 使用IMAP收發郵件,使用IMAP 而不用POP3 具體好處就不多少了,看程式碼吧。這個是用EJB實現的,不想用EJB的 直接去掉標註就好了
對各種內容格式都有處理,不過對於html中附帶圖片之類的嵌入資源沒做處理。有需要的請補充,哪寫的不好請拍磚。
- /**
- *
- */
- package com.tsts.oa.service.impl;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Properties;
- import javax.ejb.Remote;
- import javax.ejb.Stateful;
- import javax.mail.Address;
- import javax.mail.BodyPart;
- import javax.mail.Flags;
- import javax.mail.Folder;
- import javax.mail.Message;
- import javax.mail.Multipart;
- import javax.mail.Session;
- import javax.mail.Store;
- import javax.mail.URLName;
- import javax.mail.internet.InternetAddress;
- import com.tsts.oa.bean.AttachmentInfo;
- import com.tsts.oa.bean.Email;
- import com.tsts.oa.service.EmailService;
- /**
- * @author sunyanan
- *
- */
- @Stateful
- @Remote(EmailService.class)
- public class EmailServiceBean implements EmailService {
- private Session session;
- private Store store;
- private Folder folder;
- public List<Email> getEmailList(String userName, String password,
- String folderName) throws Exception {
- login(userName, password, folderName);
- Message[] messages = folder.getMessages();
- List<Email> emails = new ArrayList<Email>(messages.length);
- for (int i = 0; i < messages.length; i ) {
- Message message = messages[i];
- Email email = new Email();
- email.setHasSeen(message.isSet(Flags.Flag.SEEN));
- email.setMsgNum(message.getMessageNumber());
- email.setReceiveDate(message.getReceivedDate());
- email.setSenderAddress(formatAddresses(message.getFrom()));
- email.setSubject(message.getSubject());
- email.setSize(message.getSize());
- emails.add(email);
- }
- logout();
- return emails;
- }
- public Email findEmailByNum(String userName, String password,
- String folderName, int msgNum) throws Exception {
- login(userName, password, folderName);
- Email email = null;
- Message message = folder.getMessage(msgNum);
- if (message != null) {
- //message.setFlag(Flags.Flag.SEEN, true);
- email = new Email();
- email.setHasSeen(message.isSet(Flags.Flag.SEEN));
- email.setMsgNum(message.getMessageNumber());
- email.setReceiveDate(message.getReceivedDate());
- email.setSenderAddress(formatAddresses(message.getFrom()));
- email.setSubject(message.getSubject());
- email.setSize(message.getSize());
- email.setContent(getContent(message));
- email.setAttachments(getAttachmentInfo(message));
- }
- logout();
- return email;
- }
- public byte[] getAttachment(String userName, String password,
- String folderName, int msgNum, int attchmentId) throws Exception {
- login(userName, password, folderName);
- byte[] is = null;
- Message message = folder.getMessage(msgNum);
- Multipart part = (Multipart) message.getContent();
- if(part.getCount() >= attchmentId ){
- is = new byte[part.getBodyPart(attchmentId).getSize()];
- part.getBodyPart(attchmentId).getInputStream().read(is);
- }
- logout();
- return is;
- }
- /**
- * 得到message的主題內容
- *
- * @param message
- * @return
- */
- private String getContent(Message message) throws Exception {
- StringBuffer str = new StringBuffer();
- // 純文字
- if (message.isMimeType(“text/plain”))
- str.append(message.getContent().toString());
- // 不帶附件的html內容
- if (message.isMimeType(“multipart/alternative”)) {
- Multipart part = (Multipart) message.getContent();
- str.append(part.getBodyPart(1).getContent().toString());
- }
- // 不帶附件但是內嵌資源的html內容郵件
- if (message.isMimeType(“multipart/related”)) {
- Multipart part = (Multipart) message.getContent();
- Multipart cpart = (Multipart) part.getBodyPart(0).getContent();
- str.append(cpart.getBodyPart(1).getContent().toString());
- }
- // 帶附件的郵件內容
- if (message.isMimeType(“multipart/mixed”)) {
- Multipart part = (Multipart) message.getContent();
- // 純文字
- if (part.getBodyPart(0).isMimeType(“text/plain”)) {
- str.append(part.getBodyPart(0).getContent());
- }
- // html
- if (part.getBodyPart(0).isMimeType(“multipart/alternative”)) {
- Multipart cpart = (Multipart) part.getBodyPart(0).getContent();
- str.append(cpart.getBodyPart(1).getContent());
- }
- }
- return str.toString();
- }
- private HashMap<String, AttachmentInfo> getAttachmentInfo(Message message) throws Exception {
- if (message.isMimeType(“multipart/mixed”)) {
- Multipart part = (Multipart) message.getContent();
- int count = part.getCount();
- HashMap<String, AttachmentInfo> map = new HashMap<String, AttachmentInfo>();
- for (int i = 1; i < count; i) {
- BodyPart bpart = part.getBodyPart(i);
- AttachmentInfo a = new AttachmentInfo();
- a.setContentType(bpart.getContentType());
- a.setFileName(bpart.getFileName());
- a.setSize(bpart.getSize());
- map.put(String.valueOf(i), a);
- }
- return map;
- }
- return null;
- }
- /**
- * 登入郵箱
- *
- * @param userName
- * 使用者名稱
- * @param password
- * 密碼
- * @param folderName
- * 登入的郵箱資料夾名字
- * @throws Exception
- */
- private void login(String userName, String password, String folderName)
- throws Exception {
- Properties props = new Properties();
- props.put(“mail.smtp.host”, “mail.tsts168.com”);
- props.put(“mail.smtp.auth”, “true”);
- URLName urlName = new URLName(“imap”, “mail.tsts168.com”, -1,
- folderName, userName, password);
- this.session = Session.getInstance(props);
- this.store = session.getStore(urlName);
- this.store.connect();
- this.folder = store.getFolder(folderName);
- this.folder.open(Folder.READ_ONLY);
- }
- /**
- * 退出登入
- *
- * @throws Exception
- */
- private void logout() throws Exception {
- this.store.close();
- }
- /**
- * Utility method for formatting msg header addresses.
- */
- private String formatAddresses(Address[] addrs) {
- if (addrs == null)
- return “”;
- StringBuffer strBuf = new StringBuffer(getDisplayAddress(addrs[0]));
- for (int i = 1; i < addrs.length; i ) {
- strBuf.append(“, “).append(getDisplayAddress(addrs[i]));
- }
- return strBuf.toString();
- }
- /**
- * Utility method which returns a string suitable for msg header display.
- */
- private String getDisplayAddress(Address a) {
- String pers = null;
- String addr = null;
- if (a instanceof InternetAddress
- && ((pers = ((InternetAddress) a).getPersonal()) != null)) {
- addr = pers ” ” “<” ((InternetAddress) a).getAddress()
- “>”;
- } else
- addr = a.toString();
- return addr;
- }
- }
写评论
很抱歉,必須登入網站才能發佈留言。