核心类(Core Classes)

优质
小牛编辑
122浏览
2023-12-01

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

描述
javax.mail.SessionAPI的关键类。 多线程对象表示连接工厂。
javax.mail.Message一个为电子邮件建模的抽象类。 子类提供实际的实现。
javax.mail.Address一个抽象类,用于对消息中的地址(来自和到地址)进行建模。 子类提供特定的实现。
javax.mail.Authenticator用于保护邮件服务器上的邮件资源的抽象类。
javax.mail.Transport一种抽象类,用于模拟用于发送电子邮件的邮件传输机制。
javax.mail.Store一种抽象类,用于为消息存储及其访问协议建模,用于存储和检索消息。 商店分为文件夹。
javax.mail.Folder表示邮件消息文件夹的抽象类。 它可以包含子文件夹。
javax.mail.internet。 MimeMessageMessage是一个抽象类,因此必须使用子类; 在大多数情况下,您将使用MimeMessage。 MimeMessage是一种了解MIME类型和标头的电子邮件。
javax.mail.internet。 InternetAddress此类表示使用RFC822语法的Internet电子邮件地址。 典型的地址语法格式为user@host.domainPersonal Name <user@host.domain>

让我们详细研究这些类中的每一个,在随后的章节中,我们将使用这些中的每一个来研究示例。

会话类

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()方法获取会话对象。 它返回默认会话。

    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

  • 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)用于设置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对象来处理这个字母。

  • Address是一个抽象类。 因此,主要使用其子类javax.mail.internet.InternetAddress类。

  • 只需传递电子邮件地址即可创建地址:

    Address address = new InternetAddress("manisha@gmail.com"); 
    
  • 创建地址的另一种方法是通过名称alogwith电子邮件地址:

    Address address = new InternetAddress("manisha@gmail.com", Manisha); 
    
  • 您还可以设置To,From,CC,BCC字段,如下所示

    • message.setFrom(address)

    • message.addRecipient(type, address)

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

      • Message.RecipientType.TO

      • Message.RecipientType.CC

      • Message.RecipientType.BCC

认证类

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

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

  • 创建会话对象时,必须向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类用作消息传输机制。 此类通常使用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扩展了Service类,它提供了许多用于命名存储,连接到存储和侦听连接事件的常用方法。

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

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

文件夹类

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

连接到商店后,您可以获得一个文件夹,必须先打开该文件夹,然后才能从中读取邮件。

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

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

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

JavaMail API存储和文件夹关系

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