**
javamail解析邮件
**
首先说明一下,这边是按公司的要求将代码模块拆开来进行编写的,可能会有那么一点繁琐……下面就开始啦
一、编写邮箱客户端
这里主要是为了根据不同的协议进行连接,方便扩展……
- service层的方法
在service层初始化的时候进行参数的设置,里面的EmailHost是一个枚举类,用来配置邮箱主机及执行注册事件类型(其实可以不用这么麻烦,但是公司为了扩展性有要求)
public EmailServiceImpl() {
clients = new HashMap<EmailHost, EmailClient>();
clients.put(EmailHost.Yandex, new EmailClient(
EmailClient.IMAP, "imap.yandex.com", 993, true
));
}
- 邮箱客户端
import java.io.IOException;
import java.security.Security;
import java.util.List;
import java.util.Properties;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.URLName;
import javax.mail.search.SearchTerm;
import org.apache.log4j.Logger;
/**
* 邮箱客户端
*
* @author dylin
* */
public class EmailClient {
/**
* 协议类型
*/
private String protocol;
/**
* 主机地址
*/
private String host;
/**
* 端口
*/
private int port;
/**
* 是否开启ssl
*/
private boolean ssl;
public static final String IMAP = "imap";
public static final String POP3 = "pop3";
private Properties props;
Logger logger = Logger.getLogger(this.getClass());
public EmailClient() {
}
public EmailClient(String protocol, String host, int port, boolean ssl) {
init(protocol, host, port, ssl);
}
@SuppressWarnings("restriction")
public void init(String protocol, String host, int port, boolean ssl) {
this.protocol = protocol;
this.host = host;
this.port = port;
this.ssl = ssl;
// 1、连接邮件服务器的参数配置
props = new Properties();
// 设置传输协议
props.setProperty("mail.store.protocol", protocol);
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
if (protocol.equals(IMAP)) {
// 设置收件人的IMAP服务器
props.setProperty("mail.imap.host", host);
props.setProperty("mail.imap.port", port + "");
if (!ssl)
return;
props.setProperty("mail.imap.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.imap.socketFactory.fallback", "false");
props.setProperty("mail.imap.socketFactory.port", port + "");
// props.setProperty("mail.imap.starttls.enable", ssl ? "true" : "false");
} else {
// POP3
props.setProperty("mail.pop3.host", host);
props.setProperty("mail.pop3.port", port + "");
if (!ssl)
return;
props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.pop3.socketFactory.fallback", "false");
props.setProperty("mail.pop3.socketFactory.port", port + "");
}
}
- EmailHost枚举类
import java.util.Random;
/**
* 邮箱主机及执行注册事件类型配置
* @author dylin
*
*/
public enum EmailHost {
//Yohoo("@yahoo.com", YahooRegAction.class),
//Outlo