`

java imap 邮件接收

阅读更多

package com.ckn.web.main;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Properties;

import javax.mail.Flags.Flag;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.MimeUtility;

import com.sun.mail.imap.IMAPMessage;
import com.sun.mail.util.BASE64DecoderStream;

public class ImapPullMail {
    
    public static void main(String[] args) throws Exception{
        //0、各种连接配置
        Properties props=new Properties();
        props.setProperty("mail.store.protocol", "imap");
        props.setProperty("mail.imap.host", "imap.163.com");
        props.setProperty("mail.imap.port", "143");
        
        //1、创建Session实例对象
        Session session=Session.getInstance(props);
        
        //2、创建IMAP协议的Store对象
        Store imapStore=session.getStore("imap");
        
        //3、连接邮件服务器
        imapStore.connect("12456kcc@163.com", "snsjxnsdfsxd45");
        
        //4、获得收件箱
        Folder folder=imapStore.getFolder("INBOX");
        
        //5、以读写的方式打开收件箱
        folder.open(Folder.READ_WRITE);
        
        //6、获得收件箱的邮件列表
        Message[] messages=folder.getMessages();
        
        //7、收件箱的状态//
        System.out.println("收件箱中共"+messages.length+"封邮件!");
        System.out.println("收件箱中共"+folder.getUnreadMessageCount()+"封未读邮件!");
        System.out.println("收件箱中共"+folder.getNewMessageCount()+"封新邮件!");
        System.out.println("收件箱中共"+folder.getDeletedMessageCount()+"封已删除邮件!");
        
        //8、解析邮件箱邮件
        System.out.println("***************");
        for(Message message:messages){
            //读过的略过
            if(message.getFlags().contains(Flag.SEEN)) continue;
            
            System.out.println("***********************");
            IMAPMessage imapMsg=(IMAPMessage) message;
            String subject=MimeUtility.decodeText(imapMsg.getSubject());
            
            System.out.println("当前邮件 标题:"+subject);
            //imapMsg.writeTo(System.out);
            //获取邮件外包装  ,  包括多个邮件内容块 , 业务场景是 转发的内容 用到这个结构
            //Multipart multipart=(Multipart) message.getContent();
            Object wrapContent=message.getContent();
            if(wrapContent instanceof Multipart){
                System.out.println("包含多个块");
                Multipart outMultipart=(Multipart) wrapContent;
                int partCount=outMultipart.getCount();
                
                for(int i=0;i<partCount;i++){
                    // Part 类似Message 的东西
                    Part nPart=outMultipart.getBodyPart(i);
                    Object nContent=nPart.getContent();

                    //System.out.println(nContent.getClass().getInterfaces());
                    //遍历 邮件内容  块(可能直接是文本块 、文本 HTML块 、或者附件块...通常情况下是文本块 、文本HTML块和附件块 )
                    if(nContent instanceof Multipart){
                        //对文本HTML块的处理
                        Multipart nMultipart=(Multipart) nContent;
                        int nPartCount=nMultipart.getCount();
                        for(int k=0;k<nPartCount;k++){
                            Part nnPart=nMultipart.getBodyPart(k);
                            System.out.println("内容类型: "+nnPart.getContentType());
                            System.out.println("小包裹内容: "+nnPart.getContent());
                        }
                        
                    }else if(nContent instanceof BASE64DecoderStream){    
                        //对附件块的处理
                        String disposition=nPart.getDisposition();
                        if(disposition!=null){
                            String fileName=MimeUtility.decodeText(nPart.getFileName());
                            String contentType=MimeUtility.decodeText(nPart.getContentType());
                            
                            System.out.println("i:"+i+" "+"fileName->"+fileName
                                    +"\ncontentType->"+contentType);
                            
                            InputStream in=nPart.getInputStream();
                            FileOutputStream out=new FileOutputStream("D:\\Users\\jxn\\Desktop\\TRANSFILE\\"+fileName);
                            
                            int len;
                            byte[] readBytes=new byte[1024];
                            while((len=in.read(readBytes))!=-1){
                                out.write(readBytes,0,len);
                            }
                            
                            out.close();
                            in.close();
                            System.out.println("文件下载完成");
                        }
                    }else{
                        //直接文本块的处理
                        System.out.println("i:"+i+" "+nContent.getClass().getName());
                        System.out.println(nContent);
                    }
                }
            }else{
                System.out.println("纯文本邮件");
                System.out.println(message.getContent());
            }
            
            imapMsg.setFlag(Flag.SEEN, false); //这段代码一定要放在后面执行,服务器默认拉取后就将邮件设为已读了,如放在前面,在拉取数据后就被默认改成读过状态了,故一定要放在读过后执行; 该方法作用: 设置已读标志  第二个参数如果设置为true,则将修改反馈给服务器。false则不反馈给服务器
            System.out.println("*********************************************");
            
        }
        
        //9、关闭资源
        folder.close(true);
        imapStore.close();
    }

}

分享到:
评论

相关推荐

    javamail通过imap协议收取邮件(Exchange2007)

    JavaMail是一种开源的Java库,它允许开发人员在Java应用程序中发送和接收电子邮件。IMAP(Internet Message Access Protocol)是一种标准的邮件访问协议,用于从邮件服务器检索邮件。Exchange 2007是微软的企业级...

    java收发邮件完整版

    这个"java收发邮件完整版"项目提供了一个完整的Java邮件发送和接收的解决方案,确保用户可以顺利地通过编程方式处理电子邮件。在这个压缩包中,可能包含了一个或多个Java源代码文件,例如"71112303梁洁"和"71112418...

    基于java的邮件收发Java源码

    1. JavaMail API:JavaMail API是Java平台上的一个标准接口,用于处理邮件协议,如SMTP(简单邮件传输协议)、POP3(邮局协议版本3)和IMAP(因特网消息访问协议)。它提供了一套完整的类和接口,使得开发者可以方便...

    java邮件收发系统

    对于邮件接收,JavaMail API同样提供了解析POP3或IMAP服务器上邮件的功能。通过Folder对象可以打开邮箱,Message对象则用于表示单个邮件。开发者可以遍历Message对象,获取邮件的各种属性,如发件人、接收时间、主题...

    smtp pop3 imap 邮件命令

    本文将深入探讨这三种协议的工作原理、命令集以及如何进行邮件的发送、接收和管理。 SMTP是用于在邮件服务器之间传输邮件的标准协议。它定义了如何从一个邮件服务器向另一个邮件服务器发送邮件的过程。SMTP命令通常...

    java邮件收发系统源码

    Java邮件收发系统是一种基于Java技术实现的电子邮件应用程序,它能够帮助用户发送、接收和管理电子邮件。这个系统的核心是利用JavaMail API,一个强大的库,为开发者提供了在Java环境中处理邮件的标准接口。本文将...

    JAVA基于JAVA的电子邮件接收系统论文

    在本篇论文中,我们将深入探讨如何利用Java技术构建一个基于Java的电子邮件接收系统。Java是一种广泛应用于开发各种软件和网络应用的高级编程语言,其跨平台性、丰富的类库和强大的网络支持使得它成为构建电子邮件...

    基于Java_Mail的电子邮件收发系统

    基于Java_Mail的电子邮件收发系统是指使用Java_Mail API来实现电子邮件的发送和接收的系统。 Java_Mail是Java平台上的一种邮件处理API,它提供了一个统一的接口来访问各种类型的邮件服务器。 1.1 研究目的和意义 ...

    Java 邮件收发系统工程源代码

    在邮件接收方面,`Store`类扮演了关键角色。开发者可以使用它来连接到POP3或IMAP服务器,并打开一个邮箱。`Folder`对象代表了邮箱中的文件夹,如"收件箱"、"已发送"等。`Folder`中的`Message`对象则代表了具体的邮件...

    JAVA源码Javamail的邮件收发系统源码/文档

    - **邮件接收**:连接至邮件服务器(如IMAP/POP3),通过`Folder`对象获取邮件列表。 - **多线程处理**:为了提高效率,可以在后台异步处理邮件发送和接收任务。 - **安全性考虑**:在连接邮件服务器时应使用加密...

    java收发邮件的客户端

    Java邮件客户端是使用Java编程语言实现的用于发送和接收电子邮件的应用程序。在Java中,我们主要依靠JavaMail API(Java Mail Application Programming Interface)来处理邮件的收发功能,包括附件的处理。JavaMail ...

    基于Java的邮件收发系统源码.zip

    POP3和IMAP4是两种常见的邮件接收协议。POP3允许用户下载服务器上的邮件并删除它们,适合只需要本地存储邮件的场景。而IMAP4则允许用户在服务器上管理和检索邮件,支持多客户端同步,更适合需要在不同设备上访问邮件...

    java写的收发邮件程序

    在Java编程领域,收发邮件是一项常见的任务,尤其对于企业级应用来说,它可能是系统功能的一部分,例如自动发送通知、报告或接收用户反馈。本文将深入讲解如何使用Java进行网络编程,实现邮件的发送和接收功能。 ...

    javamail实现邮件收发和加密

    JavaMail 是一个开源的 Java API,它允许开发者在 Java 应用程序中添加电子邮件功能,包括发送、接收邮件以及管理邮箱。在这个主题中,我们将深入探讨如何使用 JavaMail 实现邮件的加密和解密,以及如何进行邮件的...

    使用java简单实现基于smtp协议的邮件收发

    对于邮件接收,JavaMail API 同样提供了 `Store` 接口。你需要连接到 POP3(Post Office Protocol)或 IMAP(Internet Message Access Protocol)服务器,然后打开并读取邮箱中的邮件。 然而,描述中提到,此代码...

    java实现邮件发送(三种发送方式都有)

    JavaMail API是Java中用于处理电子邮件的标准库,包括了发送邮件、接收邮件等功能。要发送普通邮件,你需要设置SMTP服务器地址、端口、用户名和密码,然后创建`Message`对象并设置发件人、收件人、主题和正文,最后...

    java邮件系统-javaweb项目

    JavaMail API是一个开放源码的Java库,它可以与各种邮件服务器(如SMTP、POP3、IMAP)进行交互,实现邮件的创建、发送、接收和管理。开发者需要配置SMTP服务器的相关参数,如主机名、端口号、用户名和密码,以便通过...

    java 收取邮件 pop3协议和imap协议都支持

    全功能java收取邮件程序,包括收取附件,含有main方法可以测试,pop3协议和imap协议都支持 Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null); Store ...

Global site tag (gtag.js) - Google Analytics