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    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
主要功能: 1、可以发送带附件的邮件,附件可以是多个,附件大小限制由发送方服务器而定,暂未测试具体为多少MB 2、邮件内容和主题可以是空,但当有附件时,主题取第一个附件的文件名(不含扩展名) 3、密码验证均为base64加密 4、邮件正文和附件的数据传送方式,均为base64 5、自动解析发件箱的SMTP服务器 压缩包文件简介: base.c:包含一些基本的函数,其中有一些在此程序中并未用到,只要使用了其中的base64加密算法 mail.c:包含邮件发送、数据读取、编码转换、smtp服务器连接、ip解析等函数 mailsend.c:包含main的c源文件,mail.exe则是根据mailsend.c、mail.c、base.c编译成的,具体编译方 法可参考makefile libbase.a:make之后生成的静态库 moontalk.cfg:base.c用到的配置文件,可能没用,放在这里进攻阅读参考 mail.cfg:自定义用户的配置文件,可用可不用,用作读代码的参考 mail.exe:邮件发送的执行文件,仅有命令行模式完善了,逐步输入(直接双击)的方式还不完善 b64.exe:base64加密解密的小工具,仅供参考,mail.cfg中用到密码的地方,可以使这个工具得到。 makefile:工程编译链接文件 注意:在本地使用mingw环境开发,遵循ANSI C标准,本地有系统的工程库,但是上传的时候,把这些文件 都放在一起了,可以先参考makefile进行工程调整,如果有任何问题,请发送到邮箱moontalk@yeah.net, 技术交流,不胜感激。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值