fs-danaus
9 天以前 18553a7798e5e9947acd13d1bfdf16c0e78c8ed1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
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();
            }
        }
 
    }
}