Javamail Api 简明教程

JavaMail API - Core Classes

JavaMail API 包含一些接口和类,用于发送、读取和删除电子邮件。虽然 JavaMail API 中有许多包,但会涵盖 Java Mail API 中经常使用的两个主要包:javax.mail 和 javax.mail.internet 包。这些包包含所有 JavaMail 核心类。它们是:

Class

Description

javax.mail.Session

该 API 的关键类。一个多线程对象表示连接工厂。

javax.mail.Message

对电子邮件建模的抽象类。子类提供实际的实现。

javax.mail.Address

对消息中的地址(发件人和收件人地址)进行建模的抽象类。子类提供具体的实现。

javax.mail.Authenticator

用于保护邮件服务器上邮件资源的抽象类。

javax.mail.Transport

一个抽象类,用于对消息传输机制建模,以发送电子邮件。

javax.mail.Store

用于对消息存储及其访问协议建模的抽象类,用于存储和检索消息。一个存储库分为多个文件夹。

javax.mail.Folder

抽象类,代表邮件消息的文件夹。它可以包含子文件夹。

javax.mail.internet.MimeMessage

消息是一个抽象类,因此必须使用子类;在大多数情况下,您将使用 MimeMessage。MimeMessage 是一个电子邮件消息,可以理解 MIME 类型和头。

javax.mail.internet.InternetAddress

该类使用 RFC822 的语法表示互联网电子邮件地址。典型地址语法采用 user@host.domain 或 Personal Name <user@host.domain> 的形式。

让我们详细学习这些类中的每一个类,在后续章节中,我们将学习使用每一个类的示例。

Session Class

Session 类是 JavaMail API 的主要类,它没有子类。Session 对象充当 JavaMail API 的连接工厂,它处理配置设置和身份验证。

可以通过以下方式创建 Session 对象:

  1. 通过查找存储在 JNDI 服务中的管理对象 InitialContext ctx = new InitialContext();Session session = (Session) ctx.lookup("usersMailSession"); usersMailSession 是用作 Session 对象的管理对象的 JNDI 名称对象。usersMailSession 可以创建并配置为所需参数,作为名称/值对,包括邮件服务器主机名、发送邮件的用户帐户、以及 Session 对象支持的协议等信息。

  2. 另一种创建 Session 对象的方法基于编程方法,其中可以使用 java.util.Properties 对象覆盖一些默认信息,例如邮件服务器名称、用户名、密码,以及可以在整个应用程序中共享的其他信息。

Session 类的构造函数是私有的。因此,Session 类提供了两个方法(如下所示)来获取 Session 对象。

  1. getDefaultInstance() :通过使用 getDefaultInstance() 方法有两种方法可以获取会话对象。它返回默认会话。 public static Session getDefaultInstance(Properties props)public static Session getDefaultInstance(Properties props,Authenticator auth)

  2. getInstance() :通过使用 getInstance() 方法有两种方法可以获取会话对象。它返回新会话。 public static Session getInstance(Properties props)public static Session getInstance(Properties props,Authenticator auth)

Message Class

创建 Session 对象后,我们现在继续创建一个要发送的消息。消息类型将是 javax.mail.Message。

  1. 消息是一个抽象类。因此其子类 javax.mail.internet.MimeMessage 类通常使用。

  2. 要创建消息,您需要在 MimeMessage 类构造函数中传递会话对象。例如: MimeMessage message=new MimeMessage(session);

  3. 创建消息对象后,我们需要在其中存储信息。消息类实现 javax.mail.Part 接口,而 javax.mail.internet.MimeMessage 实现 javax.mail.internet.MimePart。您可以使用 message.setContent() 或 mimeMessage.setText() 来存储内容。

  4. 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 Class

现在,既然我们有了 Session 和 Message(其中存储了内容)对象,我们需要使用 Address 对象来写信。

  1. 地址是一个抽象类。因此其子类 javax.mail.internet.InternetAddress 类通常使用。

  2. 只需传递电子邮件地址即可创建地址: Address address = new InternetAddress(" manisha@gmail.com ");

  3. 创建地址的另一方法是将名称与电子邮件地址一起传递: Address address = new InternetAddress(" manisha@gmail.com ", Manisha);

  4. 您还可以按如下方式设置 To、From、CC、BCC 域: message.setFrom(address) message.addRecipient(type, address) 三个预定义的地址类型是具有以下值之一的对象: Message.RecipientType.TO Message.RecipientType.CC Message.RecipientType.BCC

Authenticator Class

Authenticator 类表示一个知道如何为网络连接获取身份验证的对象。它通常会向用户提示信息来执行此操作。

  1. Authenticator 是一个抽象类。您创建一个 PasswordAuthentication 子类,将其用户名和密码传递给其构造函数。

  2. 在创建会话对象时,您必须将 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 Class

Transport 类用作消息传输机制。此类通常使用 SMTP 协议发送消息。

  1. 它是一个抽象类。

  2. 您可以通过仅调用静态 send() 方法来使用该类的默认版本: Transport.send(message);

  3. 发送消息的另一种方法是通过从会话中获取协议的特定实例,传递用户名和密码(如果不需要则为空),发送消息并关闭连接: message.saveChanges(); // implicit with send() Transport transport = session.getTransport("smtp"); transport.connect(host, username, password); transport.sendMessage(message, message.getAllRecipients()); transport.close();

Store Class

一个抽象类,用于对消息存储及其访问协议进行建模,以便存储和检索消息。子类提供实际实现。Store 扩展 Service 类,它为命名存储、连接到存储和侦听连接事件提供了许多常见方法。

客户端通过获取实现数据库访问协议的 Store 对象来访问消息存储。大多数消息存储要求用户在允许他们访问之前进行身份验证。connect 方法执行该身份验证。

Store store = session.getStore("pop3");
store.connect(host, username, password);

Folder Class

Folder 是一个抽象类,表示邮件消息的文件夹。子类实现特定于协议的文件夹。文件夹既可以包含子文件夹,也可以包含消息,从而提供层次结构。

连接到 Store 之后,您可以获取一个文件夹,必须先对其进行打开,然后才能从中读取消息。

Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();

文件夹对象的 getFolder(String name) 方法返回命名的子文件夹。阅读邮件完成后,关闭存储和文件夹连接。

我们可以在下图中看到 Store 和 Folder 的关系:

mail store

正如我们所看到的,对于每个用户帐户,服务器都有一个存储,它是用户消息的存储。该存储被划分为文件夹,“收件箱”文件夹是主要文件夹,其中包含电子邮件消息。文件夹既可以包含消息,也可以包含子文件夹。