An SMTP client.
This implements RFC 2821.
AMBIGUOUS
protected static final int AMBIGUOUS
AUTH
protected static final String AUTH
DATA
protected static final String DATA
DEFAULT_PORT
public static final int DEFAULT_PORT
The default SMTP port.
EHLO
protected static final String EHLO
EXPN
protected static final String EXPN
FINISH_DATA
protected static final String FINISH_DATA
HELO
protected static final String HELO
HELP
protected static final String HELP
INFO
protected static final int INFO
MAIL_FROM
protected static final String MAIL_FROM
NOOP
protected static final String NOOP
OK
protected static final int OK
OK_NOT_LOCAL
protected static final int OK_NOT_LOCAL
OK_UNVERIFIED
protected static final int OK_UNVERIFIED
QUIT
protected static final String QUIT
RCPT_TO
protected static final String RCPT_TO
READY
protected static final int READY
RSET
protected static final String RSET
SEND_DATA
protected static final int SEND_DATA
SMTP_TRACE
public static final Level SMTP_TRACE
The network trace level.
SP
protected static final String SP
STARTTLS
protected static final String STARTTLS
VRFY
protected static final String VRFY
continuation
protected boolean continuation
If true, there are more responses to read.
greeting
protected final String greeting
The greeting message given by the server.
in
protected LineInputStream in
The input stream used to read responses from the server.
logger
public static final Logger logger
The logger used for SMTP protocol traces.
out
protected CRLFOutputStream out
The output stream used to send commands to the server.
response
protected String response
The last response message received from the server.
socket
protected Socket socket
The underlying socket used for communicating with the server.
SMTPConnection
public SMTPConnection(String host)
throws IOException
Creates a new connection to the specified host, using the default SMTP
port.
host
- the server hostname
SMTPConnection
public SMTPConnection(String host,
int port)
throws IOException
Creates a new connection to the specified host, using the specified
port.
host
- the server hostnameport
- the port to connect to
SMTPConnection
public SMTPConnection(String host,
int port,
int connectionTimeout,
int timeout)
throws IOException
Creates a new connection to the specified host, using the specified
port.
host
- the server hostnameport
- the port to connect toconnectionTimeout
- the connection timeout in millisecondstimeout
- the I/O timeout in milliseconds
SMTPConnection
public SMTPConnection(String host,
int port,
int connectionTimeout,
int timeout,
boolean secure,
TrustManager tm)
throws IOException
Creates a new connection to the specified host, using the specified
port.
host
- the server hostnameport
- the port to connect toconnectionTimeout
- the connection timeout in millisecondstimeout
- the I/O timeout in millisecondssecure
- true to create an SMTPS connectiontm
- a trust manager used to check SSL certificates, or null to
use the default
authenticate
public boolean authenticate(String mechanism,
String username,
String password)
throws IOException
Authenticates the connection using the specified SASL mechanism,
username, and password.
mechanism
- a SASL authentication mechanism, e.g. LOGIN, PLAIN,
CRAM-MD5, GSSAPIusername
- the authentication principalpassword
- the authentication credentials
- true if authentication was successful, false otherwise
data
public OutputStream data()
throws IOException
Requests an output stream to write message data to.
When the entire message has been written to the stream, the
flush
method must be called on the stream. Until then no
further methods should be called on the connection.
Immediately after this procedure is complete, finishData
must be called to complete the transfer and determine its success.
- a stream for writing messages to
ehlo
public List ehlo(String hostname)
throws IOException
Issues an EHLO command.
If successful, returns a list of the SMTP extensions supported by the
server.
Otherwise returns null, and HELO should be called.
hostname
- the local host name
expn
public List expn(String address)
throws IOException
Returns a list of valid possibilities for the specified mailing list,
or null on failure.
address
- a mailing list name
finishData
public boolean finishData()
throws IOException
Completes the DATA procedure.
- true id transfer was successful, false otherwise
getAllResponses
protected int getAllResponses()
throws IOException
Returns the next response from the server.
If the response is a continuation, continues to read responses until
continuation ceases. If a different response code from the first is
encountered, this causes a protocol exception.
getGreeting
public String getGreeting()
Returns the server greeting message.
getLastResponse
public String getLastResponse()
Returns the text of the last response received from the server.
getResponse
protected int getResponse()
throws IOException
Returns the next response from the server.
getSSLSocketFactory
protected SSLSocketFactory getSSLSocketFactory(TrustManager tm)
throws GeneralSecurityException
Returns a configured SSLSocketFactory to use in creating new SSL
sockets.
tm
- an optional trust manager to use
helo
public boolean helo(String hostname)
throws IOException
Issues a HELO command.
hostname
- the local host name
help
public List help(String arg)
throws IOException
Returns some useful information about the specified parameter.
Typically this is a command.
arg
- the context of the query, or null for general information
- a list of possibly useful information, or null if the command
failed.
mailFrom
public boolean mailFrom(String reversePath,
ParameterList parameters)
throws IOException
Execute a MAIL command.
reversePath
- the source mailbox(from address)parameters
- optional ESMTP parameters
- true if accepted, false otherwise
noop
public void noop()
throws IOException
Issues a NOOP command.
This does nothing, but can be used to keep the connection alive.
quit
public void quit()
throws IOException
Close the connection to the server.
rcptTo
public boolean rcptTo(String forwardPath,
ParameterList parameters)
throws IOException
Execute a RCPT command.
forwardPath
- the forward-path(recipient address)parameters
- optional ESMTP parameters
- true if successful, false otherwise
rset
public void rset()
throws IOException
Aborts the current mail transaction.
send
protected void send(String command)
throws IOException
Send the specified command string to the server.
command
- the command to send
starttls
public boolean starttls()
throws IOException
Negotiate TLS over the current connection.
This depends on many features, such as the JSSE classes being in the
classpath. Returns true if successful, false otherwise.
starttls
public boolean starttls(TrustManager tm)
throws IOException
Negotiate TLS over the current connection.
This depends on many features, such as the JSSE classes being in the
classpath. Returns true if successful, false otherwise.
tm
- the custom trust manager to use
vrfy
public List vrfy(String address)
throws IOException
Returns a list of valid possibilities for the specified address, or
null on failure.
address
- a mailbox, or real name and mailbox