Java Mail | Mail Properties

5,203 阅读8分钟

Spring Boot

Key Default Value Description
spring.mail.default-encoding UTF-8 默认 MimeMessage 编码。
spring.mail.host SMTP服务器主机。例如,smtp.example.com.
spring.mail.jndi-name 会话JNDI名称。设置时,优先于其他会话设置。
spring.mail.password SMTP服务器的登录密码。
spring.mail.port SMTP服务器端口。
spring.mail.properties.* 附加的JavaMail会话属性。
spring.mail.protocol smtp SMTP服务器使用的协议。
spring.mail.test-connection false 是否测试邮件服务器在启动时是否可用。
spring.mail.username SMTP服务器的登录用户。
spring.sendgrid.api-key 服务提供商API密钥。
spring.sendgrid.proxy.host 服务提供商代理主机。
spring.sendgrid.proxy.port 服务提供商代理端口。

对于其中的 spring.mail.properties.* 可再深入研究,参考 JavaMail | JavaMail配置属性

spring.mail.properties.*

SMTP协议支持的所有属性:

Name Type Description
mail.smtp.user String SMTP的默认用户名。
mail.smtp.host String 要连接的SMTP服务器。
mail.smtp.port int 如果connect()方法没有显式指定要连接的SMTP服务器端口,则该服务器端口将被连接到。默认为25。
mail.smtp.connectiontimeout int 套接字连接超时值(毫秒)。此超时由java.net.Socket实现。默认是无限超时
mail.smtp.timeout int 套接字读取超时值(以毫秒为单位)。此超时由java.net.Socket实现。默认是无限超时
mail.smtp.writetimeout int 套接字写入超时值(以毫秒为单位)。这个超时是通过使用java.util.concurrent实现的。ScheduledExecutorService针对每个连接调度一个线程,以便在超时过期时关闭套接字。因此,使用此超时的开销是每个连接一个线程。默认是无限超时
mail.smtp.from String 用于SMTP邮件命令的电子邮件地址。这将设置信封返回地址。默认是msg.getFrom()或InternetAddress.getLocalAddress()。注意:mail.smtp。user以前用于此目的。
mail.smtp.localhost String SMTP HELO或EHLO命令中使用的本地主机名。默认为InetAddress.getLocalHost () .getHostName ()。如果JDK和名称服务配置正确,通常不需要设置。
mail.smtp.localaddress String 创建SMTP套接字时要绑定的本地地址(主机名)。默认为Socket类选择的地址。通常不需要进行设置,但对于选择要绑定到的特定本地地址的多宿主主机非常有用。
mail.smtp.localport int 创建SMTP套接字时要绑定的本地端口号。默认为Socket类选择的端口号。
mail.smtp.ehlo boolean 如果为false,不要尝试使用EHLO命令进行登录。默认值为true。通常情况下,故障的EHLO命令将回退到HELO命令;此属性仅适用于未正确地故障EHLO或未正确实现EHLO的服务器。
mail.smtp.auth boolean 如果为真,则尝试使用AUTH命令对用户进行身份验证。默认值为false。
mail.smtp.auth.mechanisms String 如果设置,则列出要考虑的身份验证机制,以及考虑它们的顺序。只使用服务器支持和当前实现支持的机制。默认是LOGIN PLAIN DIGEST-MD5 NTLM,其中包括当前实现支持的除XOAUTH2之外的所有身份验证机制。
mail.smtp.auth.login.disable boolean 如果为真,则禁止使用AUTH登录命令。默认是false。
mail.smtp.auth.plain.disable boolean 如果为真,则禁止使用AUTH PLAIN命令。 默认为false。
mail.smtp.auth.digest-md5.disable boolean 如果为true,则禁止使用AUTH DIGEST-MD5命令。 默认为false。
mail.smtp.auth.ntlm.disable boolean 如果为true,则禁止使用AUTH NTLM命令。 默认为false。
mail.smtp.auth.ntlm.domain String NTLM身份验证域。
mail.smtp.auth.ntlm.flags int NTLM协议特定的标志。 有关详细信息,请参见http://curl.haxx.se/rfc/ntlm.html#theNtlmFlags。
mail.smtp.auth.xoauth2.disable boolean 如果为true,则禁止使用AUTHENTICATE XOAUTH2命令。 由于OAuth 2.0协议需要特殊的访问令牌而不是密码,因此默认情况下会禁用此机制。 通过将此属性显式设置为“ false”或将“ mail.smtp.auth.mechanisms”属性设置为“ XOAUTH2”来启用它。
mail.smtp.submitter String 提交者要在MAIL FROM命令的AUTH标记中使用。通常由邮件中继使用,传递关于消息的原始提交者的信息。参见SMTPMessagesetSubmittermethod。邮件客户端通常不使用这个。
mail.smtp.dsn.notify String RCPT命令的NOTIFY选项。要么不成功,要么成功、失败和延迟的某种组合(以逗号分隔)。
mail.smtp.dsn.ret String MAIL命令的RET选项。 FULL或HDRS。
mail.smtp.allow8bitmime boolean 如果设置为true,并且服务器支持8BITMIME扩展,则使用“ quoted-printable”或“ base64”编码的邮件文本部分如果遵循RFC2045规则的8bit文本,则转换为使用“ 8bit”编码。
mail.smtp.sendpartial boolean 如果设置为true,并且消息具有一些有效和一些无效的地址,则无论如何都要发送该消息,并通过SendFailedException报告部分失败。 如果设置为false(默认值),则如果收件人地址无效,则不会将邮件发送给任何收件人。
mail.smtp.sasl.enable boolean 如果设置为true,请尝试使用javax.security.sasl包来选择用于登录的身份验证机制。 默认为false。
mail.smtp.sasl.mechanisms String 尝试使用的用空格或逗号分隔的SASL机制名称列表。
mail.smtp.sasl.authorizationid String 在SASL身份验证中使用的授权ID。 如果未设置,则使用身份验证ID(用户名)。
mail.smtp.sasl.realm String 与DIGEST-MD5身份验证一起使用的realm。
mail.smtp.sasl.usecanonicalhostname boolean 如果设置为true,则 InetAddress.getCanonicalHostName 返回的规范主机名将传递给SASL机制,而不是用于连接的主机名。 默认为false。
mail.smtp.quitwait boolean 如果设置为false,则发送QUIT命令,并立即关闭连接。 如果设置为true(默认值),则使传输等待对QUIT命令的响应。
mail.smtp.reportsuccess boolean 如果设置为true,则使传输为每个成功的地址包含一个 SMTPAddressSucceededException 还要注意,这将导致从SMTPTransport 的方法抛出 sendMessage SendFailedException ,即使所有地址都正确且消息已成功发送。
mail.smtp.socketFactory SocketFactory 如果设置为实现javax.net.SocketFactory接口的类,则该类将用于创建SMTP套接字。 请注意,这是一个类的实例,而不是名称,必须使用put方法而不是setProperty方法进行设置。
mail.smtp.socketFactory.class String 如果设置,则指定实现javax.net.SocketFactory接口的类的名称。 此类将用于创建SMTP套接字。
mail.smtp.socketFactory.fallback boolean 如果设置,则指定实现javax.net.SocketFactory接口的类的名称。 此类将用于创建SMTP套接字。
mail.smtp.socketFactory.port int 指定使用指定的套接字工厂时要连接的端口。 如果未设置,将使用默认端口。
mail.smtp.ssl.enable boolean 如果设置为true,则默认使用SSL连接和使用SSL端口。 对于“ smtp”协议,默认值为false;对于“ smtps”协议,默认值为true。
mail.smtp.ssl.checkserveridentity boolean 如果设置为true,请按照RFC 2595的规定检查服务器身份。这些基于服务器证书内容的附加检查旨在防止中间人攻击。 默认为false。
mail.smtp.ssl.trust String 如果已设置,并且尚未指定套接字工厂,则启用MailSSLSocketFactory 的使用。 如果设置为“ *”,则所有主机都是受信任的。 如果设置为用空格分隔的主机列表,则这些主机是可信任的。 否则,信任取决于服务器提供的证书。
mail.smtp.ssl.socketFactory SSLSocketFactory 如果设置为扩展javax.net.ssl.SSLSocketFactory类的类,则该类将用于创建SMTP SSL套接字。 请注意,这是一个类的实例,而不是名称,必须使用put方法而不是setProperty方法进行设置。
mail.smtp.ssl.socketFactory.class String 如果设置,则指定扩展javax.net.ssl.SSLSocketFactory类的类的名称。 此类将用于创建SMTP SSL套接字。
mail.smtp.ssl.socketFactory.port int 指定使用指定的套接字工厂时要连接的端口。 如果未设置,将使用默认端口。
mail.smtp.ssl.protocols string 指定将为SSL连接启用的SSL协议。属性值是javax.net.ssl.SSLSocket.setEnabledProtocolsmethod可以接受的空白分隔的令牌列表。
mail.smtp.ssl.ciphersuites string 指定将为SSL连接启用的SSL密码套件。属性值是一个空格分隔的令牌列表,这些令牌可被javax.net.ssl.SSLSocket.setEnabledCipherSuitesmethod接受。
mail.smtp.starttls.enable boolean 如果为真,则允许使用STARTTLS命令(如果服务器支持)在发出任何登录命令之前将连接切换到受tls保护的连接。请注意,必须配置适当的信任存储,以便客户机信任服务器的证书。默认值为false。
mail.smtp.starttls.required boolean 如果为真,则需要使用STARTTLS命令。如果服务器不支持STARTTLS命令,或者该命令失败,则connect方法将失败。默认值为false。
mail.smtp.socks.host string 指定将用于连接到邮件服务器的SOCKS5代理服务器的主机名。(注意,这只适用于JDK 1.5或更高版本。)
mail.smtp.socks.port string 指定SOCKS5代理服务器的端口号。只有当代理服务器没有使用标准端口号1080时,才需要使用这个端口。
mail.smtp.mailextension String 附加到邮件命令的扩展字符串。扩展字符串可用于指定标准SMTP服务扩展以及特定于供应商的扩展。通常,应用程序应该使用 SMTPTransport 方法supportsExtension来验证服务器是否支持所需的服务扩展。参见RFC 1869 和其他定义特定扩展的RFC。
mail.smtp.userset boolean 如果设置为true,则在 isConnected 方法中使用RSET命令而不是NOOP命令。在某些情况下,sendmail在许多NOOP命令之后响应很慢;使用RSET可以避免这个sendmail问题。默认值为false。
mail.smtp.noop.strict boolean 如果设置为 true (默认值) ,请坚持使用来自 NOOP 命令的250响应代码来指示成功。 isConnected 方法使用 NOOP 命令确定连接是否仍然处于活动状态。 一些较旧的服务器在成功时返回错误的响应代码,一些服务器根本没有实现 NOOP 命令,因此总是返回一个失败代码。 将此属性设置为 false 以处理以这种方式损坏的服务器。 通常,当服务器超时连接时,它会发送一个421响应代码,客户机将其视为对它发出的下一个命令的响应。 有些服务器在超时连接时发送错误的故障响应代码。 在处理以这种方式损坏的服务器时,不要将此属性设置为 false。

常用配置

spring.mail.host=smtp
spring.mail.port=port
spring.mail.username=邮箱的用户名
spring.mail.password=邮箱的授权码(不是登录密码)
spring.mail.test-connection=true
# qq邮箱 必须启用ssl
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtp.auth=true
# 超时设置,防止阻塞,有些是无限时间
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=3000
spring.mail.properties.mail.smtp.writetimeout=5000