发新话题

一段读取Gmail邮件的方法 SSL

package test.gmail;

import java.io.UnsupportedEncodingException;
import java.security.Security;
import java.util.Properties;
import javax.mail.FetchProfile;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.URLName;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeUtility;
import common.Logger;

/**
 * 用于收取Gmail邮件
 * 
 * @author wuhua
 */
public class GmailFetch {
  private static Logger logger = Logger.getLogger(GmailFetch.class);

  public static void main(String argv[]) throws Exception {
    logger.debug("开始读取邮件");
    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
    final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
    // Get a Properties object
    Properties props = System.getProperties();
    props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);
    props.setProperty("mail.pop3.socketFactory.fallback", "false");
    props.setProperty("mail.pop3.port", "995");
    props.setProperty("mail.pop3.socketFactory.port", "995");
    // 以下步骤跟一般的JavaMail操作相同
    Session session = Session.getDefaultInstance(props, null);
    // 请将红色部分对应替换成你的邮箱帐号和密码
    URLName urln = new URLName("pop3", "pop.gmail.com", 995, "INBOX", "username",
        "password");
    Store store = session.getStore(urln);
    Folder inbox = null;
    try {
      store.connect();
      inbox = store.getFolder("INBOX");
      inbox.open(Folder.READ_ONLY);
      FetchProfile profile = new FetchProfile();
      profile.add(FetchProfile.Item.ENVELOPE);
      Message[] messages = inbox.getMessages();
      inbox.fetch(messages, profile);
      logger.debug("收件箱的邮件数:" + messages.length);
      for (int i = 0; i < messages.length; i++) {
        // 邮件发送者
        String from = decodeText(messages[i].getFrom()[0].toString());
        InternetAddress ia = new InternetAddress(from);
        logger.debug("发信人:" + ia.getPersonal() + '(' + ia.getAddress() + ')');
        // 邮件标题
        logger.debug("主题:" + messages[i].getSubject());
        // 邮件大小
        logger.debug("邮件大小:" + messages[i].getSize());
        // 邮件发送时间
        logger.debug("发送日期:" + messages[i].getSentDate());
      }
    } finally {
      try {
        inbox.close(false);
      } catch (Exception e) {}
      try {
        store.close();
      } catch (Exception e) {}
    }
    logger.debug("读取邮件完毕");
  }

  protected static String decodeText(String text) throws UnsupportedEncodingException {
    if (text == null)
      return null;
    if (text.startsWith("=?GB") || text.startsWith("=?gb"))
      text = MimeUtility.decodeText(text);
    else
      text = new String(text.getBytes("ISO8859_1"));
    return text;
  }
}
快乐渡过每一天,减肥坚持每一天



编辑 回复 快速回复 TOP
请问你是如何判断邮件是否有附件的呢??

能将你的办法告诉我么,有成功的代码当然更好
编辑 回复 快速回复 TOP
发新话题