package com.yc.crm.mail.action;
|
|
import com.sun.mail.imap.IMAPFolder;
|
import com.sun.mail.imap.IMAPStore;
|
import org.springframework.mail.SimpleMailMessage;
|
import org.springframework.mail.javamail.JavaMailSenderImpl;
|
|
import javax.mail.*;
|
import javax.mail.event.MessageChangedEvent;
|
import javax.mail.event.MessageChangedListener;
|
import javax.mail.event.MessageCountEvent;
|
import javax.mail.event.MessageCountListener;
|
import javax.mail.internet.InternetAddress;
|
import javax.mail.internet.MimeUtility;
|
import javax.mail.search.FlagTerm;
|
import java.io.IOException;
|
import java.util.HashMap;
|
import java.util.Properties;
|
|
public class MailDemo {
|
public static void sendEmail(String[] args) {
|
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
|
mailSender.setHost("smtp.163.com");//邮箱服务商
|
mailSender.setProtocol("smtp");//发邮件
|
mailSender.setUsername("xxxxx@163.com");//账号
|
mailSender.setPassword("Xxxxxx");//授权码
|
mailSender.setDefaultEncoding("utf-8");
|
SimpleMailMessage message = new SimpleMailMessage();
|
message.setTo("xxxx@qq.com");
|
message.setSubject("测试邮箱");
|
message.setText("abc");
|
message.setFrom("xxxxx@qq.com");//发件人邮箱
|
mailSender.send(message);
|
}
|
public static void main(String[] args) throws Exception {
|
//ReceiveEmail();
|
checkEmail();
|
}
|
public static void checkEmail() {
|
try {
|
String protocol = "imaps";//emailEntity.getReceiveProtocol().toLowerCase();//接收协议 imap pop3
|
String server = "imap.qq.com";//emailEntity.getReceiveHost();//"imap.qq.com";
|
Integer port =993;// emailEntity.getReceivePort();//993
|
String user = "xxxx@qq.com";//邮箱
|
String pwd ="xxxxxxxx";//密码
|
Properties properties = new Properties();
|
properties.setProperty("mail.store.protocol", protocol); // IMAP over SSL
|
if (protocol.contains("imap")) {//接收协议imap
|
properties.setProperty("mail.imaps.host", server);
|
properties.setProperty("mail.imaps.port", port + "");
|
} else if (protocol.contains("pop3")) {//接收协议pop3
|
properties.setProperty("mail.pop3.host", server);
|
properties.setProperty("mail.pop3.port", port + "");
|
} else {//其他(再加)
|
properties.setProperty("mail.imaps.host", server);
|
properties.setProperty("mail.imaps.port", port + "");
|
}
|
//properties.put("mail.imaps.starttls.enable", "true");//// IMAP 协议设置 STARTTLS
|
|
HashMap IAM = new HashMap();
|
//带上IMAP ID信息,由key和value组成,例如name,version,vendor,support-email等。
|
IAM.put("name","myname");
|
IAM.put("version","1.0.0");
|
IAM.put("vendor","myclient");
|
IAM.put("support-email","testmail@test.com");
|
//创建会话
|
Session session = Session.getInstance(properties, new Authenticator() {
|
@Override
|
protected PasswordAuthentication getPasswordAuthentication() {
|
return new PasswordAuthentication(user, pwd);
|
}
|
});
|
//存储对象
|
IMAPStore store = (IMAPStore) session.getStore(protocol);//imap协议或pop3协议类型(推荐你使用IMAP协议来存取服务器上的邮件。)
|
//连接
|
store.connect(server, user, pwd);
|
store.id(IAM);//163邮箱需要,不然会报:A3 NO SELECT Unsafe Login. Please contact kefu@188.com for help
|
Folder folder = null;
|
try {
|
// 获得收件箱
|
folder = store.getFolder("INBOX");
|
// 以读写模式打开收件箱
|
folder.open(Folder.READ_WRITE);
|
folder.addMessageCountListener(new MessageCountListener() {
|
@Override
|
public void messagesAdded(MessageCountEvent e) {
|
try {
|
Message[] messages = e.getMessages();
|
for (int i = 0; i < messages.length; i++) {
|
System.out.println("消息:" + messages[i].getSubject());
|
System.out.println("内容:" + messages[i].getContent());
|
String from = MimeUtility.decodeText(messages[i].getFrom()[0].toString());
|
InternetAddress internetAddress = new InternetAddress(from);
|
System.out.println("发件人:" + internetAddress.getPersonal() + '(' + internetAddress.getAddress() + ')');
|
}
|
System.out.println("Message Count Event Fired");
|
}catch (Exception ex){
|
ex.printStackTrace();
|
}
|
}
|
|
@Override
|
public void messagesRemoved(MessageCountEvent e) {
|
System.out.println("Message Count Event Fired");
|
}
|
});
|
|
folder.addMessageChangedListener(new MessageChangedListener() {
|
@Override
|
public void messageChanged(MessageChangedEvent e) {
|
System.out.println("Message Count Event Fired");
|
}
|
});
|
// Check mail once in "freq" MILLIseconds
|
int freq = 5000;
|
boolean supportsIdle = false;
|
try {
|
if (folder instanceof IMAPFolder) {
|
IMAPFolder f = (IMAPFolder) folder;
|
f.idle();
|
supportsIdle = true;
|
}
|
} catch (FolderClosedException fex) {
|
checkEmail();
|
throw fex;
|
} catch (MessagingException mex) {
|
supportsIdle = false;
|
}
|
for (; ; ) {
|
System.out.println("run......");
|
if (supportsIdle && folder instanceof IMAPFolder) {
|
IMAPFolder f = (IMAPFolder) folder;
|
f.idle();
|
System.out.println("IDLE done");
|
} else {
|
Thread.sleep(freq); // sleep for freq milliseconds
|
System.out.println("sleep start......");
|
// This is to force the IMAP server to send us
|
// EXISTS notifications.
|
int messageCount = folder.getNewMessageCount();
|
System.out.println("messageCount......"+messageCount);
|
}
|
}
|
} catch (FolderClosedException fe) {
|
System.out.println("FolderClosedException......");
|
checkEmail();
|
|
}
|
catch (Exception e) {
|
throw new RuntimeException(e);
|
} finally {
|
try {
|
if (folder != null) {
|
folder.close(false);
|
}
|
if (store != null) {
|
store.close();
|
}
|
} catch (MessagingException e) {
|
throw e;
|
}
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
}
|
public static void ReceiveEmail() throws MessagingException, IOException {
|
|
String imapServer = "imap.qq.com";
|
String user = "xxxxx@qq.com";//邮箱
|
String pwd ="xxxxx";//密码
|
|
HashMap IAM = new HashMap();
|
//带上IMAP ID信息,由key和value组成,例如name,version,vendor,support-email等。
|
IAM.put("name","myname");
|
IAM.put("version","1.0.0");
|
IAM.put("vendor","myclient");
|
IAM.put("support-email","testmail@test.com");
|
//创建会话
|
Session session = Session.getInstance(new Properties(), new Authenticator() {
|
@Override
|
protected PasswordAuthentication getPasswordAuthentication() {
|
return new PasswordAuthentication(user,pwd);
|
}
|
});
|
//存储对象
|
IMAPStore store = (IMAPStore) session.getStore("imaps");
|
//连接
|
store.connect(imapServer,user,pwd);
|
store.id(IAM);//163邮箱需要,不然会报:A3 NO SELECT Unsafe Login. Please contact kefu@188.com for help
|
Folder folder = null;
|
try {
|
// 获得收件箱
|
folder = store.getFolder("INBOX");
|
// 以读写模式打开收件箱
|
folder.open(Folder.READ_WRITE);
|
//false 表示未读
|
FlagTerm flagTerm = new FlagTerm(new Flags(Flags.Flag.SEEN),true);
|
//获得收件箱的邮件列表
|
Message[] messages = folder.search(flagTerm);
|
// 打印不同状态的邮件数量
|
System.out.println("收件箱中共" + messages.length + "封邮件!");
|
System.out.println("收件箱中共" + folder.getUnreadMessageCount() + "封未读邮件!");
|
System.out.println("收件箱中共" + folder.getNewMessageCount() + "封新邮件!");
|
System.out.println("收件箱中共" + folder.getDeletedMessageCount() + "封已删除邮件!");
|
|
System.out.println("------------------------开始解析邮件----------------------------------");
|
|
for (int i = 0; i < messages.length; i++) {
|
System.out.println("消息:"+messages[i].getSubject());
|
System.out.println("内容:"+messages[i].getContent());
|
String from = MimeUtility.decodeText(messages[i].getFrom()[0].toString());
|
InternetAddress internetAddress = new InternetAddress(from);
|
System.out.println("发件人:" + internetAddress.getPersonal() + '(' + internetAddress.getAddress() + ')');
|
}
|
|
} catch (NoSuchProviderException e) {
|
e.printStackTrace();
|
} catch (MessagingException e) {
|
e.printStackTrace();
|
} finally {
|
try {
|
if (folder != null) {
|
folder.close(false);
|
}
|
if (store != null) {
|
store.close();
|
}
|
} catch (MessagingException e) {
|
e.printStackTrace();
|
}
|
}
|
|
}
|
}
|