用pop3收取gmail的邮件

本文介绍了一个使用Java实现的定时任务,该任务每15分钟通过POP3协议检查并获取Gmail邮箱中的新邮件。利用java.util.TimerTask和java.util.Timer类实现定时功能,通过javax.mail.Session和Store获取邮件。
摘要由CSDN通过智能技术生成

用Pop3收取gmail的邮件

问题描述:

用pop3收取gmail的邮件  入口参数:  用户名 / 密码  做一个线程,每15分钟检查一次邮箱,收取邮箱的邮件,并解码后将标题显示出来
当我看完问题后,灵机一动,马上想到用 java.util.TimerTask java.util.Timer 类实现是最合适不过 , 虽然用线程也可以 , 可是会付出一些不必要的劳动 ;并且TimerTask类也是依靠线程来实现功能的
代码如下:
java 代码
测试类:       import java.util.*;       public class Test{                public static void main(String[] args)throws Exception{                        MailTimerTask task=new MailTimerTask();            Timer mailTimer=new Timer();            mailTimer.schedule(task,2000,15*60*1000);        }    }          import java.util.*;    import java.io.UnsupportedEncodingException;    import java.security.*;    import java.util.Properties;    import javax.mail.*;    import javax.mail.internet.InternetAddress;    import javax.mail.internet.MimeUtility;    import java.lang.RuntimeException;       public class MailTimerTask extends TimerTask{                private static Store store=null;                //静态初始化模块        //保证后台只存在一个Store 连接        static{            try{                        connect("@mailName","@mailPassword");                        }catch(Exception e){                e.printStackTrace();            }        }                        public void run(){            try{                        System.out.println("正在读取邮箱");                        this.printNewMails(this.getNewMails("@mailName","mailPassword"));                        }catch(Exception e){                e.printStackTrace();            }        }                public static void connect(String mailName,String mailPassword)throws Exception{                         Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());             final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";             Properties props = System.getProperties();             props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);             props.setProperty("mail.pop3.socketFactory.fallback""false");             props.setProperty("mail.pop3.port""995");             props.setProperty("mail.pop3.socketFactory.port""995");             Session session = Session.getDefaultInstance(props,null);             URLName urln = new URLName("pop3","pop.gmail.com",995,null, mailName,mailPassword);             store = session.getStore(urln);             store.connect();        }                public Message[] getNewMails(String mailName,String mailPassword)throws Exception{                        //当Store实例没有存在连接时            if(store.isConnected()){                              connect(mailName,mailPassword);                            }                                                            Folder inbox = store.getFolder("INBOX");                inbox.open(Folder.READ_ONLY);                FetchProfile profile = new FetchProfile();                profile.add(FetchProfile.Item.ENVELOPE);                                //假定存在没有阅读的邮件为新邮件                if(inbox.getUnreadMessageCount()>0){                                        int fetchCount=inbox.getMessageCount()-inbox.getUnreadMessageCount();                                        if(fetchCount==0){                        return inbox.getMessages();                    }                    Message[] messages = inbox.getMessages(1,2);                                        return messages;                }                else{                                        System.out.println("不存在新邮件");                    throw new RuntimeException("不存在新邮件");                }                                                   }                public void printNewMails(Message[] msgs)throws Exception{                            for(Message msg:msgs){                                        String text=msg.getSubject();                                    if (text == null)                    System.out.println("该邮件无题");                else if (text.startsWith("=GBK") || text.startsWith("=gb2312"))                   text = MimeUtility.decodeText(text);                else                  text = new String(text.getBytes("gb2312"));                                      System.out.println("--"+text);                                }            }    }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值