JavaMail API包含一些用于发送,读取和删除电子邮件的接口和类.虽然JavaMail API中有许多软件包,但它们将涵盖Java Mail API中经常使用的两个主要软件包: javax.mail 和 javax.mail.internet 软件包.这些包包含所有JavaMail核心类.它们是:
Class | 描述 |
---|---|
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语法的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,地址)
三种预定义的地址类型是具有以下值之一的对象:
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 扩展了 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)方法返回指定的子文件夹.阅读邮件完成后,关闭商店和文件夹连接.
我们可以在下面的图片中看到商店和文件夹的关系:
正如我们所看到的,对于每个用户帐户,服务器都有一个商店,即存储用户的消息.商店分为多个文件夹,"收件箱"文件夹是包含电子邮件的主要文件夹.文件夹可以包含邮件和子文件夹.