📅  最后修改于: 2023-12-03 15:37:21.129000             🧑  作者: Mango
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 的使用应遵循相关的政策和法律规定,防止滥用商业邮件,确保信息的合法传递。