• 2024-04-26
宇哥博客 后端开发 Java使用mail.jar收邮件,邮件顺序从新到旧

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;
	}
本文来自网络,不代表本站立场,转载请注明出处。http://www.ygbks.com/1184.html

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部