Menu

## SMTP
in package

class.smtp.php : 29

PHPMailer RFC821 SMTP email transport class.

Implements RFC 821 SMTP commands and provides some utility methods for sending mail to an SMTP server.

##### Tags

author

  Chris Ryan

author

  Marcus Bointon phpmailer@synchromedia.co.uk

### Table of Contents

CRLF = " "
  SMTP line break constant.
DEBUG_CLIENT = 1
  Debug level to show client -> server messages.
DEBUG_CONNECTION = 3
  Debug level to show connection status, client -> server and server -> client messages.
DEBUG_LOWLEVEL = 4
  Debug level to show all messages.
DEBUG_OFF = 0
  Debug level for no output.
DEBUG_SERVER = 2
  Debug level to show client -> server and server -> client messages.
DEFAULT_SMTP_PORT = 25
  The SMTP port to use if one is not specified.
MAX_LINE_LENGTH = 998
  The maximum line length allowed by RFC 2822 section 2.1.1.
VERSION = '5.2.21'
  The PHPMailer SMTP version number.
$CRLF : string
  SMTP reply line ending.
$Debugoutput : string|callable
  How to handle debug output.
$do_debug : int
  Debug output level.
$do_verp : bool
  Whether to use VERP.
$SMTP_PORT : int
  SMTP server port number.
$Timelimit : int
  How long to wait for commands to complete, in seconds.
$Timeout : int
  The timeout value for connection, in seconds.
$Version : string
  The PHPMailer SMTP Version number.
$error : array<string|int, mixed>
  Error information, if any, for the last SMTP command.
$helo_rply : string|null
  The reply the server sent to us for HELO.
$last_reply : string
  The most recent reply received from the server.
$server_caps : array<string|int, mixed>|null
  The set of SMTP extensions sent in reply to EHLO command.
$smtp_conn : resource
  The socket for the server connection.
$smtp_transaction_id_patterns : array<string|int, mixed>
authenticate() : bool
  Perform SMTP authentication.
client_send() : int|bool
  Send raw data to the server.
close() : mixed
  Close the socket and clean up the state of the class.
connect() : bool
  Connect to an SMTP server.
connected() : bool
  Check connection state.
data() : bool
  Send an SMTP DATA command.
getDebugLevel() : int
  Get debug output level.
getDebugOutput() : string
  Get debug output method.
getError() : array<string|int, mixed>
  Get the latest error.
getLastReply() : string
  Get the last reply from the server.
getLastTransactionID() : bool|null|string
  Will return the ID of the last smtp transaction based on a list of patterns provided in SMTP::$smtp_transaction_id_patterns.
getServerExt() : mixed
  A multipurpose method The method works in three ways, dependent on argument value and current state 1. HELO/EHLO was not sent - returns null and set up $this->error 2. HELO was sent $name = 'HELO': returns server name $name = 'EHLO': returns boolean false $name = any string: returns null and set up $this->error 3. EHLO was sent $name = 'HELO'|'EHLO': returns server name $name = any string: if extension $name exists, returns boolean True or its options. Otherwise returns boolean False In other words, one can use this method to detect 3 conditions: - null returned: handshake was not or we don't know about ext (refer to $this->error) - false returned: the requested feature exactly not exists - positive value returned: the requested feature exists.
getServerExtList() : array<string|int, mixed>|null
  Get SMTP extensions available on the server.
getTimeout() : int
  Get SMTP timeout.
getVerp() : bool
  Get VERP address generation mode.
hello() : bool
  Send an SMTP HELO or EHLO command.
mail() : bool
  Send an SMTP MAIL command.
noop() : bool
  Send an SMTP NOOP command.
quit() : bool
  Send an SMTP QUIT command.
recipient() : bool
  Send an SMTP RCPT command.
reset() : bool
  Send an SMTP RSET command.
sendAndMail() : bool
  Send an SMTP SAML command.
setDebugLevel() : mixed
  Set debug output level.
setDebugOutput() : mixed
  Set debug output method.
setTimeout() : mixed
  Set SMTP timeout.
setVerp() : mixed
  Enable or disable VERP address generation.
startTLS() : bool
  Initiate a TLS (encrypted) session.
