xinyb
9 天以前 b7ef4bb09e69ba27c29ea06a7f348f753c530a44
提交 | 用户 | 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