public enum TransportStrategy extends Enum<TransportStrategy>
Session
may be configured using a
TransportStrategy
implementation.Enum Constant and Description |
---|
SMTP
Vanilla SMTP with an insecure STARTTLS upgrade (if supported).
|
SMTP_OAUTH2 |
SMTP_TLS
Plaintext SMTP with a mandatory, authenticated STARTTLS upgrade.
|
SMTPS
SMTP entirely encapsulated by TLS.
|
Modifier and Type | Field and Description |
---|---|
static String |
OAUTH2_TOKEN_PROPERTY
This is used internally to keep the OAuth2 token in the Session, rather than passing the token troughout the code explicitly.
|
Modifier and Type | Method and Description |
---|---|
static @Nullable TransportStrategy |
findStrategyForSession(jakarta.mail.Session session)
For internal use only.
|
Properties |
generateProperties()
For internal use only.
|
abstract int |
getDefaultServerPort()
For internal use only.
|
abstract String |
propertyNameAuthenticate()
For internal use only.
|
abstract String |
propertyNameCheckServerIdentity()
For internal use only.
|
abstract String |
propertyNameConnectionTimeout()
For internal use only.
|
abstract String |
propertyNameEnvelopeFrom()
For internal use only.
|
abstract String |
propertyNameHost()
For internal use only.
|
abstract String |
propertyNamePort()
For internal use only.
|
abstract String |
propertyNameSocksHost()
For internal use only.
|
abstract String |
propertyNameSocksPort()
For internal use only.
|
abstract String |
propertyNameSSLTrust()
For internal use only.
|
abstract String |
propertyNameTimeout()
For internal use only.
|
abstract String |
propertyNameUsername()
For internal use only.
|
abstract String |
propertyNameWriteTimeout()
For internal use only.
|
void |
setOpportunisticTLS(@Nullable Boolean opportunisticTLS)
Determines whether TLS should be attempted for SMTP plain protocol (optional if offered by the SMTP server).
|
String |
toString(Properties properties) |
static TransportStrategy |
valueOf(String name)
Returns the enum constant of this type with the specified name.
|
static TransportStrategy[] |
values()
Returns an array containing the constants of this enum type, in
the order they are declared.
|
public static final TransportStrategy SMTP
This TransportStrategy
falls back to plaintext when a mail server does not indicate support for
STARTTLS. Additionally, even if a TLS session is negotiated, server certificates are not validated in
any way.
This TransportStrategy
only offers protection against passive network eavesdroppers when the mail server
indicates support for STARTTLS. Active network attackers can trivially bypass the encryption 1) by tampering with
the STARTTLS indicator, 2) by presenting a self-signed certificate, 3) by presenting a certificate issued by an
untrusted certificate authority; or 4) by presenting a certificate that was issued by a valid certificate
authority to a domain other than the mail server's.
For proper mail transport encryption, see SMTPS
or
SMTP_TLS
.
Implementation notes:
smtp
.mail.smtp
properties are set.mail.smtp.starttls.enable
to true
.mail.smtp.starttls.required
to false
.public static final TransportStrategy SMTPS
Strict validation of server certificates is enabled. Server certificates must be issued 1) by a certificate authority in the system trust store; and 2) to a subject matching the identity of the remote SMTP server.
Implementation notes:
smtps
.mail.smtps
properties are set.mail.smtps.quitwait
is set to false
to get rid of a strange SSLException:
jakarta.mail.MessagingException: Exception reading response; nested exception is: javax.net.ssl.SSLException: Unsupported record version Unknown-50.49 (..)
The mail is sent but the exception is unwanted. The property quitwait means If set to false, the QUIT command is sent and the connection is immediately closed. If set to true (the default), causes the transport to wait for the response to the QUIT command
public static final TransportStrategy SMTP_TLS
Strict validation of server certificates is enabled. Server certificates must be issued 1) by a certificate authority in the system trust store; and 2) to a subject matching the identity of the remote SMTP server.
Implementation notes:
smtp
.mail.smtp
properties are set.mail.smtp.starttls.enable
to true
.mail.smtp.starttls.required
to true
.public static final TransportStrategy SMTP_OAUTH2
public static final String OAUTH2_TOKEN_PROPERTY
public static TransportStrategy[] values()
for (TransportStrategy c : TransportStrategy.values()) System.out.println(c);
public static TransportStrategy valueOf(String name)
name
- the name of the enum constant to be returned.IllegalArgumentException
- if this enum type has no constant with the specified nameNullPointerException
- if the argument is nullpublic Properties generateProperties()
public abstract String propertyNameHost()
public abstract String propertyNamePort()
public abstract String propertyNameUsername()
public abstract String propertyNameAuthenticate()
public abstract String propertyNameSocksHost()
public abstract String propertyNameSocksPort()
public abstract String propertyNameConnectionTimeout()
public abstract String propertyNameWriteTimeout()
public abstract String propertyNameTimeout()
public abstract String propertyNameEnvelopeFrom()
public abstract String propertyNameSSLTrust()
public abstract String propertyNameCheckServerIdentity()
public abstract int getDefaultServerPort()
public void setOpportunisticTLS(@Nullable @Nullable Boolean opportunisticTLS)
Setting this flag to false causes SMTP
to revert to the legacy behavior.
Only has any effect when invoked via TransportStrategy.SMTP.setOpportunisticTLS(true/false)
@Nullable public static @Nullable TransportStrategy findStrategyForSession(jakarta.mail.Session session)
session
- The session to determine the current transport strategy forTRANSPORT_STRATEGY_MARKER
,
generateProperties()
public String toString(Properties properties)
Copyright © 2009–2024. All rights reserved.