📜  在 java mail api 中读取邮件及其内容 - Java (1)

📅  最后修改于: 2023-12-03 15:37:21.129000             🧑  作者: Mango

在 Java Mail API 中读取邮件及其内容 - Java

简介

Java Mail API 是 Java 平台上用于发送和接收邮件的 API,它提供了一个独立于平台、可移植的框架,可以在 Java 应用程序中使用它来发送和接收邮件。 Java Mail API 提供了 JavaMail API 和 Java Activation Framework 两个包。

JavaMail API 主要包括邮件发送和接收两个方面,本文主要介绍如何通过 Java Mail API 在 Java 中读取邮件及其内容。

读取邮件

JavaMail API 提供了一个 Session 类用于建立连接和控制会话过程,一个 Store 类用于读取和写入邮件信息。

连接至邮箱

首先,我们需要建立与邮箱的连接。在 JavaMail API 中,通过 Session 类建立与邮箱的连接。Session 是建立和控制邮件会话的核心类,它确定了连接参数,并提供了网络连接方式、安全性、用户验证方式等选项。

Properties props = new Properties();
props.setProperty("mail.store.protocol", "pop3"); // 连接协议为 POP3
props.setProperty("mail.pop3.host", "pop.163.com"); // 设置连接主机为 163 的 POP3 服务器
props.setProperty("mail.pop3.port", "995"); // 设置 SSL 安全套接层的端口号,一般为995
props.setProperty("mail.pop3.ssl.enable", "true"); // 设置是否使用 SSL 安全套接层连接
props.setProperty("mail.pop3.ssl.trust", "*"); // 设置信任所有主机

Session session = Session.getDefaultInstance(props);
Store store = session.getStore();
store.connect("邮箱地址", "登录名", "登录密码");
获取收件箱中的邮件

接下来,我们需要获取收件箱中的邮件,使用 getStore() 方法获取 Store 对象后,通过 getFolder() 方法获取 Folder 对象表示邮件文件夹,再通过 open() 方法打开相应的邮件文件夹,就可以获取到收件箱中的邮件:

Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
Message[] messages = inbox.getMessages();
获取邮件内容

获取到了邮件对象之后,就可以获取到邮件的内容了。JavaMail API 提供了多种方法来获取邮件内容,下面是常用的获取邮件内容的方法:

  • 获取邮件的发送时间

    Date sentDate = message.getSentDate();
    
  • 获取邮件的主题

    String subject = message.getSubject();
    
  • 获取邮件的发送者名称

    String fromName = "";
    Address[] froms = message.getFrom();
    InternetAddress address = (InternetAddress) froms[0];
    fromName = address.getPersonal();
    if (fromName == null) {
        fromName = "";
    }
    
  • 获取邮件的发送者邮箱地址

    String from = "";
    Address[] froms = message.getFrom();
    InternetAddress address = (InternetAddress) froms[0];
    from = address.getAddress();
    if (from == null) {
        from = "";
    }
    
  • 获取邮件的内容

    String content = message.getContent().toString();
    

完整代码如下:

import java.util.Properties;

import javax.mail.Address;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.InternetAddress;

public class ReadEmail {

    public static void main(String[] args) throws Exception {
        // 连接协议为 POP3
        Properties props = new Properties();
        props.setProperty("mail.store.protocol", "pop3");
        // 设置连接主机为 163 的 POP3 服务器
        props.setProperty("mail.pop3.host", "pop.163.com");
        // 设置 SSL 安全套接层的端口号,一般为995
        props.setProperty("mail.pop3.port", "995");
        // 设置是否使用 SSL 安全套接层连接
        props.setProperty("mail.pop3.ssl.enable", "true");
        // 设置信任所有主机
        props.setProperty("mail.pop3.ssl.trust", "*");

        // 建立与邮箱的连接
        Session session = Session.getDefaultInstance(props);
        Store store = session.getStore();
        store.connect("邮箱地址", "登录名", "登录密码");

        // 获取收件箱中的邮件
        Folder inbox = store.getFolder("INBOX");
        inbox.open(Folder.READ_ONLY);
        Message[] messages = inbox.getMessages();

        // 遍历并打印邮件信息
        for (Message message : messages) {
            System.out.println("发送时间:" + message.getSentDate());
            System.out.println("主题:" + message.getSubject());
            System.out.println("发件人姓名:" + getFromName(message));
            System.out.println("发件人邮箱:" + getFrom(message));
            System.out.println("邮件内容:" + message.getContent().toString());
            System.out.println("\n\n");
        }
    }

    // 获取发件人姓名
    private static String getFromName(Message message) throws Exception {
        String fromName = "";
        Address[] froms = message.getFrom();
        InternetAddress address = (InternetAddress) froms[0];
        fromName = address.getPersonal();
        if (fromName == null) {
            fromName = "";
        }
        return fromName;
    }

    // 获取发件人邮箱地址
    private static String getFrom(Message message) throws Exception {
        String from = "";
        Address[] froms = message.getFrom();
        InternetAddress address = (InternetAddress) froms[0];
        from = address.getAddress();
        if (from == null) {
            from = "";
        }
        return from;
    }

}
总结

本文介绍了如何在 JavaMail API 中读取邮件及其内容,使用 JavaMail API 可以很方便地读取邮件内容,帮助我们实现自动化的邮件处理功能。同时应注意,JavaMail API 的使用应遵循相关的政策和法律规定,防止滥用商业邮件,确保信息的合法传递。