📜  讨论JavaMail API(1)

📅  最后修改于: 2023-12-03 15:41:42.505000             🧑  作者: Mango

讨论JavaMail API

JavaMail API是Java平台上的一种API,它提供了发送和接收电子邮件的能力。它支持SMTP,POP3,IMAP和NNTP等常见的电子邮件协议。

发送邮件

发送电子邮件需要建立三个对象:Session、Message和Transport。

Session对象

Session对象是JavaMail API中最基本的对象,它表示与邮件服务器之间的会话,并提供了许多用于配置和控制与服务器的连接的选项。

Properties props = new Properties();
props.setProperty("mail.smtp.host", "smtp.gmail.com");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.port", "587");
props.setProperty("mail.smtp.starttls.enable", "true");

Session session = Session.getInstance(props, new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("YOUR_EMAIL", "YOUR_PASSWORD");
    }
});

在这个例子中,我们基于Properties对象创建了一个邮箱会话,并为Gmail SMTP服务器设置了SMTP主机地址、SMTP端口、启用TLS加密和身份验证选项等。

Message对象

Message对象是JavaMail API中封装电子邮件信息的对象。它包含了邮件的发送者和接收者、主题、内容等信息。

Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("FROM_EMAIL"));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("TO_EMAIL, ANOTHER_TO_EMAIL"));
message.setSubject("TEST EMAIL");
message.setText("HELLO, WORLD!");

在这个例子中,我们使用MimeMessage对象封装了电子邮件信息,并设置了发件人和收件人信息,主题和内容。

Transport对象

Transport对象是JavaMail API中用于与邮件服务器交互的对象。它可以用于发送电子邮件、检索电子邮件和删除电子邮件等。

Transport.send(message);

在这个例子中,我们使用Transport对象发送了电子邮件。

接收邮件

JavaMail API支持通过POP3、IMAP4和NNTP协议接收电子邮件。

POP3协议接收邮件

使用POP3协议接收邮件需要使用POP3Store类。

Properties props = new Properties();
props.setProperty("mail.store.protocol", "pop3");
props.setProperty("mail.pop3.host", "pop.gmail.com");
props.setProperty("mail.pop3.port", "995");
props.setProperty("mail.pop3.starttls.enable", "true");

Session session = Session.getDefaultInstance(props);

Store store = session.getStore();
store.connect("YOUR_EMAIL", "YOUR_PASSWORD");

Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);

Message[] messages = inbox.getMessages();
for (Message message : messages) {
    System.out.println(message.getSubject());
}

inbox.close(false);
store.close();

在这个例子中,我们基于Properties对象创建了一个邮箱会话,并为Gmail POP3服务器设置POP3主机地址、POP3端口、启用TLS加密和身份验证选项等。接下来我们使用Store对象连接到邮箱,打开收件箱并获取邮件列表。

IMAP协议接收邮件

使用IMAP协议接收邮件需要使用IMAPStore类。

Properties props = new Properties();
props.setProperty("mail.store.protocol", "imap");
props.setProperty("mail.imap.host", "imap.gmail.com");
props.setProperty("mail.imap.port", "993");
props.setProperty("mail.imap.starttls.enable", "true");

Session session = Session.getDefaultInstance(props);

Store store = session.getStore();
store.connect("YOUR_EMAIL", "YOUR_PASSWORD");

Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);

Message[] messages = inbox.getMessages();
for (Message message : messages) {
    System.out.println(message.getSubject());
}

inbox.close(false);
store.close();

在这个例子中,我们基于Properties对象创建了一个邮箱会话,并为Gmail IMAP服务器设置IMAP主机地址、IMAP端口、启用TLS加密和身份验证选项等。接下来我们使用Store对象连接到邮箱,打开收件箱并获取邮件列表。

结论

JavaMail API提供了一个使用Java发送和接收电子邮件的强大而灵活的框架。该API极易上手,初学者可以快速入门,而高级用户也可以使用其强大的功能定制更加复杂的邮件应用。