使用javax.mail通过imap协议获取163邮箱信息,并根据Message-ID找到对应邮件

本文介绍了如何使用Java的javax.mail库通过IMAP连接163邮箱,获取指定Message-ID的邮件,包括发送时间、主题和内容。
摘要由CSDN通过智能技术生成
import com.sun.mail.imap.IMAPFolder;
import com.sun.mail.imap.IMAPStore;

import javax.mail.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.Properties;

//获取邮件信息
public class tes {

    public static void main(String[] args) {
        // 邮件配置信息
        //POP3服务器: pop.163.com
        //SMTP服务器: smtp.163.com
        //IMAP服务器: imap.163.com
        String user = "邮箱账号";//邮箱账号
        String password = "imap授权码";//imap授权码
        String messageId = "要查询的邮件的 Message-ID"; // 要查询的邮件的 Message-ID

        // 创建会话
        Properties prop = System.getProperties();
        prop.put("mail.store.protocol", "imap");
        prop.put("mail.imap.host", "imap.163.com");
        prop.put("mail.smtp.auth", "true");
        //这部分就是解决异常的关键所在,设置IAMP ID信息
        HashMap IAM = new HashMap();
        //带上IMAP ID信息,由key和value组成,例如name,version,vendor,support-email等。
        // 这个value的值随便写就行
        IAM.put("name", "myname");
        IAM.put("version", "1.0.0");
        IAM.put("vendor", "myclient");
        IAM.put("support-email", "testmail@test.com");
        Session session = Session.getInstance(prop);

        try {
            // 使用imap会话机制,连接服务器
            int total = 0;
            IMAPStore store = (IMAPStore) session.getStore("imap");
            store.connect(user, password);
            store.id(IAM);
            //邮箱文件名称遍历
//            Folder[] folders = store.getDefaultFolder().list("*");
//            for (Folder folder : folders) {
//                System.out.println(folder.getName());
//            }
//            IMAPFolder folder = (IMAPFolder) store.getFolder("INBOX"); // 收件箱
            IMAPFolder folder = (IMAPFolder) store.getFolder("已发送"); // 发件箱
            folder.open(Folder.READ_ONLY);
            // 获取总邮件数
            total = folder.getMessageCount();
            System.out.println("-----------------共有邮件:" + total + " 封--------------");
            // 得到发件箱文件夹信息,获取邮件列表
            Message[] messages = folder.getMessages();
            for (Message message : messages) {
                String[] header = message.getHeader("Message-ID");
                if (messageId.equals(header[0])){
                    System.out.println("找到啦!!!!!!!!!!!!!!");
                }
                System.out.println("Message-ID" + header[0]);
                System.out.println("发送时间:" + message.getSentDate());
                System.out.println("主题:" + message.getSubject());
                System.out.println("内容:" + message.getContent());
                System.out.println("--------------------------------------------");
            }
            // 释放资源
            if (folder != null) {
                folder.close(true);
            }

            if (store != null) {
                store.close();
            }
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

根据javax.mail的文档和规范,它并没有提供直接获取邮件投递状态的功能。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值