turn() : bool
  Send an SMTP TURN command.
verify() : bool
  Send an SMTP VRFY command.
edebug() : mixed
  Output debugging info via a user-selected method.
errorHandler() : mixed
  Reports an error number and string.
get_lines() : string
  Read the SMTP server's response.
hmac() : string
  Calculate an MD5 HMAC hash.
parseHelloFields() : mixed
  Parse a reply to HELO/EHLO command to discover server extensions.
sendCommand() : bool
  Send a command to an SMTP server and check its return code.
sendHello() : bool
  Send an SMTP HELO or EHLO command.
setError() : mixed
  Set error messages and codes.

### Constants

#### CRLF

class.smtp.php : 42

SMTP line break constant.

`public string CRLF = " "`

#### DEBUG_CLIENT

class.smtp.php : 62

Debug level to show client -> server messages.

`public mixed DEBUG_CLIENT = 1`

#### DEBUG_CONNECTION

class.smtp.php : 70

Debug level to show connection status, client -> server and server -> client messages.

`public mixed DEBUG_CONNECTION = 3`

#### DEBUG_LOWLEVEL

class.smtp.php : 74

Debug level to show all messages.

`public mixed DEBUG_LOWLEVEL = 4`

#### DEBUG_OFF

class.smtp.php : 58

Debug level for no output.

`public mixed DEBUG_OFF = 0`

#### DEBUG_SERVER

class.smtp.php : 66

Debug level to show client -> server and server -> client messages.

`public mixed DEBUG_SERVER = 2`

#### DEFAULT_SMTP_PORT

class.smtp.php : 48

The SMTP port to use if one is not specified.

`public int DEFAULT_SMTP_PORT = 25`

#### MAX_LINE_LENGTH

class.smtp.php : 54

The maximum line length allowed by RFC 2822 section 2.1.1.

`public int MAX_LINE_LENGTH = 998`

#### VERSION

class.smtp.php : 36

The PHPMailer SMTP version number.

`public string VERSION = '5.2.21'`

### Properties

#### $CRLF

class.smtp.php : 101

SMTP reply line ending.

`public string $CRLF = " "`

##### Tags

deprecated

  Use the `CRLF` constant instead

see
  SMTP::CRLF

#### $Debugoutput

class.smtp.php : 128

How to handle debug output.

`public string|callable $Debugoutput = 'echo'`

