JavaMail API - 核心类

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

Class描述
javax.mail.SessionAPI的关键类.多线程对象表示连接工厂.
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语法的Internet电子邮件地址.典型的地址语法格式为 user@host.domain 个人姓名< user@host.domain> .

让我们详细研究这些课程,在后面的章节中,我们将学习使用这些课程的各个例子.

会话类

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

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

  • 通过查找存储在JNDI服务中的受管对象

    InitialContext ctx = new InitialContext();
    Session session = (Session) ctx.lookup("usersMailSession");


    usersMailSession 是用作Session对象的受管对象的JNDI名称对象.可以使用所需参数作为名称/值对创建和配置 usersMailSession ,包括邮件服务器主机名,发送邮件的用户帐户以及Session对象支持的协议等信息.

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

Session 类的构造函数是 private .因此, Session 类提供了两个获取 Session 对象的方法.

  • getDefaultInstance():有两种方法可以使用getDefaultInstance()方法获取会话对象.它返回默认会话.

     public static Session getDefaultInstance(Properties props)
     public static Session getDefaultInstance(Properties props,Authenticator auth)


  • getInstance():有两种获取会话对象的方法使用getInstance()方法.它返回新的会话.

     public static Session getInstance(Properties props)
     public static Session getInstance(Properties props,Authenticator auth)



消息类

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

  • 消息是一个抽象类.因此,它的子类 javax.mail.internet.MimeMessage 类主要用于.

  • 要创建消息,需要传递会话MimeMessage类构造函数中的对象.例如:

     
     MimeMessage message = new MimeMessage(session);


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

  • MimeMessage类的常用方法是

    方法描述
    public void setFrom(Address address)used设置from头字段.
    public void addRecipients(Message.RecipientType type,String addresses)用于添加给定地址收件人类型.
    public void setSubject(String subject)用于设置主题标题字段.
    public void setText(String textmessage)用于使用text/plain MIME类型将文本设置为消息内容.

  

地址类

现在我们有一个Session和Message(内容存储在其中)对象,我们需要使用 Address 对象来处理这个字母.

  • 地址是一个抽象类.因此,它的子类 javax.mail.internet.InternetAddress 类主要用于.

  • 地址可以是仅通过电子邮件地址创建:

    Address address = new InternetAddress("manisha@gmail.com");


  • 另一种创建地址的方法是将姓名alogwith电子邮件地址:

    Address address = new InternetAddress("manisha@gmail.com", Manisha);


  • 您还可以设置"收件人","来自","抄送","BCC"字段,如下所示

    • Message.RecipientType.TO

    • Message.RecipientType.CC

    • Message.RecipientType.BCC

    • message.setFrom(address)

    • message.addRecipient(type,地址)

    • 三种预定义的地址类型是具有以下值之一的对象:

  

Authenticator Class

Class Authenticator表示知道如何获取网络连接身份验证的对象.通常,它会通过提示用户提供信息来完成此操作.

  • Authenticator 是一个摘要类.您创建子类 PasswordAuthentication ,将用户名和密码传递给其构造函数.

  • 创建会话对象时,必须在会话中注册Authenticator.

以下是 Authenticator 使用的示例:

Properties props = new Properties();
//Override props with any customized data
PasswordAuthentication auth = new PasswordAuthentication("manisha", "pswrd")
Session session = Session.getDefaultInstance(props, auth);

  

运输类

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

  • 这是一个抽象类.

  • 您只需调用静态 send()方法即可使用该类的默认版本:

    Transport.send(message);


  • 发送消息的另一种方法是从协议的会话中获取特定实例,传递用户名和密码(如果不需要,则为空白),发送消息,然后关闭连接:

    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 Class

一个抽象类,它为消息存储及其访问协议建模,用于存储和检索消息.子类提供实际的实现. Store 扩展了 Service 类,它提供了许多用于命名存储,连接到商店和监听连接事件的常用方法.

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

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

  

文件夹类

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

连接到商店后,您可以获得一个文件夹,必须先打开它才能从中读取消息.

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


Folder对象的 getFolder(String name)方法返回指定的子文件夹.阅读邮件完成后,关闭商店和文件夹连接.

我们可以在下面的图片中看到商店和文件夹的关系:

JavaMail API商店和文件夹关系

正如我们所看到的,对于每个用户帐户,服务器都有一个商店,即存储用户的消息.商店分为多个文件夹,"收件箱"文件夹是包含电子邮件的主要文件夹.文件夹可以包含邮件和子文件夹.