收邮件

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 "";
    }
}

 

posted on 2021-02-26 14:39  刀锋93  阅读(119)  评论(0编辑  收藏  举报

导航