• 收邮件


    package com.company;
    
    import com.sun.mail.pop3.POP3SSLStore;
    
    import javax.mail.*;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeUtility;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.util.Properties;
    
    public class Main {
    
        public static void main(String[] args) throws MessagingException, IOException {
        // write your code here   ktkiullzhexbhfgb
    
            /*
            发邮件使用的协议:SMTP  接收邮件使用的协议:POP3(标准端口110,加密端口995)  或者IMAP(标准端口143,加密端口993) 区别是后者“权限”更多一点点
            第一步:导包,mail.jar
            第二步:准备登陆信息
            第三步:协议相关配置
            第四步:启动SSL(Secure Sockets Layer 安全套接字协议)
            第五步:连接到Store(即MDA服务器)
            第六步:获取收件箱INBOX,存储了所有的接收的邮件
            第七步:对某个邮件对象做处理--查看信息
             */
            String host="pop.qq.com";//服务器地址,对不对,ping一下测试通不通
            int port=995;//端口
            String username="QQ号@qq.com";//登陆邮箱账号
            String password="ktkiullzhexbhfff";//登陆邮箱授权码,不是密码哦
    
            Properties props=new Properties();
            props.setProperty("mail.store.protocol","pop3");//设置协议名称
            props.setProperty("mail.pop3.host",host);//设置服务器主机名
            props.setProperty("mail.pop3.port",String.valueOf(port));
    
            props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
            props.put("mail.smtp.socketFactory.port",String.valueOf(port));
    
            URLName url=new URLName("pop3",host,port,"",username,password);
            Session session=Session.getInstance(props,null);
            //session.setDebug(true);
            Store store=new POP3SSLStore(session,url);
            store.connect();//store对像映射邮件存储,接收邮件就是从store上拿东西到我们自己的邮箱软件(MUA)
    
            //通过store对象,获取邮件箱(本质上就是个文件夹)
            Folder folder=store.getFolder("INBOX");
            //读写方式打开
            folder.open(Folder.READ_WRITE);
            //查看邮件总数、新邮件数,未读数,已删除数
            System.out.println("总数:"+folder.getMessageCount());
            System.out.println("新邮件数:"+folder.getNewMessageCount());
            System.out.println("未读数:"+folder.getUnreadMessageCount());
            System.out.println("已删除数:"+folder.getDeletedMessageCount());
            //遍历所有邮件
            Message[] messages=folder.getMessages();
            for(Message mess:messages){
                //打印查看每一封邮件,额外找个小弟来做
                printMessage((MimeMessage) mess);
                System.out.println(getBody((MimeMessage) mess));//这个嘛,获取的是网页html标签内容,以后再优化只获取邮件内容咳咳
            }
    
            folder.close(true);//true:如果有删除操作会同步删除服务器上的,false的话就只删MUA上的
            store.close();
    
        }
    
        /**
         * 获取邮件的头信息,发件人,收件人信息等
         * @param msg
         * @throws MessagingException
         * @throws UnsupportedEncodingException
         */
        public static  void printMessage(MimeMessage msg) throws MessagingException, UnsupportedEncodingException {
            //邮件主题
            System.out.println("主题Subject:"+ MimeUtility.decodeText(msg.getSubject()));;
            //发件人
            Address[] froms=msg.getFrom();
            InternetAddress address= (InternetAddress) froms[0];
            String personal=address.getPersonal();
            String from=personal==null?address.getAddress():(MimeUtility.decodeText(personal)+"<"+address.getAddress()+">");
            System.out.println("From:"+from);
        }
        public static String getBody(Part part) throws IOException, MessagingException {
            if(part.isMimeType("text/*")){
                //如果part是文本
                return part.getContent().toString();
            }
            if(part.isMimeType("multipart/*")){
                //如果part是一个Multipart对象
                Multipart multipart= (Multipart) part.getContent();
                //循环解析每个子part
                for(int i=0;i<multipart.getCount();i++){
                    BodyPart bodyPart=multipart.getBodyPart(i);
                    String body=getBody(bodyPart);
                    if(!body.isEmpty()){
                        return body;
                    }
                }
            }
            return "";
        }
    }
  • 相关阅读:
    Java多线程:线程与进程
    Java多线程:线程间通信之volatile与sychronized
    Java基础:内存模型
    Windows10 ubuntu子系统的启用即基础配置
    Java基础:Java虚拟机(JVM)
    前序,中序,后序问题
    Java枚举enum以及应用:枚举实现单例模式
    Java外部类可以访问内部类private变量
    Java单例模式(Singleton)以及实现
    Java构造器:级联调用,调用兄弟构造器
  • 原文地址:https://www.cnblogs.com/hebiao/p/14452240.html
Copyright © 2020-2023  润新知