JavaMail 应用指南 (邮箱类)

JavaMail 应用指南 (邮箱类)

介绍

JavaMail API 是一个用于邮件处理的 Java 标准 API。它为发送和接收电子邮件提供了一个标准的框架和一组类和接口。JavaMail API 可以和所有的邮件服务器协同工作,并支持常见的邮件协议,例如 SMTP、POP3 和 IMAP。

原理

JavaMail API 的核心组成部分包括邮件会话(Session)、邮件传输(Transport)、邮件存储(Store)以及邮件消息(Message)。

邮件会话(Session)是 JavaMail API 的入口点,它表示了一个与邮件服务器的连接。通过 Session 对象,可以创建一个新的邮件消息(Message)对象,并发送这个消息到指定的邮件服务器。邮件消息(Message)表示了一个邮件,包括发件人、收件人、主题、正文等信息。邮件传输(Transport)则负责将这个邮件发送到指定的收件人。邮件存储(Store)则是负责从邮件服务器中检索邮件消息。

语法

创建邮件 Session

创建 Session 对象需要一个 Properties 对象,用于配置邮件服务器的地址、认证等信息。

// 创建邮件会话
Properties props = new Properties();

// 设置邮箱服务器配置
props.setProperty("mail.smtp.host", "邮箱服务器");

// 产生一个用于邮件发送的Session对象
Session session = Session.getInstance(props);

创建邮件对象

邮件对象包含了邮件的主题、内容、发件人、收件人等信息。使用 MimeMessage 类可以创建邮件对象:

// 创建邮件消息
Message message = new MimeMessage(session);

message.setFrom(new InternetAddress("发送邮箱"));

// TO 直接发送 CC抄送 BCC密送
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("接收邮箱"));

message.setSubject("邮件主题");

message.setText("邮件正文");

发送邮件

发送邮件需要使用 Transport 类,它提供了发送邮件的方法 send()

// 创建用于SMTP邮件传输的Transport对象
Transport transport = session.getTransport("smtp");

// 连接到SMTP邮件服务器
transport.connect("邮箱服务器", "发送邮箱", "发送邮箱密码");

// 发送包含在MimeMessage对象中的邮件
transport.sendMessage(message, message.getAllRecipients());

// 关闭连接
transport.close();

注意事项(*重点)

  1. JavaMail API 的使用需要引入 JavaMail 相关的 jar 包。
  2. 发送邮件时,需要指定正确的 SMTP 服务器地址和端口号,否则会发送失败。

Properties属性对象设置

使用方法

k:填入名称,v填入值

Properties props = new Properties();
props.setProperty(k, v);

注意:

setPropertyput效果一样,因为setProperty的源码:

public synchronized Object setProperty(String key, String value) {
        return put(key, value);
    }

文档

名称 类型 描述
mail.debug boolean 初始调试模式。默认值为false。
mail.from String 当前用户的返回电子邮件地址,由方法InternetAddress.getLocalAddress使用。
mail.mime.address.strict boolean MimeMessage类使用该方法解析邮件头。此属性控制传递给该方法的strict标志。默认值为true。
mail.host String 用于存储和传输的邮件服务器的默认主机名。如果未设置该属性,则使用该属性mail.protocol.host。
mail.store.protocol String 指定默认的消息访问协议。该方法返回一个实现此协议的Store对象。默认情况下,将返回配置文件中第一个Store提供程序。Session.getStore()
mail.transport.protocol String 指定默认的消息传输协议。该方法返回一个实现此协议的Transport对象。默认情况下,将返回配置文件中第一个Transport提供程序。Session.getTransport()
mail.user String 连接到邮件服务器时要使用的默认用户名。如果未设置该属性,则使用该属性mail.protocol.user。
mail.protocol.class String 指定指定协议的提供程序的完全限定类名。在存在给定协议的多个提供程序的情况下使用;此属性可用于指定默认使用哪个提供程序。该提供程序仍必须在配置文件中列出。
mail.protocol.host String 指定指定协议的邮件服务器的主机名。覆盖属性mail.host。
mail.protocol.port int 指定指定协议的邮件服务器的端口号。如果未指定,则使用协议的默认端口号。
mail.protocol.user String 用于使用指定协议连接到邮件服务器的用户名。覆盖属性mail.user。

以下属性由JavaMail的参考实现(RI)支持,但目前不是规范的必需部分。这些属性的名称、类型、默认值和语义可能会在未来的版本中更改。

名称 类型 描述
mail.debug.auth boolean 在调试输出中包含协议身份验证命令(包括用户名和密码)。默认值为false。
mail.debug.auth.username boolean 在非协议调试输出中包含用户名。默认值为true。
mail.debug.auth.password boolean 在非协议调试输出中包含密码。默认值为false。
mail.transport.protocol.address-type String 指定指定地址类型的默认消息传输协议。当地址是指定类型(例如,标准互联网地址的"rfc822")时,该方法返回实现此协议的Transport对象。默认情况下,使用为该地址类型配置的第一个Transport。该属性可用于通过将属性设置为Session.getTransport(Address)mail.transport.protocol.rfc822"smtps"等方式

补充:

mail.smtp.host:设置服务器和对应协议,在部分API中的mail后面指定或者更换对应协议

mail.smtp.authJavaMail API 中的一个配置属性,用于设置SMTP邮件服务器是否需要进行认证。如果设置为 true,则表示需要认证才能发送邮件,如果设置为 false,则表示不需要认证即可发送邮件。
如果邮件服务器需要认证,那么发送邮件时需要提供认证信息,例如用户名和密码。通常可以通过设置 mail.smtp.usermail.smtp.password 来提供认证信息。如果没有提供认证信息,会出现 "530 Authentication Required" 错误,发送邮件失败。
mail.starttls.enable:启用 STARTTLS 加密