提交 | 用户 | age
|
707f3d
|
1 |
package com.yc.crm.mail.action; |
F |
2 |
|
18553a
|
3 |
import com.sun.mail.imap.IMAPFolder; |
707f3d
|
4 |
import com.sun.mail.imap.IMAPStore; |
F |
5 |
import org.springframework.mail.SimpleMailMessage; |
|
6 |
import org.springframework.mail.javamail.JavaMailSenderImpl; |
|
7 |
|
|
8 |
import javax.mail.*; |
18553a
|
9 |
import javax.mail.event.MessageChangedEvent; |
F |
10 |
import javax.mail.event.MessageChangedListener; |
|
11 |
import javax.mail.event.MessageCountEvent; |
|
12 |
import javax.mail.event.MessageCountListener; |
707f3d
|
13 |
import javax.mail.internet.InternetAddress; |
F |
14 |
import javax.mail.internet.MimeUtility; |
|
15 |
import javax.mail.search.FlagTerm; |
|
16 |
import java.io.IOException; |
|
17 |
import java.util.HashMap; |
|
18 |
import java.util.Properties; |
|
19 |
|
|
20 |
public class MailDemo { |
|
21 |
public static void sendEmail(String[] args) { |
|
22 |
JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); |
|
23 |
mailSender.setHost("smtp.163.com");//邮箱服务商 |
|
24 |
mailSender.setProtocol("smtp");//发邮件 |
|
25 |
mailSender.setUsername("xxxxx@163.com");//账号 |
18553a
|
26 |
mailSender.setPassword("Xxxxxx");//授权码 |
707f3d
|
27 |
mailSender.setDefaultEncoding("utf-8"); |
F |
28 |
SimpleMailMessage message = new SimpleMailMessage(); |
18553a
|
29 |
message.setTo("xxxx@qq.com"); |
707f3d
|
30 |
message.setSubject("测试邮箱"); |
F |
31 |
message.setText("abc"); |
18553a
|
32 |
message.setFrom("xxxxx@qq.com");//发件人邮箱 |
707f3d
|
33 |
mailSender.send(message); |
F |
34 |
} |
|
35 |
public static void main(String[] args) throws Exception { |
18553a
|
36 |
//ReceiveEmail(); |
F |
37 |
checkEmail(); |
|
38 |
} |
|
39 |
public static void checkEmail() { |
|
40 |
try { |
|
41 |
String protocol = "imaps";//emailEntity.getReceiveProtocol().toLowerCase();//接收协议 imap pop3 |
|
42 |
String server = "imap.qq.com";//emailEntity.getReceiveHost();//"imap.qq.com"; |
|
43 |
Integer port =993;// emailEntity.getReceivePort();//993 |
|
44 |
String user = "xxxx@qq.com";//邮箱 |
|
45 |
String pwd ="xxxxxxxx";//密码 |
|
46 |
Properties properties = new Properties(); |
|
47 |
properties.setProperty("mail.store.protocol", protocol); // IMAP over SSL |
|
48 |
if (protocol.contains("imap")) {//接收协议imap |
|
49 |
properties.setProperty("mail.imaps.host", server); |
|
50 |
properties.setProperty("mail.imaps.port", port + ""); |
|
51 |
} else if (protocol.contains("pop3")) {//接收协议pop3 |
|
52 |
properties.setProperty("mail.pop3.host", server); |
|
53 |
properties.setProperty("mail.pop3.port", port + ""); |
|
54 |
} else {//其他(再加) |
|
55 |
properties.setProperty("mail.imaps.host", server); |
|
56 |
properties.setProperty("mail.imaps.port", port + ""); |
|
57 |
} |
|
58 |
//properties.put("mail.imaps.starttls.enable", "true");//// IMAP 协议设置 STARTTLS |
|
59 |
|
|
60 |
HashMap IAM = new HashMap(); |
|
61 |
//带上IMAP ID信息,由key和value组成,例如name,version,vendor,support-email等。 |
|
62 |
IAM.put("name","myname"); |
|
63 |
IAM.put("version","1.0.0"); |
|
64 |
IAM.put("vendor","myclient"); |
|
65 |
IAM.put("support-email","testmail@test.com"); |
|
66 |
//创建会话 |
|
67 |
Session session = Session.getInstance(properties, new Authenticator() { |
|
68 |
@Override |
|
69 |
protected PasswordAuthentication getPasswordAuthentication() { |
|
70 |
return new PasswordAuthentication(user, pwd); |
|
71 |
} |
|
72 |
}); |
|
73 |
//存储对象 |
|
74 |
IMAPStore store = (IMAPStore) session.getStore(protocol);//imap协议或pop3协议类型(推荐你使用IMAP协议来存取服务器上的邮件。) |
|
75 |
//连接 |
|
76 |
store.connect(server, user, pwd); |
|
77 |
store.id(IAM);//163邮箱需要,不然会报:A3 NO SELECT Unsafe Login. Please contact kefu@188.com for help |
|
78 |
Folder folder = null; |
|
79 |
try { |
|
80 |
// 获得收件箱 |
|
81 |
folder = store.getFolder("INBOX"); |
|
82 |
// 以读写模式打开收件箱 |
|
83 |
folder.open(Folder.READ_WRITE); |
|
84 |
folder.addMessageCountListener(new MessageCountListener() { |
|
85 |
@Override |
|
86 |
public void messagesAdded(MessageCountEvent e) { |
|
87 |
try { |
|
88 |
Message[] messages = e.getMessages(); |
|
89 |
for (int i = 0; i < messages.length; i++) { |
|
90 |
System.out.println("消息:" + messages[i].getSubject()); |
|
91 |
System.out.println("内容:" + messages[i].getContent()); |
|
92 |
String from = MimeUtility.decodeText(messages[i].getFrom()[0].toString()); |
|
93 |
InternetAddress internetAddress = new InternetAddress(from); |
|
94 |
System.out.println("发件人:" + internetAddress.getPersonal() + '(' + internetAddress.getAddress() + ')'); |
|
95 |
} |
|
96 |
System.out.println("Message Count Event Fired"); |
|
97 |
}catch (Exception ex){ |
|
98 |
ex.printStackTrace(); |
|
99 |
} |
|
100 |
} |
|
101 |
|
|
102 |
@Override |
|
103 |
public void messagesRemoved(MessageCountEvent e) { |
|
104 |
System.out.println("Message Count Event Fired"); |
|
105 |
} |
|
106 |
}); |
|
107 |
|
|
108 |
folder.addMessageChangedListener(new MessageChangedListener() { |
|
109 |
@Override |
|
110 |
public void messageChanged(MessageChangedEvent e) { |
|
111 |
System.out.println("Message Count Event Fired"); |
|
112 |
} |
|
113 |
}); |
|
114 |
// Check mail once in "freq" MILLIseconds |
|
115 |
int freq = 5000; |
|
116 |
boolean supportsIdle = false; |
|
117 |
try { |
|
118 |
if (folder instanceof IMAPFolder) { |
|
119 |
IMAPFolder f = (IMAPFolder) folder; |
|
120 |
f.idle(); |
|
121 |
supportsIdle = true; |
|
122 |
} |
|
123 |
} catch (FolderClosedException fex) { |
|
124 |
checkEmail(); |
|
125 |
throw fex; |
|
126 |
} catch (MessagingException mex) { |
|
127 |
supportsIdle = false; |
|
128 |
} |
|
129 |
for (; ; ) { |
|
130 |
System.out.println("run......"); |
|
131 |
if (supportsIdle && folder instanceof IMAPFolder) { |
|
132 |
IMAPFolder f = (IMAPFolder) folder; |
|
133 |
f.idle(); |
|
134 |
System.out.println("IDLE done"); |
|
135 |
} else { |
|
136 |
Thread.sleep(freq); // sleep for freq milliseconds |
|
137 |
System.out.println("sleep start......"); |
|
138 |
// This is to force the IMAP server to send us |
|
139 |
// EXISTS notifications. |
|
140 |
int messageCount = folder.getNewMessageCount(); |
|
141 |
System.out.println("messageCount......"+messageCount); |
|
142 |
} |
|
143 |
} |
|
144 |
} catch (FolderClosedException fe) { |
|
145 |
System.out.println("FolderClosedException......"); |
|
146 |
checkEmail(); |
|
147 |
|
|
148 |
} |
|
149 |
catch (Exception e) { |
|
150 |
throw new RuntimeException(e); |
|
151 |
} finally { |
|
152 |
try { |
|
153 |
if (folder != null) { |
|
154 |
folder.close(false); |
|
155 |
} |
|
156 |
if (store != null) { |
|
157 |
store.close(); |
|
158 |
} |
|
159 |
} catch (MessagingException e) { |
|
160 |
throw e; |
|
161 |
} |
|
162 |
} |
|
163 |
}catch (Exception e){ |
|
164 |
e.printStackTrace(); |
|
165 |
} |
707f3d
|
166 |
} |
F |
167 |
public static void ReceiveEmail() throws MessagingException, IOException { |
|
168 |
|
|
169 |
String imapServer = "imap.qq.com"; |
18553a
|
170 |
String user = "xxxxx@qq.com";//邮箱 |
F |
171 |
String pwd ="xxxxx";//密码 |
707f3d
|
172 |
|
F |
173 |
HashMap IAM = new HashMap(); |
|
174 |
//带上IMAP ID信息,由key和value组成,例如name,version,vendor,support-email等。 |
|
175 |
IAM.put("name","myname"); |
|
176 |
IAM.put("version","1.0.0"); |
|
177 |
IAM.put("vendor","myclient"); |
|
178 |
IAM.put("support-email","testmail@test.com"); |
|
179 |
//创建会话 |
|
180 |
Session session = Session.getInstance(new Properties(), new Authenticator() { |
|
181 |
@Override |
|
182 |
protected PasswordAuthentication getPasswordAuthentication() { |
|
183 |
return new PasswordAuthentication(user,pwd); |
|
184 |
} |
|
185 |
}); |
|
186 |
//存储对象 |
18553a
|
187 |
IMAPStore store = (IMAPStore) session.getStore("imaps"); |
707f3d
|
188 |
//连接 |
F |
189 |
store.connect(imapServer,user,pwd); |
|
190 |
store.id(IAM);//163邮箱需要,不然会报:A3 NO SELECT Unsafe Login. Please contact kefu@188.com for help |
|
191 |
Folder folder = null; |
|
192 |
try { |
|
193 |
// 获得收件箱 |
|
194 |
folder = store.getFolder("INBOX"); |
|
195 |
// 以读写模式打开收件箱 |
|
196 |
folder.open(Folder.READ_WRITE); |
|
197 |
//false 表示未读 |
|
198 |
FlagTerm flagTerm = new FlagTerm(new Flags(Flags.Flag.SEEN),true); |
|
199 |
//获得收件箱的邮件列表 |
|
200 |
Message[] messages = folder.search(flagTerm); |
|
201 |
// 打印不同状态的邮件数量 |
|
202 |
System.out.println("收件箱中共" + messages.length + "封邮件!"); |
|
203 |
System.out.println("收件箱中共" + folder.getUnreadMessageCount() + "封未读邮件!"); |
|
204 |
System.out.println("收件箱中共" + folder.getNewMessageCount() + "封新邮件!"); |
|
205 |
System.out.println("收件箱中共" + folder.getDeletedMessageCount() + "封已删除邮件!"); |
|
206 |
|
|
207 |
System.out.println("------------------------开始解析邮件----------------------------------"); |
|
208 |
|
|
209 |
for (int i = 0; i < messages.length; i++) { |
|
210 |
System.out.println("消息:"+messages[i].getSubject()); |
|
211 |
System.out.println("内容:"+messages[i].getContent()); |
|
212 |
String from = MimeUtility.decodeText(messages[i].getFrom()[0].toString()); |
|
213 |
InternetAddress internetAddress = new InternetAddress(from); |
|
214 |
System.out.println("发件人:" + internetAddress.getPersonal() + '(' + internetAddress.getAddress() + ')'); |
|
215 |
} |
|
216 |
|
|
217 |
} catch (NoSuchProviderException e) { |
|
218 |
e.printStackTrace(); |
|
219 |
} catch (MessagingException e) { |
|
220 |
e.printStackTrace(); |
|
221 |
} finally { |
|
222 |
try { |
|
223 |
if (folder != null) { |
|
224 |
folder.close(false); |
|
225 |
} |
|
226 |
if (store != null) { |
|
227 |
store.close(); |
|
228 |
} |
|
229 |
} catch (MessagingException e) { |
|
230 |
e.printStackTrace(); |
|
231 |
} |
|
232 |
} |
|
233 |
|
|
234 |
} |
|
235 |
} |
|
236 |
|