# Poco::Net

# class SecureSMTPClientSession

Library: NetSSL_OpenSSL
Package: Mail
Header: Poco/Net/SecureSMTPClientSession.h

## Description

This class implements an Simple Mail Transfer Protocol (SMTP, RFC 2821) client for sending e-mail messages that supports the STARTTLS command for secure connections.

Usage is as follows:

1. Create a SecureSMTPClientSession object.
2. Call login() or login(hostname).
3. Call startTLS() to switch to a secure connection. Check the return value to see if a secure connection has actually been established (not all servers may support STARTTLS).
4. Call any of the login() methods to securely authenticate with a username and password.
5. Send the message(s).

## Inheritance

Direct Base Classes: SMTPClientSession

All Base Classes: SMTPClientSession

## Member Summary

Member Functions: startTLS

Inherited Functions: close, getTimeout, host, isPermanentNegative, isPositiveCompletion, isPositiveIntermediate, isTransientNegative, login, loginUsingCRAM, loginUsingCRAMMD5, loginUsingCRAMSHA1, loginUsingLogin, loginUsingNTLM, loginUsingPlain, loginUsingXOAUTH2, open, sendAddresses, sendCommand, sendData, sendMessage, setTimeout, socket

## Constructors

### SecureSMTPClientSession

explicit SecureSMTPClientSession(
const StreamSocket & socket
);

Creates the SecureSMTPClientSession using the given socket, which must be connected to a SMTP server.

### SecureSMTPClientSession

SecureSMTPClientSession(
const std::string & host,
Poco::UInt16 port = SMTP_PORT
);

Creates the SecureSMTPClientSession using a socket connected to the given host and port.

## Destructor

### ~SecureSMTPClientSession

virtual ~SecureSMTPClientSession();

Destroys the SMTPClientSession.

## Member Functions

### startTLS

bool startTLS();

Sends a STARTTLS command and, if successful, creates a secure SSL/TLS connection over the existing socket connection.

Must be called after login() or login(hostname). If successful, login() can be called again to authenticate the user.

Returns true if the STARTTLS command was successful, false otherwise.

### startTLS

bool startTLS(
Context::Ptr pContext
);

Sends a STARTTLS command and, if successful, creates a secure SSL/TLS connection over the existing socket connection.

Uses the given Context object for creating the SSL/TLS connection.

Must be called after login() or login(hostname). If successful, login() can be called again to authenticate the user.

Returns true if the STARTTLS command was successful, false otherwise.