spring boot 中使用 IMAP协议读取邮件

spring boot 中使用 IMAP协议读取邮件

1.邮箱授权

QQ邮箱授权,打开 “设置” 切换到 “账户” 找到下图中设置,开启 “POP3/SMTP服务” 和 “IMAP/SMTP服务”,开启后获取的授权码记得保存后续会用到
在这里插入图片描述

2.导入maven 依赖
<!-- 邮件email -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

3.读取邮件(IMAP协议对应邮箱端口 993),POP3协议与IMAP协议授权码不同

public class ImapMail {

public static void main(String[] args) throws Exception {
    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
    final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";//ssl加密

    // 定义连接imap服务器的属性信息
    String port = "993";
    String imapServer = "imap.qq.com";
    String protocol = "imap";

    //有些参数可能不需要
    Properties props = new Properties();
    props.setProperty("mail.imap.socketFactory.class", SSL_FACTORY);
    props.setProperty("mail.imap.socketFactory.fallback", "false");
    props.setProperty("mail.transport.protocol", protocol); // 使用的协议
    props.setProperty("mail.imap.port", port);
    props.setProperty("mail.imap.socketFactory.port", port);

    //创建会话
    Session session = Session.getInstance(props, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("邮箱账号","授权码");
        }
    });
    //存储对象
    Store store = session.getStore("imap");
    //连接
    store.connect("imap.qq.com",993,"邮箱账号","授权码");
    Folder folder = null;
    try {
        // 获得收件箱
        folder = store.getFolder("INBOX");
        // 以读写模式打开收件箱
        folder.open(Folder.READ_WRITE);
        //false 表示未读
        FlagTerm flagTerm = new FlagTerm(new Flags(Flags.Flag.SEEN),false);
        //获得收件箱的邮件列表
        Message[] messages = folder.search(flagTerm);
        // 打印不同状态的邮件数量
        System.out.println("收件箱中共" + messages.length + "封邮件!");
        System.out.println("收件箱中共" + folder.getUnreadMessageCount() + "封未读邮件!");
        System.out.println("收件箱中共" + folder.getNewMessageCount() + "封新邮件!");
        System.out.println("收件箱中共" + folder.getDeletedMessageCount() + "封已删除邮件!");

        System.out.println("------------------------开始解析邮件----------------------------------");

        for (int i = 0; i < messages.length; i++) {
            System.out.println("消息:"+messages[i].getSubject());
            String from = MimeUtility.decodeText(messages[i].getFrom()[0].toString());
            InternetAddress internetAddress = new InternetAddress(from);
            System.out.println("发件人:" + internetAddress.getPersonal() + '(' + internetAddress.getAddress() + ')');
        }

    } catch (NoSuchProviderException e) {
                e.printStackTrace();
            } catch (MessagingException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (folder != null) {
                        folder.close(false);
                    }
                    if (store != null) {
                        store.close();
                    }
                } catch (MessagingException e) {
                    e.printStackTrace();
                }
            }

}
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,Spring Boot 可以使用 JavaMail API 来读取 IMAP 邮件的附件。你需要使用 JavaMail API 的 IMAP 协议实现来连接到邮件服务器,并使用 JavaMail API 的 MimeMessage 类来处理邮件和附件。 以下是一个基本示例代码,展示如何使用 Spring Boot 和 JavaMail API 从 IMAP 邮箱读取邮件和附件: ```java @Component public class EmailReceiver { @Autowired private JavaMailSender emailSender; @Scheduled(fixedDelay = 60000) public void receiveEmail() throws MessagingException, IOException { Properties props = new Properties(); props.setProperty("mail.store.protocol", "imaps"); Session session = Session.getInstance(props, null); Store store = session.getStore(); store.connect("imap.gmail.com", "your_email@gmail.com", "your_password"); Folder inbox = store.getFolder("INBOX"); inbox.open(Folder.READ_ONLY); Message[] messages = inbox.getMessages(); for (Message message : messages) { if (message.getContent() instanceof Multipart) { Multipart multipart = (Multipart) message.getContent(); for (int i = 0; i < multipart.getCount(); i++) { BodyPart bodyPart = multipart.getBodyPart(i); if (!Part.ATTACHMENT.equalsIgnoreCase(bodyPart.getDisposition())) { continue; } InputStream inputStream = bodyPart.getInputStream(); // process the attachment inputStream here } } } inbox.close(false); store.close(); } } ``` 在上面的示例代码,我们通过 JavaMail API 的 IMAP 协议实现连接到 Gmail 邮箱,并在件箱遍历每个邮件。如果邮件是多部分 MIME 类型(即包含附件),我们就遍历每个邮件部分并检查是否有附件。如果找到了附件,我们就可以使用 `bodyPart.getInputStream()` 方法获取附件的输入流,并在此处处理附件数据。 注意,在使用 JavaMail API 时,你需要提供正确的邮件服务器地址、用户名和密码,以及必要的协议和端口号。此外,你还需要处理可能出现的异常,例如邮件服务器连接错误和附件读取错误等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值