51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Java使用mail.jar收邮件,邮件顺序从新到旧

使用mail.jar包,直接网上找资源下载。

代码:

public String receiveMail() throws MessagingException, IOException{

    	//定义连接POP3服务器的属性信息
        String pop3Server = "imap.exmail.qq.com";//这里写的是腾讯企业邮箱的
        String protocol = "pop3";
        String username = "邮箱地址";
        String password = "邮箱密码"; //QQ邮箱的SMTP的授权码,什么是授权码,它又是如何设置?

        Properties props = new Properties();
        props.setProperty("mail.transport.protocol", protocol); //使用的协议(JavaMail规范要求)
        props.setProperty("mail.smtp.host", pop3Server); //发件人的邮箱的 SMTP服务器地址
        //获取连接
        Session session = Session.getDefaultInstance(props);
        session.setDebug(false);
        //获取Store对象
        Store store = session.getStore(protocol);
        store.connect(pop3Server, username, password); //POP3服务器的登陆认证
        //通过POP3协议获得Store对象调用这个方法时,邮件夹名称只能指定为"INBOX"
        Folder folder = store.getFolder("INBOX");//获得用户的邮件帐户
        folder.open(Folder.READ_WRITE); //设置对邮件帐户的访问权限

        Message[] messages = folder.getMessages();//得到邮箱帐户中的所有邮件
        System.out.println("收件箱邮件数量:" + messages.length );
        
        String xx="";
    	//邮件按从新到旧
        for (int j = messages.length-1; j>=0; j--) {
        	MimeMessage mimeMessage = (MimeMessage) messages[j]; 
        	
        	String from=(mimeMessage.getFrom()[0])+"";
        	String subject=mimeMessage.getSubject();
        	//String messageid=mimeMessage.getMessageID();
        	Date sentdate=mimeMessage.getSentDate();
        	String contentid=mimeMessage.getContentID();
        	Object content=mimeMessage.getContent();
        	long mail_time=sentdate.getTime();
        	
    		//可以直接写入到文件中
        	//OutputStream os = new FileOutputStream(new File("E:/mail-2021.eml"));
        	//mimeMessage.writeTo(os);
        	
        	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        	String mail_datetime=sdf.format(sentdate);
        	
        	//eg: =?gb180dfd5456bnl1?= <xxx@mail.com>
        	from=from.replaceAll("[^<>]+<", "");
        	from=from.replaceAll(">", "");
        	
        	System.out.println("发件人:" + from);
        	System.out.println("邮件标题:" + subject);
        	//System.out.println("*" + messageid);
        	System.out.println("邮件时间:" + sentdate +",毫秒数:" + sentdate.getTime() );
        	//System.out.println("*" + contentid);
        	System.out.println("内容:" + content);
        	
        	//60*60*24*2*1000
        	//new Date().getTime()- sentdate.getTime() > 60*60*29*1000
        	//最近5小时的
        	if(new Date().getTime() - sentdate.getTime() > 60*60*5*1000 ){
        		System.out.println("后面的邮件不看了");
        		break;
        	}
        	
        	//System.out.println("=====" +  content.getClass() );
        	
        	String content_html="";
        	if(content.getClass().toString().indexOf("MimeMultipart") == -1){
        		content_html=content+"";
        	}
        	
        	//得到邮件的Multipart(内容总部件)
    		try {
    			Multipart multipart = (Multipart) mimeMessage.getContent();
    			int count = multipart.getCount();//部件个数
    			System.out.println("个数:" + count);
    			
    			for(int i=0; i<count; i++) {
    				//单个部件  注意:单个部件有可能又为一个Multipart,层层嵌套
    				BodyPart part = multipart.getBodyPart(i);
    				//单个部件类型
    				String type = part.getContentType().split(";")[0];
    				System.out.println("type:" +  type);
    				/**
    				 * 类型众多,逐一判断,其中TEXT、HTML类型可以直接用字符串接收,其余接收为内存地址
    				 * 可能不全,如有没判断住的,请自己打印查看类型,在新增判断
    				 */
    				if(type.equals("multipart/alternative")) { //HTML(文本和超文本组合)
    					System.out.println("超文本:" + part.getContent().toString());
    					content_html=part.getContent().toString();
    				}else if(type.equals("text/plain")) {    //纯文本
    					System.out.println("纯文本:" + part.getContent().toString());
    					content_html=part.getContent().toString();
    				}else if(type.equals("text/html")){    //HTML标签元素
    					System.out.println("HTML元素:" + part.getContent().toString());
    					content_html=part.getContent().toString();
    				}else if(type.equals("multipart/related")){    //内嵌资源 (包涵文本和超文本组合)
    					System.out.println("内嵌资源:" + part.getContent().toString());
    					content_html=part.getContent().toString();
    				}else if(type.contains("application/")) {        //应用附件 (zip、xls、docx等)
    					System.out.println("应用文件:" + part.getContent().toString());
    				}else if(type.contains("image/")) {            //图片附件 (jpg、gpeg、gif等)
    					System.out.println("图片文件:" + part.getContent().toString());
    				}
    				
    				/**
    				 * 获取超文本复合内容
    				 * 他本是又是一个Multipart容器
    				 * 此时邮件会分为TEXT(纯文本)正文和HTML正文(HTML标签元素)
    				 */
    				if(type.equals("multipart/alternative")) {
    					Multipart m = (Multipart) part.getContent();
    					for (int k=0; k<m.getCount(); k++) {
    						if(m.getBodyPart(k).getContentType().startsWith("text/plain")) {
    							//处理文本正文
    							//System.out.println("TEXT文本内容:"+"\n" + m.getBodyPart(k).getContent().toString().trim()+"\n");
    							content_html +=m.getBodyPart(k).getContent().toString().trim() + "";
    						} else {
    							//处理 HTML 正文
    							//System.out.println("HTML文本内容:"+"\n" + m.getBodyPart(k).getContent()+"\n");
    							content_html +=m.getBodyPart(k).getContent() + "";
    						}
    					}
    				}
    				
    			}
    			
    		} catch (Exception e1) {
    			// TODO Auto-generated catch block
    			//e1.printStackTrace();
    			System.out.println("异常:" + e1.toString());
    		}
        	
    		System.out.println("邮件内容:" + content_html);
        	System.out.println("********************************");
        	try {
    			Thread.sleep(2000);
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
        
        /*
        for (Message message : messages) {
            String subject = message.getSubject();// 获得邮件主题
            Address from = (Address) message.getFrom()[0];// 获得发送者地址
            System.out.println("邮件的主题为: " + subject + "\t发件人地址为: " + from);
            System.out.println("邮件的内容为:");
            message.writeTo(System.out);// 输出邮件内容到控制台
        }
         */
        
        folder.close(false);// 关闭邮件夹对象
        store.close(); // 关闭连接对象
        
        return xx;
    }</code></pre>

赞(0)
未经允许不得转载:工具盒子 » Java使用mail.jar收邮件,邮件顺序从新到旧