
- JavaMail API 教程
- JavaMail - 首页
- JavaMail API - 概述
- JavaMail - 环境设置
- JavaMail - 核心类
- JavaMail - 发送邮件
- JavaMail - 检查邮件
- JavaMail - 获取邮件
- JavaMail - 身份验证
- JavaMail - 回复邮件
- JavaMail - 转发邮件
- JavaMail - 删除邮件
- JavaMail - Gmail SMTP 服务器
- JavaMail - 文件夹管理
- JavaMail - 配额管理
- JavaMail - 退信
- JavaMail API 协议
- JavaMail - SMTP 服务器
- JavaMail - IMAP 服务器
- JavaMail - POP3 服务器
- JavaMail API 有用资源
- JavaMail - 快速指南
- JavaMail - 有用资源
- JavaMail - 讨论
JavaMail API - 核心类
JavaMail API 由一些用于发送、读取和删除电子邮件的接口和类组成。尽管 JavaMail API 中有很多包,但我们将介绍 Java Mail API 中经常使用的两个主要包:javax.mail 和 javax.mail.internet 包。这些包包含所有 JavaMail 核心类。它们是
类 | 描述 |
---|---|
javax.mail.Session | API 的关键类。一个多线程对象代表连接工厂。 |
javax.mail.Message | 一个抽象类,用于模拟电子邮件消息。子类提供实际的实现。 |
javax.mail.Address | 一个抽象类,用于模拟消息中的地址(发件人和收件人地址)。子类提供具体的实现。 |
javax.mail.Authenticator | 一个用于保护邮件服务器上邮件资源的抽象类。 |
javax.mail.Transport | 一个抽象类,用于模拟用于发送电子邮件消息的消息传输机制。 |
javax.mail.Store | 一个抽象类,用于模拟邮件存储及其访问协议,用于存储和检索邮件。Store 分为多个文件夹。 |
javax.mail.Folder | 一个抽象类,表示邮件消息的文件夹。它可以包含子文件夹。 |
javax.mail.internet.MimeMessage | Message 是一个抽象类,因此必须与子类一起使用;在大多数情况下,您将使用 MimeMessage。MimeMessage 是一种了解 MIME 类型和标头的电子邮件消息。 |
javax.mail.internet.InternetAddress | 此类使用 RFC822 的语法表示 Internet 电子邮件地址。典型的地址语法格式为[email protected] 或个人姓名 <[email protected]>。 |
让我们详细研究每个类,并在后续章节中学习使用每个类的示例。
Session 类
Session 类是 JavaMail API 的主要类,它不会被子类化。Session 对象充当 JavaMail API 的连接工厂,它处理配置设置和身份验证。
Session 对象可以通过以下方式创建
通过查找存储在 JNDI 服务中的已管理对象
InitialContext ctx = new InitialContext(); Session session = (Session) ctx.lookup("usersMailSession");
usersMailSession 是用作 Session 对象的已管理对象的 JNDI 名称对象。usersMailSession 可以使用所需的名称/值对参数创建和配置,包括邮件服务器主机名、发送邮件的用户帐户以及 Session 对象支持的协议等信息。
创建 Session 对象的另一种方法是基于编程方法,您可以在其中使用java.util.Properties 对象覆盖一些默认信息,例如邮件服务器名称、用户名、密码以及可以在整个应用程序中共享的其他信息。
Session 类的构造函数是private 的。因此,Session 类提供了两种获取Session 对象的方法(如下所示)。
getDefaultInstance():有两种方法可以使用 getDefaultInstance() 方法获取 Session 对象。它返回默认 Session。
public static Session getDefaultInstance(Properties props) public static Session getDefaultInstance(Properties props,Authenticator auth)
getInstance():有两种方法可以使用 getInstance() 方法获取 Session 对象。它返回新的 Session。
public static Session getInstance(Properties props) public static Session getInstance(Properties props,Authenticator auth)
Message 类
创建 Session 对象后,我们现在继续创建将要发送的消息。消息类型将为javax.mail.Message。
Message 是一个抽象类。因此,它的子类javax.mail.internet.MimeMessage 类最常使用。
要创建消息,您需要在 MimeMessage 类构造函数中传递 Session 对象。例如
MimeMessage message=new MimeMessage(session);
创建消息对象后,我们需要在其中存储信息。Message 类实现 javax.mail.Part 接口,而 javax.mail.internet. MimeMessage 实现 javax.mail.internet.MimePart。您可以使用 message.setContent() 或 mimeMessage.setText() 来存储内容。
MimeMessage 类常用的方法是
方法 描述 public void setFrom(Address address) 用于设置发件人标头字段。 public void addRecipients(Message.RecipientType type, String addresses) 用于将给定地址添加到收件人类型。 public void setSubject(String subject) 用于设置主题标头字段。 public void setText(String textmessage) 用于使用 text/plain MIME 类型将文本设置为消息内容。
Address 类
现在我们有了 Session 和 Message(其中存储了内容)对象,我们需要使用Address 对象来为信件指定地址。
Address 是一个抽象类。因此,它的子类javax.mail.internet.InternetAddress 类最常使用。
Address 可以通过仅传递电子邮件地址来创建
Address address = new InternetAddress("[email protected]");
创建 Address 的另一种方法是传递名称以及电子邮件地址
Address address = new InternetAddress("[email protected]", Manisha);
您还可以如下设置 To、From、CC、BCC 字段
message.setFrom(address)
message.addRecipient(type, address)
三个预定义的地址类型是具有以下值之一的对象
Message.RecipientType.TO
Message.RecipientType.CC
Message.RecipientType.BCC
Authenticator 类
Authenticator 类表示一个知道如何获取网络连接身份验证的对象。通常,它会通过提示用户输入信息来实现此目的。
Authenticator 是一个抽象类。您创建一个子类PasswordAuthentication,将用户名和密码传递给其构造函数。
在创建 Session 对象时,必须在 Session 中注册 Authenticator。
以下是Authenticator 用法的示例
Properties props = new Properties(); //Override props with any customized data PasswordAuthentication auth = new PasswordAuthentication("manisha", "pswrd") Session session = Session.getDefaultInstance(props, auth);
Transport 类
Transport 类用作消息传输机制。此类通常使用 SMTP 协议发送消息。
它是一个抽象类。
您可以通过调用静态send() 方法来使用该类的默认版本
Transport.send(message);
发送消息的另一种方法是从 Session 中获取特定协议的实例,传递用户名和密码(如果不需要则为空),发送消息并关闭连接
message.saveChanges(); // implicit with send() //Get transport for session Transport transport = session.getTransport("smtp"); //Connect transport.connect(host, username, password); //repeat if necessary transport.sendMessage(message, message.getAllRecipients()); //Done, close the connection transport.close();
Store 类
一个抽象类,用于模拟邮件存储及其访问协议,用于存储和检索邮件。子类提供实际的实现。Store 扩展了Service 类,该类提供了许多用于命名存储、连接到存储以及侦听连接事件的常用方法。
客户端通过获取实现数据库访问协议的 Store 对象来访问邮件存储。大多数邮件存储都需要用户在允许访问之前进行身份验证。connect 方法执行该身份验证。
Store store = session.getStore("pop3"); store.connect(host, username, password);
Folder 类
Folder 是一个抽象类,表示邮件消息的文件夹。子类实现协议特定的文件夹。文件夹可以包含子文件夹以及消息,从而提供分层结构。
连接到 Store 后,您可以获取一个 Folder,必须在读取邮件之前打开它。
Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); Message message[] = folder.getMessages();
Folder 对象的getFolder(String name) 方法返回名为 name 的子文件夹。读取完邮件后,关闭 Store 和 Folder 连接。
我们可以在下面的图片中看到 Store 和 Folder 的关系

如我们所见,对于每个用户帐户,服务器都有一个存储,它是用户消息的存储。存储分为多个文件夹,“收件箱”文件夹是包含电子邮件消息的主要文件夹。文件夹可以包含消息和子文件夹。