POP3_使用SSL链接邮箱并获取邮件

Gmail目前已经启用了POP3和SMTP服务,与其他邮箱不同的是Gmail提供的POP3和SMTP是使用安全套接字层SSL的,因此常规的JavaMail程序是无法收发邮件的,下面是使用JavaMail如何收取Gmail邮件以及发送邮件的代码:
1. [代码]GmailFetch.java     跳至 [1] [2] [全屏预览]
01    package lius.javamail.ssl;    
02         
03    import java.io.UnsupportedEncodingException;    
04    import java.security.*;    
05    import java.util.Properties;    
06    import javax.mail.*;    
07    import javax.mail.internet.InternetAddress;    
08    import javax.mail.internet.MimeUtility;    
09         
10    /**    
11     * 用于收取Gmail邮件    
12     * @author Winter Lau    
13     */    
14    public class GmailFetch {    
15          
16     public static void main(String argv[]) throws Exception {    
17         
18      Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());    
19      final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";    
20         
21      // Get a Properties object    
22      Properties props = System.getProperties();    
23      props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);    
24      props.setProperty("mail.pop3.socketFactory.fallback", "false");    
25      props.setProperty("mail.pop3.port", "995");    
26      props.setProperty("mail.pop3.socketFactory.port", "995");    
27         
28      //以下步骤跟一般的JavaMail操作相同    
29      Session session = Session.getDefaultInstance(props,null);    
30         
31      //请将红色部分对应替换成你的邮箱帐号和密码    
32      URLName urln = new URLName("pop3","pop.gmail.com",995,null,    
33        "[邮箱帐号]", "[邮箱密码]");    
34      Store store = session.getStore(urln);    
35      Folder inbox = null;    
36      try {    
37       store.connect();    
38       inbox = store.getFolder("INBOX");    
39       inbox.open(Folder.READ_ONLY);    
40       FetchProfile profile = new FetchProfile();    
41       profile.add(FetchProfile.Item.ENVELOPE);    
42       Message[] messages = inbox.getMessages();    
43       inbox.fetch(messages, profile);    
44       System.out.println("收件箱的邮件数:" + messages.length);    
45       for (int i = 0; i < messages.length; i++) {    
46        //邮件发送者    
47        String from = decodeText(messages[i].getFrom()[0].toString());    
48        InternetAddress ia = new InternetAddress(from);    
49        System.out.println("FROM:" + ia.getPersonal()+'('+ia.getAddress()+')');    
50        //邮件标题    
51        System.out.println("TITLE:" + messages[i].getSubject());    
52        //邮件大小    
53        System.out.println("SIZE:" + messages[i].getSize());    
54        //邮件发送时间    
55        System.out.println("DATE:" + messages[i].getSentDate());    
56       }    
57      } finally {    
58       try {    
59        inbox.close(false);    
60       } catch (Exception e) {}    
61       try {    
62        store.close();    
63       } catch (Exception e) {}    
64      }    
65     }    
66          
67     protected static String decodeText(String text)    
68       throws UnsupportedEncodingException {    
69      if (text == null)    
70       return null;    
71      if (text.startsWith("=?GB") || text.startsWith("=?gb"))    
72       text = MimeUtility.decodeText(text);    
73      else    
74       text = new String(text.getBytes("ISO8859_1"));    
75      return text;    
76     }    
77         
78    }    
2. [代码]GmailSender.java     
01    package lius.javamail.ssl;    
02         
03    import java.security.Security;    
04    import java.util.Date;    
05    import java.util.Properties;    
06         
07    import javax.mail.Authenticator;    
08    import javax.mail.Message;    
09    import javax.mail.MessagingException;    
10    import javax.mail.PasswordAuthentication;    
11    import javax.mail.Session;    
12    import javax.mail.Transport;    
13    import javax.mail.internet.AddressException;    
14    import javax.mail.internet.InternetAddress;    
15    import javax.mail.internet.MimeMessage;    
16         
17    /**    
18     * 使用Gmail发送邮件    
19     * @author Winter Lau    
20     */    
21    public class GmailSender {    
22         
23     public static void main(String[] args) throws AddressException, MessagingException {    
24      Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());    
25      final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";    
26      // Get a Properties object    
27      Properties props = System.getProperties();    
28      props.setProperty("mail.smtp.host", "smtp.gmail.com");    
29      props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);    
30      props.setProperty("mail.smtp.socketFactory.fallback", "false");    
31      props.setProperty("mail.smtp.port", "465");    
32      props.setProperty("mail.smtp.socketFactory.port", "465");    
33      props.put("mail.smtp.auth", "true");    
34      final String username = "[邮箱帐号]";    
35      final String password = "[邮箱密码]";    
36      Session session = Session.getDefaultInstance(props, new Authenticator(){    
37          protected PasswordAuthentication getPasswordAuthentication() {    
38              return new PasswordAuthentication(username, password);    
39          }});    
40         
41           // -- Create a new message --    
42      Message msg = new MimeMessage(session);    
43         
44      // -- Set the FROM and TO fields --    
45      msg.setFrom(new InternetAddress(username + "@mo168.com"));    
46      msg.setRecipients(Message.RecipientType.TO,    
47        InternetAddress.parse("[收件人地址]",false));    
48      msg.setSubject("Hello");    
49      msg.setText("How are you");    
50      msg.setSentDate(new Date());    
51      Transport.send(msg);    
52           
53      System.out.println("Message sent.");    
54     }    
55    }

 

posted @ 2015-03-24 14:09  GisClub  阅读(1464)  评论(0编辑  收藏  举报