Options: `echo` Output plain-text as-is, appropriate for CLI `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output `error_log` Output to error log as configured in php.ini.

Alternatively, you can provide a callable expecting two params: a message string and the debug level: `$smtp->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};`

#### $do_debug

class.smtp.php : 113

Debug output level.

`public int $do_debug = self::DEBUG_OFF`

Options: self::DEBUG_OFF (`0`) No debug output, default self::DEBUG_CLIENT (`1`) Client commands self::DEBUG_SERVER (`2`) Client commands and server responses self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages.

#### $do_verp

class.smtp.php : 137

Whether to use VERP.

`public bool $do_verp = alse`

##### Tags

see
  http://en.wikipedia.org/wiki/Variable_envelope_return_path
see
  http://www.postfix.org/VERP_README.html

  Info on VERP

#### $SMTP_PORT

class.smtp.php : 92

SMTP server port number.

`public int $SMTP_PORT = 25`

##### Tags

deprecated

  This is only ever used as a default value, so use the `DEFAULT_SMTP_PORT` constant instead

see
  SMTP::DEFAULT_SMTP_PORT

#### $Timelimit

class.smtp.php : 154

How long to wait for commands to complete, in seconds.

`public int $Timelimit = 300`

Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.

#### $Timeout

class.smtp.php : 147

The timeout value for connection, in seconds.

`public int $Timeout = 300`

Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2 This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure.

##### Tags

see
  http://tools.ietf.org/html/rfc2821#section-4.5.3.2

#### $Version

class.smtp.php : 83

The PHPMailer SMTP Version number.

`public string $Version = '5.2.21'`

##### Tags

deprecated

  Use the `VERSION` constant instead

see
  SMTP::VERSION

#### $error

class.smtp.php : 176

Error information, if any, for the last SMTP command.

`protected array<string|int, mixed> $error = array('error' => '', 'detail' => '', 'smtp_code' => '', 'smtp_code_ex' => '')`

#### $helo_rply

class.smtp.php : 188

The reply the server sent to us for HELO.

`protected string|null $helo_rply = ull`

If null, no HELO string has yet been received.

#### $last_reply

class.smtp.php : 205

The most recent reply received from the server.

`protected string $last_reply = ''`

#### $server_caps

class.smtp.php : 199

The set of SMTP extensions sent in reply to EHLO command.

`protected array<string|int, mixed>|null $server_caps = ull`

Indexes of the array are extension names. Value at index 'HELO' or 'EHLO' (according to command that was sent) represents the server name. In case of HELO it is the only element of the array. Other values can be boolean TRUE or an array containing extension options. If null, no HELO/EHLO string has yet been received.

#### $smtp_conn

class.smtp.php : 170

The socket for the server connection.

`protected resource $smtp_conn`

#### $smtp_transaction_id_patterns

class.smtp.php : 160
`protected array<string|int, mixed> $smtp_transaction_id_patterns = array('exim' => '/[0-9]{3} OK id=(.*)/', 'sendmail' => '/[0-9]{3} 2.0.0 (.*) Message/', 'postfix' => '/[0-9]{3} 2.0.0 Ok: queued as (.*)/')`

patterns to extract smtp transaction id from smtp reply Only first capture group will be use, use non-capturing group to deal with it Extend this class to override this property to fulfil your needs

### Methods

#### authenticate()

class.smtp.php : 382

Perform SMTP authentication.

`public authenticate(string $username, string $password[, string $authtype = null ][, string $realm = '' ][, string $workstation = '' ][, null|OAuth $OAuth = null ]) : bool`

Must be run after hello().

##### Parameters

$username : string

  The user name

$password : string

  The password

$authtype : string = null

  The auth type (PLAIN, LOGIN, NTLM, CRAM-MD5, XOAUTH2)

$realm : string = ''

  The auth realm for NTLM

$workstation : string = ''

  The auth workstation for NTLM

$OAuth : null|OAuth = null

  An optional OAuth instance (@see PHPMailerOAuth)

##### Tags

see
  hello()

##### Return values

bool —

True if successfully authenticated.* @access public

#### client_send()

class.smtp.php : 989

Send raw data to the server.

`public client_send(string $data) : int|bool`

##### Parameters

$data : string

  The data to send

##### Return values

int|bool —

The number of bytes sent to the server or false on error

#### close()

class.smtp.php : 604

Close the socket and clean up the state of the class.

`public close() : mixed`

Don't use this function without first trying to use QUIT.

##### Tags

see
  quit()

##### Return values

mixed —

#### connect()

class.smtp.php : 259

Connect to an SMTP server.

`public connect(string $host[, int $port = null ][, int $timeout = 30 ][, array<string|int, mixed> $options = [] ]) : bool`

##### Parameters

$host : string

  SMTP server IP or host name

$port : int = null

  The port number to connect to

$timeout : int = 30

  How long to wait for the connection to open

$options : array<string|int, mixed> = []

  An array of options for stream_context_create()

##### Return values

bool —

#### connected()

class.smtp.php : 578

Check connection state.

`public connected() : bool`

##### Return values

bool —

true if connected

#### data()

class.smtp.php : 630

Send an SMTP DATA command.

`public data(string $msg_data) : bool`

Issues a data command and sends the msg_data to the server, finializing the mail transaction. $msg_data is the message that is to be send with the headers. Each header needs to be on a single line followed by a with the message headers and the message body being separated by and additional . Implements rfc 821: DATA .

##### Parameters

$msg_data : string

  Message data to send

##### Return values

bool —

#### getDebugLevel()

class.smtp.php : 1195

Get debug output level.

`public getDebugLevel() : int`

##### Return values

int —

#### getDebugOutput()

class.smtp.php : 1175

Get debug output method.

`public getDebugOutput() : string`

##### Return values

string —

#### getError()

class.smtp.php : 1001

Get the latest error.

`public getError() : array<string|int, mixed>`

##### Return values

array<string|int, mixed> —

#### getLastReply()

class.smtp.php : 1066

Get the last reply from the server.

`public getLastReply() : string`

##### Return values

string —

#### getLastTransactionID()

class.smtp.php : 1245

Will return the ID of the last smtp transaction based on a list of patterns provided in SMTP::$smtp_transaction_id_patterns.

`public getLastTransactionID() : bool|null|string`

If no reply has been received yet, it will return null. If no pattern has been matched, it will return false.

##### Return values

bool|null|string —

#### getServerExt()

class.smtp.php : 1037

A multipurpose method The method works in three ways, dependent on argument value and current state 1. HELO/EHLO was not sent - returns null and set up $this->error 2. HELO was sent $name = 'HELO': returns server name $name = 'EHLO': returns boolean false $name = any string: returns null and set up $this->error 3. EHLO was sent $name = 'HELO'|'EHLO': returns server name $name = any string: if extension $name exists, returns boolean True or its options. Otherwise returns boolean False In other words, one can use this method to detect 3 conditions: - null returned: handshake was not or we don't know about ext (refer to $this->error) - false returned: the requested feature exactly not exists - positive value returned: the requested feature exists.

`public getServerExt(string $name) : mixed`

##### Parameters

$name : string

  Name of SMTP extension or 'HELO'|'EHLO'

##### Return values

mixed —

#### getServerExtList()

class.smtp.php : 1011

Get SMTP extensions available on the server.

`public getServerExtList() : array<string|int, mixed>|null`

##### Return values

array<string|int, mixed>|null —

#### getTimeout()

class.smtp.php : 1215

Get SMTP timeout.

`public getTimeout() : int`

##### Return values

int —

#### getVerp()

class.smtp.php : 1137

Get VERP address generation mode.

`public getVerp() : bool`

##### Return values

bool —

#### hello()

class.smtp.php : 721

Send an SMTP HELO or EHLO command.

`public hello([string $host = '' ]) : bool`

Used to identify the sending server to the receiving server. This makes sure that client and server are in a known state. Implements RFC 821: HELO and RFC 2821 EHLO.

##### Parameters

$host : string = ''

  The host name or IP to connect to

##### Return values

bool —

#### mail()

class.smtp.php : 805

Send an SMTP MAIL command.

`public mail(string $from) : bool`

Starts a mail transaction from the email address specified in $from. Returns true if successful or false otherwise. If True the mail transaction is started and then one or more recipient commands may be called followed by a data command. Implements rfc 821: MAIL FROM: .

##### Parameters

$from : string

  Source address of this message

##### Return values

bool —

#### noop()

class.smtp.php : 960

Send an SMTP NOOP command.

`public noop() : bool`

Used to keep keep-alives alive, doesn't actually do anything.

##### Return values

bool —

#### quit()

class.smtp.php : 823

Send an SMTP QUIT command.

`public quit([bool $close_on_error = true ]) : bool`

Closes the socket if there is no error or the $close_on_error argument is true. Implements from rfc 821: QUIT .

##### Parameters

$close_on_error : bool = true

  Should the connection close if an error occurs?

##### Return values

bool —

#### recipient()

class.smtp.php : 845

Send an SMTP RCPT command.

`public recipient(string $address) : bool`

Sets the TO argument to $toaddr. Returns true if the recipient was accepted false if it was rejected. Implements from rfc 821: RCPT TO: .

##### Parameters

$address : string

  The address the message is being sent to

##### Return values

bool —

#### reset()

class.smtp.php : 859

Send an SMTP RSET command.

`public reset() : bool`

Abort any transaction that is currently in progress. Implements rfc 821: RSET .

##### Return values

bool —

true on success

#### sendAndMail()

class.smtp.php : 937

Send an SMTP SAML command.

`public sendAndMail(string $from) : bool`

Starts a mail transaction from the email address specified in $from. Returns true if successful or false otherwise. If True the mail transaction is started and then one or more recipient commands may be called followed by a data command. This command will send the message to the users terminal if they are logged in and send them an email. Implements rfc 821: SAML FROM: .

##### Parameters

$from : string

  The address the message is from

##### Return values

bool —

#### setDebugLevel()

class.smtp.php : 1185

Set debug output level.

`public setDebugLevel(int $level) : mixed`

##### Parameters

$level : int

##### Return values

mixed —

#### setDebugOutput()

class.smtp.php : 1165

Set debug output method.

`public setDebugOutput([string|callable $method = 'echo' ]) : mixed`

##### Parameters

$method : string|callable = 'echo'

  the name of the mechanism to use for debugging output, or a callable to handle it

##### Return values

mixed —

#### setTimeout()

class.smtp.php : 1205

Set SMTP timeout.

`public setTimeout(int $timeout) : mixed`

##### Parameters

$timeout : int

##### Return values

mixed —

#### setVerp()

class.smtp.php : 1127

Enable or disable VERP address generation.

`public setVerp([bool $enabled = false ]) : mixed`

##### Parameters

$enabled : bool = false

##### Return values

mixed —

#### startTLS()

class.smtp.php : 341

Initiate a TLS (encrypted) session.

`public startTLS() : bool`

##### Return values

bool —

#### turn()

class.smtp.php : 974

Send an SMTP TURN command.

`public turn() : bool`

This is an optional command for SMTP that this class does not support. This method is here to make the RFC821 Definition complete for this class and may be implemented in future Implements from rfc 821: TURN .

##### Return values

bool —

#### verify()

class.smtp.php : 949

Send an SMTP VRFY command.

`public verify(string $name) : bool`

##### Parameters

$name : string

  The name to verify

##### Return values

bool —

#### edebug()

class.smtp.php : 216

Output debugging info via a user-selected method.

`protected edebug(string $str, int $level) : mixed`

##### Parameters

$str : string

  Debug string to output

$level : int

  The debug level of this message; see DEBUG_* constants

##### Tags

see
  SMTP::$Debugoutput
see
  SMTP::$do_debug

##### Return values

mixed —

#### errorHandler()

class.smtp.php : 1226

Reports an error number and string.

`protected errorHandler(int $errno, string $errmsg) : mixed`

##### Parameters

$errno : int

  the error number returned by PHP

$errmsg : string

  the error message returned by PHP

##### Return values

mixed —

#### get_lines()

class.smtp.php : 1080

Read the SMTP server's response.

`protected get_lines() : string`

Either before eof or socket timeout occurs on the operation. With SMTP we can tell if we have more lines to read if the 4th character is '-' symbol. If it is a space then we don't need to read anything else.

##### Return values

string —

#### hmac()

class.smtp.php : 547

Calculate an MD5 HMAC hash.

`protected hmac(string $data, string $key) : string`

Works like hash_hmac('md5', $data, $key) in case that function is not available.

##### Parameters

$data : string

  The data to hash

$key : string

  The key to hash with

##### Return values

string —

#### parseHelloFields()

class.smtp.php : 757

Parse a reply to HELO/EHLO command to discover server extensions.

`protected parseHelloFields(string $type) : mixed`

In case of HELO, the only parameter that can be discovered is a server name.

##### Parameters

$type : string
  - 'HELO' or 'EHLO'

##### Return values

mixed —

#### sendCommand()

class.smtp.php : 873

Send a command to an SMTP server and check its return code.

`protected sendCommand(string $command, string $commandstring, int|array<string|int, mixed> $expect) : bool`

##### Parameters

$command : string

  The command name - not sent to the server

$commandstring : string

  The actual command to send

$expect : int|array<string|int, mixed>

  One or more expected integer success codes

##### Return values

bool —

true on success

#### sendHello()

class.smtp.php : 738

Send an SMTP HELO or EHLO command.

`protected sendHello(string $hello, string $host) : bool`

Low-level implementation used by hello().

##### Parameters

$hello : string

  The HELO string

$host : string

  The hostname to say we are

##### Tags

see
  hello()

##### Return values

bool —

#### setError()

class.smtp.php : 1150

Set error messages and codes.

`protected setError(string $message[, string $detail = '' ][, string $smtp_code = '' ][, string $smtp_code_ex = '' ]) : mixed`

##### Parameters

$message : string

  The error message

$detail : string = ''

  Further detail on the error

$smtp_code : string = ''

  An associated SMTP error code

$smtp_code_ex : string = ''

  Extended SMTP code

##### Return values

mixed —

## Search results