ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
SMTP Class Reference
+ Collaboration diagram for SMTP:

Public Member Functions

 connect ($host, $port=null, $timeout=30, $options=array())
 Connect to an SMTP server. More...
 
 startTLS ()
 Initiate a TLS (encrypted) session. More...
 
 authenticate ( $username, $password, $authtype=null, $realm='', $workstation='', $OAuth=null)
 Perform SMTP authentication. More...
 
 connected ()
 Check connection state. More...
 
 close ()
 Close the socket and clean up the state of the class. More...
 
 data ($msg_data)
 Send an SMTP DATA command. More...
 
 hello ($host='')
 Send an SMTP HELO or EHLO command. More...
 
 mail ($from)
 Send an SMTP MAIL command. More...
 
 quit ($close_on_error=true)
 Send an SMTP QUIT command. More...
 
 recipient ($address)
 Send an SMTP RCPT command. More...
 
 reset ()
 Send an SMTP RSET command. More...
 
 sendAndMail ($from)
 Send an SMTP SAML command. More...
 
 verify ($name)
 Send an SMTP VRFY command. More...
 
 noop ()
 Send an SMTP NOOP command. More...
 
 turn ()
 Send an SMTP TURN command. More...
 
 client_send ($data)
 Send raw data to the server. More...
 
 getError ()
 Get the latest error. More...
 
 getServerExtList ()
 Get SMTP extensions available on the server public. More...
 
 getServerExt ($name)
 A multipurpose method The method works in three ways, dependent on argument value and current state. More...
 
 getLastReply ()
 Get the last reply from the server. More...
 
 setVerp ($enabled=false)
 Enable or disable VERP address generation. More...
 
 getVerp ()
 Get VERP address generation mode. More...
 
 setDebugOutput ($method='echo')
 Set debug output method. More...
 
 getDebugOutput ()
 Get debug output method. More...
 
 setDebugLevel ($level=0)
 Set debug output level. More...
 
 getDebugLevel ()
 Get debug output level. More...
 
 setTimeout ($timeout=0)
 Set SMTP timeout. More...
 
 getTimeout ()
 Get SMTP timeout. More...
 
 getLastTransactionID ()
 Will return the ID of the last smtp transaction based on a list of patterns provided in SMTP::$smtp_transaction_id_patterns. More...
 

Data Fields

const VERSION = '5.2.24'
 
const CRLF = "\r\n"
 
const DEFAULT_SMTP_PORT = 25
 
const MAX_LINE_LENGTH = 998
 
const DEBUG_OFF = 0
 Debug level for no output. More...
 
const DEBUG_CLIENT = 1
 Debug level to show client -> server messages. More...
 
const DEBUG_SERVER = 2
 Debug level to show client -> server and server -> client messages. More...
 
const DEBUG_CONNECTION = 3
 Debug level to show connection status, client -> server and server -> client messages. More...
 
const DEBUG_LOWLEVEL = 4
 Debug level to show all messages. More...
 
 $Version = '5.2.24'
 
 $SMTP_PORT = 25
 
 $CRLF = "\r\n"
 
 $do_debug = self::DEBUG_OFF
 
 $Debugoutput = 'echo'
 
 $do_verp = false
 
 $Timeout = 300
 
 $Timelimit = 300
 

Protected Member Functions

 edebug ($str, $level=0)
 Output debugging info via a user-selected method. More...
 
 hmac ($data, $key)
 Calculate an MD5 HMAC hash. More...
 
 sendHello ($hello, $host)
 Send an SMTP HELO or EHLO command. More...
 
 parseHelloFields ($type)
 Parse a reply to HELO/EHLO command to discover server extensions. More...
 
 sendCommand ($command, $commandstring, $expect)
 Send a command to an SMTP server and check its return code. More...
 
 get_lines ()
 Read the SMTP server's response. More...
 
 setError ($message, $detail='', $smtp_code='', $smtp_code_ex='')
 Set error messages and codes. More...
 
 errorHandler ($errno, $errmsg, $errfile='', $errline=0)
 Reports an error number and string. More...
 

Protected Attributes

 $smtp_transaction_id_patterns
 
 $smtp_conn
 
 $error
 
 $helo_rply = null
 
 $server_caps = null
 
 $last_reply = ''
 

Detailed Description

Definition at line 27 of file class.smtp.php.

Member Function Documentation

◆ authenticate()

SMTP::authenticate (   $username,
  $password,
  $authtype = null,
  $realm = '',
  $workstation = '',
  $OAuth = null 
)

Perform SMTP authentication.

Must be run after hello().

See also
hello()
Parameters
string$usernameThe user name
string$passwordThe password
string$authtypeThe auth type (PLAIN, LOGIN, NTLM, CRAM-MD5, XOAUTH2)
string$realmThe auth realm for NTLM
string$workstationThe auth workstation for NTLM
null | OAuth$OAuthAn optional OAuth instance (
See also
PHPMailerOAuth)
Returns
bool True if successfully authenticated.* public

Definition at line 387 of file class.smtp.php.

References $password, $response, array, edebug(), hmac(), sendCommand(), and setError().

394  {
395  if (!$this->server_caps) {
396  $this->setError('Authentication is not allowed before HELO/EHLO');
397  return false;
398  }
399 
400  if (array_key_exists('EHLO', $this->server_caps)) {
401  // SMTP extensions are available; try to find a proper authentication method
402  if (!array_key_exists('AUTH', $this->server_caps)) {
403  $this->setError('Authentication is not allowed at this stage');
404  // 'at this stage' means that auth may be allowed after the stage changes
405  // e.g. after STARTTLS
406  return false;
407  }
408 
409  self::edebug('Auth method requested: ' . ($authtype ? $authtype : 'UNKNOWN'), self::DEBUG_LOWLEVEL);
410  self::edebug(
411  'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']),
412  self::DEBUG_LOWLEVEL
413  );
414 
415  if (empty($authtype)) {
416  foreach (array('CRAM-MD5', 'LOGIN', 'PLAIN', 'NTLM', 'XOAUTH2') as $method) {
417  if (in_array($method, $this->server_caps['AUTH'])) {
418  $authtype = $method;
419  break;
420  }
421  }
422  if (empty($authtype)) {
423  $this->setError('No supported authentication methods found');
424  return false;
425  }
426  self::edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL);
427  }
428 
429  if (!in_array($authtype, $this->server_caps['AUTH'])) {
430  $this->setError("The requested authentication method \"$authtype\" is not supported by the server");
431  return false;
432  }
433  } elseif (empty($authtype)) {
434  $authtype = 'LOGIN';
435  }
436  switch ($authtype) {
437  case 'PLAIN':
438  // Start authentication
439  if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) {
440  return false;
441  }
442  // Send encoded username and password
443  if (!$this->sendCommand(
444  'User & Password',
445  base64_encode("\0" . $username . "\0" . $password),
446  235
447  )
448  ) {
449  return false;
450  }
451  break;
452  case 'LOGIN':
453  // Start authentication
454  if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) {
455  return false;
456  }
457  if (!$this->sendCommand("Username", base64_encode($username), 334)) {
458  return false;
459  }
460  if (!$this->sendCommand("Password", base64_encode($password), 235)) {
461  return false;
462  }
463  break;
464  case 'XOAUTH2':
465  //If the OAuth Instance is not set. Can be a case when PHPMailer is used
466  //instead of PHPMailerOAuth
467  if (is_null($OAuth)) {
468  return false;
469  }
470  $oauth = $OAuth->getOauth64();
471 
472  // Start authentication
473  if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) {
474  return false;
475  }
476  break;
477  case 'NTLM':
478  /*
479  * ntlm_sasl_client.php
480  * Bundled with Permission
481  *
482  * How to telnet in windows:
483  * http://technet.microsoft.com/en-us/library/aa995718%28EXCHG.65%29.aspx
484  * PROTOCOL Docs http://curl.haxx.se/rfc/ntlm.html#ntlmSmtpAuthentication
485  */
486  require_once 'extras/ntlm_sasl_client.php';
487  $temp = new stdClass;
488  $ntlm_client = new ntlm_sasl_client_class;
489  //Check that functions are available
490  if (!$ntlm_client->initialize($temp)) {
491  $this->setError($temp->error);
492  $this->edebug(
493  'You need to enable some modules in your php.ini file: '
494  . $this->error['error'],
495  self::DEBUG_CLIENT
496  );
497  return false;
498  }
499  //msg1
500  $msg1 = $ntlm_client->typeMsg1($realm, $workstation); //msg1
501 
502  if (!$this->sendCommand(
503  'AUTH NTLM',
504  'AUTH NTLM ' . base64_encode($msg1),
505  334
506  )
507  ) {
508  return false;
509  }
510  //Though 0 based, there is a white space after the 3 digit number
511  //msg2
512  $challenge = substr($this->last_reply, 3);
513  $challenge = base64_decode($challenge);
514  $ntlm_res = $ntlm_client->NTLMResponse(
515  substr($challenge, 24, 8),
516  $password
517  );
518  //msg3
519  $msg3 = $ntlm_client->typeMsg3(
520  $ntlm_res,
521  $username,
522  $realm,
523  $workstation
524  );
525  // send encoded username
526  return $this->sendCommand('Username', base64_encode($msg3), 235);
527  case 'CRAM-MD5':
528  // Start authentication
529  if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) {
530  return false;
531  }
532  // Get the challenge
533  $challenge = base64_decode(substr($this->last_reply, 4));
534 
535  // Build the response
536  $response = $username . ' ' . $this->hmac($challenge, $password);
537 
538  // send encoded credentials
539  return $this->sendCommand('Username', base64_encode($response), 235);
540  default:
541  $this->setError("Authentication method \"$authtype\" is not supported");
542  return false;
543  }
544  return true;
545  }
hmac($data, $key)
Calculate an MD5 HMAC hash.
Definition: class.smtp.php:556
sendCommand($command, $commandstring, $expect)
Send a command to an SMTP server and check its return code.
Definition: class.smtp.php:874
$password
Definition: pwgen.php:17
Create styles array
The data for the language used.
edebug($str, $level=0)
Output debugging info via a user-selected method.
Definition: class.smtp.php:213
$response
setError($message, $detail='', $smtp_code='', $smtp_code_ex='')
Set error messages and codes.
+ Here is the call graph for this function:

◆ client_send()

SMTP::client_send (   $data)

Send raw data to the server.

Parameters
string$dataThe data to send public
Returns
integer|boolean The number of bytes sent to the server or false on error

Definition at line 989 of file class.smtp.php.

References $data, $result, array, and edebug().

Referenced by data(), and sendCommand().

990  {
991  $this->edebug("CLIENT -> SERVER: $data", self::DEBUG_CLIENT);
992  set_error_handler(array($this, 'errorHandler'));
993  $result = fwrite($this->smtp_conn, $data);
994  restore_error_handler();
995  return $result;
996  }
$result
Create styles array
The data for the language used.
edebug($str, $level=0)
Output debugging info via a user-selected method.
Definition: class.smtp.php:213
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ close()

SMTP::close ( )

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

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

See also
quit() User interface
Returns
void

Definition at line 613 of file class.smtp.php.

References edebug(), and setError().

Referenced by connected(), and quit().

614  {
615  $this->setError('');
616  $this->server_caps = null;
617  $this->helo_rply = null;
618  if (is_resource($this->smtp_conn)) {
619  // close the connection and cleanup
620  fclose($this->smtp_conn);
621  $this->smtp_conn = null; //Makes for cleaner serialization
622  $this->edebug('Connection: closed', self::DEBUG_CONNECTION);
623  }
624  }
edebug($str, $level=0)
Output debugging info via a user-selected method.
Definition: class.smtp.php:213
setError($message, $detail='', $smtp_code='', $smtp_code_ex='')
Set error messages and codes.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ connect()

SMTP::connect (   $host,
  $port = null,
  $timeout = 30,
  $options = array() 
)

Connect to an SMTP server.

Parameters
string$hostSMTP server IP or host name
integer$portThe port number to connect to
integer$timeoutHow long to wait for the connection to open
array$optionsAn array of options for stream_context_create() public
Returns
boolean

Definition at line 257 of file class.smtp.php.

References $options, array, connected(), edebug(), get_lines(), and setError().

258  {
259  static $streamok;
260  //This is enabled by default since 5.0.0 but some providers disable it
261  //Check this once and cache the result
262  if (is_null($streamok)) {
263  $streamok = function_exists('stream_socket_client');
264  }
265  // Clear errors to avoid confusion
266  $this->setError('');
267  // Make sure we are __not__ connected
268  if ($this->connected()) {
269  // Already connected, generate error
270  $this->setError('Already connected to a server');
271  return false;
272  }
273  if (empty($port)) {
274  $port = self::DEFAULT_SMTP_PORT;
275  }
276  // Connect to the SMTP server
277  $this->edebug(
278  "Connection: opening to $host:$port, timeout=$timeout, options=" .
279  var_export($options, true),
280  self::DEBUG_CONNECTION
281  );
282  $errno = 0;
283  $errstr = '';
284  if ($streamok) {
285  $socket_context = stream_context_create($options);
286  set_error_handler(array($this, 'errorHandler'));
287  $this->smtp_conn = stream_socket_client(
288  $host . ":" . $port,
289  $errno,
290  $errstr,
291  $timeout,
292  STREAM_CLIENT_CONNECT,
293  $socket_context
294  );
295  restore_error_handler();
296  } else {
297  //Fall back to fsockopen which should work in more places, but is missing some features
298  $this->edebug(
299  "Connection: stream_socket_client not available, falling back to fsockopen",
300  self::DEBUG_CONNECTION
301  );
302  set_error_handler(array($this, 'errorHandler'));
303  $this->smtp_conn = fsockopen(
304  $host,
305  $port,
306  $errno,
307  $errstr,
308  $timeout
309  );
310  restore_error_handler();
311  }
312  // Verify we connected properly
313  if (!is_resource($this->smtp_conn)) {
314  $this->setError(
315  'Failed to connect to server',
316  $errno,
317  $errstr
318  );
319  $this->edebug(
320  'SMTP ERROR: ' . $this->error['error']
321  . ": $errstr ($errno)",
322  self::DEBUG_CLIENT
323  );
324  return false;
325  }
326  $this->edebug('Connection: opened', self::DEBUG_CONNECTION);
327  // SMTP server can take longer to respond, give longer timeout for first read
328  // Windows does not have support for this timeout function
329  if (substr(PHP_OS, 0, 3) != 'WIN') {
330  $max = ini_get('max_execution_time');
331  // Don't bother if unlimited
332  if ($max != 0 && $timeout > $max) {
333  @set_time_limit($timeout);
334  }
335  stream_set_timeout($this->smtp_conn, $timeout, 0);
336  }
337  // Get any announcement
338  $announce = $this->get_lines();
339  $this->edebug('SERVER -> CLIENT: ' . $announce, self::DEBUG_SERVER);
340  return true;
341  }
connected()
Check connection state.
Definition: class.smtp.php:588
Create styles array
The data for the language used.
edebug($str, $level=0)
Output debugging info via a user-selected method.
Definition: class.smtp.php:213
get_lines()
Read the SMTP server's response.
if(!isset($_REQUEST['ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options
Definition: as_login.php:20
setError($message, $detail='', $smtp_code='', $smtp_code_ex='')
Set error messages and codes.
+ Here is the call graph for this function:

◆ connected()

SMTP::connected ( )

Check connection state.

public

Returns
boolean True if connected.

Definition at line 588 of file class.smtp.php.

References close(), and edebug().

Referenced by connect(), and sendCommand().

589  {
590  if (is_resource($this->smtp_conn)) {
591  $sock_status = stream_get_meta_data($this->smtp_conn);
592  if ($sock_status['eof']) {
593  // The socket is valid but we are not connected
594  $this->edebug(
595  'SMTP NOTICE: EOF caught while checking if connected',
596  self::DEBUG_CLIENT
597  );
598  $this->close();
599  return false;
600  }
601  return true; // everything looks good
602  }
603  return false;
604  }
close()
Close the socket and clean up the state of the class.
Definition: class.smtp.php:613
edebug($str, $level=0)
Output debugging info via a user-selected method.
Definition: class.smtp.php:213
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ data()

SMTP::data (   $msg_data)

Send an SMTP DATA command.

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 <CRLF> with the message headers and the message body being separated by and additional <CRLF>. Implements rfc 821: DATA <CRLF>

Parameters
string$msg_dataMessage data to send public
Returns
boolean

Definition at line 638 of file class.smtp.php.

References $result, $Timelimit, array, client_send(), and sendCommand().

639  {
640  //This will use the standard timelimit
641  if (!$this->sendCommand('DATA', 'DATA', 354)) {
642  return false;
643  }
644 
645  /* The server is ready to accept data!
646  * According to rfc821 we should not send more than 1000 characters on a single line (including the CRLF)
647  * so we will break the data up into lines by \r and/or \n then if needed we will break each of those into
648  * smaller lines to fit within the limit.
649  * We will also look for lines that start with a '.' and prepend an additional '.'.
650  * NOTE: this does not count towards line-length limit.
651  */
652 
653  // Normalize line breaks before exploding
654  $lines = explode("\n", str_replace(array("\r\n", "\r"), "\n", $msg_data));
655 
656  /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field
657  * of the first line (':' separated) does not contain a space then it _should_ be a header and we will
658  * process all lines before a blank line as headers.
659  */
660 
661  $field = substr($lines[0], 0, strpos($lines[0], ':'));
662  $in_headers = false;
663  if (!empty($field) && strpos($field, ' ') === false) {
664  $in_headers = true;
665  }
666 
667  foreach ($lines as $line) {
668  $lines_out = array();
669  if ($in_headers and $line == '') {
670  $in_headers = false;
671  }
672  //Break this line up into several smaller lines if it's too long
673  //Micro-optimisation: isset($str[$len]) is faster than (strlen($str) > $len),
674  while (isset($line[self::MAX_LINE_LENGTH])) {
675  //Working backwards, try to find a space within the last MAX_LINE_LENGTH chars of the line to break on
676  //so as to avoid breaking in the middle of a word
677  $pos = strrpos(substr($line, 0, self::MAX_LINE_LENGTH), ' ');
678  //Deliberately matches both false and 0
679  if (!$pos) {
680  //No nice break found, add a hard break
681  $pos = self::MAX_LINE_LENGTH - 1;
682  $lines_out[] = substr($line, 0, $pos);
683  $line = substr($line, $pos);
684  } else {
685  //Break at the found point
686  $lines_out[] = substr($line, 0, $pos);
687  //Move along by the amount we dealt with
688  $line = substr($line, $pos + 1);
689  }
690  //If processing headers add a LWSP-char to the front of new line RFC822 section 3.1.1
691  if ($in_headers) {
692  $line = "\t" . $line;
693  }
694  }
695  $lines_out[] = $line;
696 
697  //Send the lines to the server
698  foreach ($lines_out as $line_out) {
699  //RFC2821 section 4.5.2
700  if (!empty($line_out) and $line_out[0] == '.') {
701  $line_out = '.' . $line_out;
702  }
703  $this->client_send($line_out . self::CRLF);
704  }
705  }
706 
707  //Message data has been sent, complete the command
708  //Increase timelimit for end of DATA command
709  $savetimelimit = $this->Timelimit;
710  $this->Timelimit = $this->Timelimit * 2;
711  $result = $this->sendCommand('DATA END', '.', 250);
712  //Restore timelimit
713  $this->Timelimit = $savetimelimit;
714  return $result;
715  }
$Timelimit
Definition: class.smtp.php:151
$result
sendCommand($command, $commandstring, $expect)
Send a command to an SMTP server and check its return code.
Definition: class.smtp.php:874
client_send($data)
Send raw data to the server.
Definition: class.smtp.php:989
Create styles array
The data for the language used.
+ Here is the call graph for this function:

◆ edebug()

SMTP::edebug (   $str,
  $level = 0 
)
protected

Output debugging info via a user-selected method.

See also
SMTP::$Debugoutput
SMTP::$do_debug
Parameters
string$strDebug string to output
integer$levelThe debug level of this message; see DEBUG_* constants
Returns
void

Definition at line 213 of file class.smtp.php.

References array, and Monolog\Handler\error_log().

Referenced by authenticate(), client_send(), close(), connect(), connected(), errorHandler(), get_lines(), sendCommand(), and turn().

214  {
215  if ($level > $this->do_debug) {
216  return;
217  }
218  //Avoid clash with built-in function names
219  if (!in_array($this->Debugoutput, array('error_log', 'html', 'echo')) and is_callable($this->Debugoutput)) {
220  call_user_func($this->Debugoutput, $str, $level);
221  return;
222  }
223  switch ($this->Debugoutput) {
224  case 'error_log':
225  //Don't output, just log
226  error_log($str);
227  break;
228  case 'html':
229  //Cleans up output a bit for a better looking, HTML-safe output
230  echo gmdate('Y-m-d H:i:s') . ' ' . htmlentities(
231  preg_replace('/[\r\n]+/', '', $str),
232  ENT_QUOTES,
233  'UTF-8'
234  ) . "<br>\n";
235  break;
236  case 'echo':
237  default:
238  //Normalize line breaks
239  $str = preg_replace('/(\r\n|\r|\n)/ms', "\n", $str);
240  echo gmdate('Y-m-d H:i:s') . "\t" . str_replace(
241  "\n",
242  "\n \t ",
243  trim($str)
244  ) . "\n";
245  }
246  }
Create styles array
The data for the language used.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ errorHandler()

SMTP::errorHandler (   $errno,
  $errmsg,
  $errfile = '',
  $errline = 0 
)
protected

Reports an error number and string.

Parameters
integer$errnoThe error number returned by PHP.
string$errmsgThe error message returned by PHP.
string$errfileThe file the error occurred in
integer$errlineThe line number the error occurred on

Definition at line 1219 of file class.smtp.php.

References edebug(), and setError().

1220  {
1221  $notice = 'Connection failed.';
1222  $this->setError(
1223  $notice,
1224  $errno,
1225  $errmsg
1226  );
1227  $this->edebug(
1228  $notice . ' Error #' . $errno . ': ' . $errmsg . " [$errfile line $errline]",
1229  self::DEBUG_CONNECTION
1230  );
1231  }
edebug($str, $level=0)
Output debugging info via a user-selected method.
Definition: class.smtp.php:213
setError($message, $detail='', $smtp_code='', $smtp_code_ex='')
Set error messages and codes.
+ Here is the call graph for this function:

◆ get_lines()

SMTP::get_lines ( )
protected

Read the SMTP server's response.

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. protected

Returns
string

Definition at line 1078 of file class.smtp.php.

References $data, $info, $Timelimit, edebug(), and time.

Referenced by connect(), and sendCommand().

1079  {
1080  // If the connection is bad, give up straight away
1081  if (!is_resource($this->smtp_conn)) {
1082  return '';
1083  }
1084  $data = '';
1085  $endtime = 0;
1086  stream_set_timeout($this->smtp_conn, $this->Timeout);
1087  if ($this->Timelimit > 0) {
1088  $endtime = time() + $this->Timelimit;
1089  }
1090  while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) {
1091  $str = @fgets($this->smtp_conn, 515);
1092  $this->edebug("SMTP -> get_lines(): \$data is \"$data\"", self::DEBUG_LOWLEVEL);
1093  $this->edebug("SMTP -> get_lines(): \$str is \"$str\"", self::DEBUG_LOWLEVEL);
1094  $data .= $str;
1095  // If response is only 3 chars (not valid, but RFC5321 S4.2 says it must be handled),
1096  // or 4th character is a space, we are done reading, break the loop,
1097  // string array access is a micro-optimisation over strlen
1098  if (!isset($str[3]) or (isset($str[3]) and $str[3] == ' ')) {
1099  break;
1100  }
1101  // Timed-out? Log and break
1102  $info = stream_get_meta_data($this->smtp_conn);
1103  if ($info['timed_out']) {
1104  $this->edebug(
1105  'SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)',
1106  self::DEBUG_LOWLEVEL
1107  );
1108  break;
1109  }
1110  // Now check if reads took too long
1111  if ($endtime and time() > $endtime) {
1112  $this->edebug(
1113  'SMTP -> get_lines(): timelimit reached (' .
1114  $this->Timelimit . ' sec)',
1115  self::DEBUG_LOWLEVEL
1116  );
1117  break;
1118  }
1119  }
1120  return $data;
1121  }
$Timelimit
Definition: class.smtp.php:151
edebug($str, $level=0)
Output debugging info via a user-selected method.
Definition: class.smtp.php:213
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
$info
Definition: index.php:5
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getDebugLevel()

SMTP::getDebugLevel ( )

Get debug output level.

Returns
integer

Definition at line 1189 of file class.smtp.php.

References $do_debug.

1190  {
1191  return $this->do_debug;
1192  }

◆ getDebugOutput()

SMTP::getDebugOutput ( )

Get debug output method.

Returns
string

Definition at line 1171 of file class.smtp.php.

References $Debugoutput.

1172  {
1173  return $this->Debugoutput;
1174  }
$Debugoutput
Definition: class.smtp.php:127

◆ getError()

SMTP::getError ( )

Get the latest error.

public

Returns
array

Definition at line 1003 of file class.smtp.php.

References $error.

1004  {
1005  return $this->error;
1006  }

◆ getLastReply()

SMTP::getLastReply ( )

Get the last reply from the server.

public

Returns
string

Definition at line 1064 of file class.smtp.php.

References $last_reply.

Referenced by getLastTransactionID().

1065  {
1066  return $this->last_reply;
1067  }
$last_reply
Definition: class.smtp.php:203
+ Here is the caller graph for this function:

◆ getLastTransactionID()

SMTP::getLastTransactionID ( )

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

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

Returns
bool|null|string

Definition at line 1240 of file class.smtp.php.

References getLastReply().

1241  {
1242  $reply = $this->getLastReply();
1243 
1244  if (empty($reply)) {
1245  return null;
1246  }
1247 
1248  foreach ($this->smtp_transaction_id_patterns as $smtp_transaction_id_pattern) {
1249  if (preg_match($smtp_transaction_id_pattern, $reply, $matches)) {
1250  return $matches[1];
1251  }
1252  }
1253 
1254  return false;
1255  }
getLastReply()
Get the last reply from the server.
+ Here is the call graph for this function:

◆ getServerExt()

SMTP::getServerExt (   $name)

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
    Parameters
    string$nameName of SMTP extension or 'HELO'|'EHLO'
    Returns
    mixed

Definition at line 1037 of file class.smtp.php.

References $name, and setError().

1038  {
1039  if (!$this->server_caps) {
1040  $this->setError('No HELO/EHLO was sent');
1041  return null;
1042  }
1043 
1044  // the tight logic knot ;)
1045  if (!array_key_exists($name, $this->server_caps)) {
1046  if ($name == 'HELO') {
1047  return $this->server_caps['EHLO'];
1048  }
1049  if ($name == 'EHLO' || array_key_exists('EHLO', $this->server_caps)) {
1050  return false;
1051  }
1052  $this->setError('HELO handshake was used. Client knows nothing about server extensions');
1053  return null;
1054  }
1055 
1056  return $this->server_caps[$name];
1057  }
if($format !==null) $name
Definition: metadata.php:146
setError($message, $detail='', $smtp_code='', $smtp_code_ex='')
Set error messages and codes.
+ Here is the call graph for this function:

◆ getServerExtList()

SMTP::getServerExtList ( )

Get SMTP extensions available on the server public.

Returns
array|null

Definition at line 1013 of file class.smtp.php.

References $server_caps.

1014  {
1015  return $this->server_caps;
1016  }
$server_caps
Definition: class.smtp.php:197

◆ getTimeout()

SMTP::getTimeout ( )

Get SMTP timeout.

Returns
integer

Definition at line 1207 of file class.smtp.php.

References $Timeout.

1208  {
1209  return $this->Timeout;
1210  }

◆ getVerp()

SMTP::getVerp ( )

Get VERP address generation mode.

Returns
boolean

Definition at line 1136 of file class.smtp.php.

References $do_verp.

1137  {
1138  return $this->do_verp;
1139  }

◆ hello()

SMTP::hello (   $host = '')

Send an SMTP HELO or EHLO command.

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 <SP> <domain> <CRLF> and RFC 2821 EHLO.

Parameters
string$hostThe host name or IP to connect to public
Returns
boolean

Definition at line 727 of file class.smtp.php.

References sendHello().

728  {
729  //Try extended hello first (RFC 2821)
730  return (boolean)($this->sendHello('EHLO', $host) or $this->sendHello('HELO', $host));
731  }
sendHello($hello, $host)
Send an SMTP HELO or EHLO command.
Definition: class.smtp.php:742
+ Here is the call graph for this function:

◆ hmac()

SMTP::hmac (   $data,
  $key 
)
protected

Calculate an MD5 HMAC hash.

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

Parameters
string$dataThe data to hash
string$keyThe key to hash with protected
Returns
string

Definition at line 556 of file class.smtp.php.

References $data, and $key.

Referenced by authenticate().

557  {
558  if (function_exists('hash_hmac')) {
559  return hash_hmac('md5', $data, $key);
560  }
561 
562  // The following borrowed from
563  // http://php.net/manual/en/function.mhash.php#27225
564 
565  // RFC 2104 HMAC implementation for php.
566  // Creates an md5 HMAC.
567  // Eliminates the need to install mhash to compute a HMAC
568  // by Lance Rushing
569 
570  $bytelen = 64; // byte length for md5
571  if (strlen($key) > $bytelen) {
572  $key = pack('H*', md5($key));
573  }
574  $key = str_pad($key, $bytelen, chr(0x00));
575  $ipad = str_pad('', $bytelen, chr(0x36));
576  $opad = str_pad('', $bytelen, chr(0x5c));
577  $k_ipad = $key ^ $ipad;
578  $k_opad = $key ^ $opad;
579 
580  return md5($k_opad . pack('H*', md5($k_ipad . $data)));
581  }
$key
Definition: croninfo.php:18
+ Here is the caller graph for this function:

◆ mail()

SMTP::mail (   $from)

Send an SMTP MAIL command.

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 <SP> FROM:<reverse-path> <CRLF>

Parameters
string$fromSource address of this message public
Returns
boolean

Definition at line 807 of file class.smtp.php.

References $from, and sendCommand().

808  {
809  $useVerp = ($this->do_verp ? ' XVERP' : '');
810  return $this->sendCommand(
811  'MAIL FROM',
812  'MAIL FROM:<' . $from . '>' . $useVerp,
813  250
814  );
815  }
sendCommand($command, $commandstring, $expect)
Send a command to an SMTP server and check its return code.
Definition: class.smtp.php:874
$from
+ Here is the call graph for this function:

◆ noop()

SMTP::noop ( )

Send an SMTP NOOP command.

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

Returns
boolean

Definition at line 962 of file class.smtp.php.

References sendCommand().

963  {
964  return $this->sendCommand('NOOP', 'NOOP', 250);
965  }
sendCommand($command, $commandstring, $expect)
Send a command to an SMTP server and check its return code.
Definition: class.smtp.php:874
+ Here is the call graph for this function:

◆ parseHelloFields()

SMTP::parseHelloFields (   $type)
protected

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

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

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

Definition at line 760 of file class.smtp.php.

References $n, $name, $s, $type, and array.

Referenced by sendHello().

761  {
762  $this->server_caps = array();
763  $lines = explode("\n", $this->helo_rply);
764 
765  foreach ($lines as $n => $s) {
766  //First 4 chars contain response code followed by - or space
767  $s = trim(substr($s, 4));
768  if (empty($s)) {
769  continue;
770  }
771  $fields = explode(' ', $s);
772  if (!empty($fields)) {
773  if (!$n) {
774  $name = $type;
775  $fields = $fields[0];
776  } else {
777  $name = array_shift($fields);
778  switch ($name) {
779  case 'SIZE':
780  $fields = ($fields ? $fields[0] : 0);
781  break;
782  case 'AUTH':
783  if (!is_array($fields)) {
784  $fields = array();
785  }
786  break;
787  default:
788  $fields = true;
789  }
790  }
791  $this->server_caps[$name] = $fields;
792  }
793  }
794  }
$type
$s
Definition: pwgen.php:45
if($format !==null) $name
Definition: metadata.php:146
$n
Definition: RandomTest.php:85
Create styles array
The data for the language used.
+ Here is the caller graph for this function:

◆ quit()

SMTP::quit (   $close_on_error = true)

Send an SMTP QUIT command.

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

Parameters
boolean$close_on_errorShould the connection close if an error occurs? public
Returns
boolean

Definition at line 825 of file class.smtp.php.

References $error, close(), and sendCommand().

826  {
827  $noerror = $this->sendCommand('QUIT', 'QUIT', 221);
828  $err = $this->error; //Save any error
829  if ($noerror or $close_on_error) {
830  $this->close();
831  $this->error = $err; //Restore any error from the quit command
832  }
833  return $noerror;
834  }
sendCommand($command, $commandstring, $expect)
Send a command to an SMTP server and check its return code.
Definition: class.smtp.php:874
close()
Close the socket and clean up the state of the class.
Definition: class.smtp.php:613
+ Here is the call graph for this function:

◆ recipient()

SMTP::recipient (   $address)

Send an SMTP RCPT command.

Sets the TO argument to $toaddr. Returns true if the recipient was accepted false if it was rejected. Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF>

Parameters
string$addressThe address the message is being sent to public
Returns
boolean

Definition at line 845 of file class.smtp.php.

References array, and sendCommand().

846  {
847  return $this->sendCommand(
848  'RCPT TO',
849  'RCPT TO:<' . $address . '>',
850  array(250, 251)
851  );
852  }
sendCommand($command, $commandstring, $expect)
Send a command to an SMTP server and check its return code.
Definition: class.smtp.php:874
Create styles array
The data for the language used.
+ Here is the call graph for this function:

◆ reset()

SMTP::reset ( )

Send an SMTP RSET command.

Abort any transaction that is currently in progress. Implements rfc 821: RSET <CRLF> public

Returns
boolean True on success.

Definition at line 861 of file class.smtp.php.

References sendCommand().

862  {
863  return $this->sendCommand('RSET', 'RSET', 250);
864  }
sendCommand($command, $commandstring, $expect)
Send a command to an SMTP server and check its return code.
Definition: class.smtp.php:874
+ Here is the call graph for this function:

◆ sendAndMail()

SMTP::sendAndMail (   $from)

Send an SMTP SAML command.

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 <SP> FROM:<reverse-path> <CRLF>

Parameters
string$fromThe address the message is from public
Returns
boolean

Definition at line 940 of file class.smtp.php.

References sendCommand().

941  {
942  return $this->sendCommand('SAML', "SAML FROM:$from", 250);
943  }
sendCommand($command, $commandstring, $expect)
Send a command to an SMTP server and check its return code.
Definition: class.smtp.php:874
+ Here is the call graph for this function:

◆ sendCommand()

SMTP::sendCommand (   $command,
  $commandstring,
  $expect 
)
protected

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

Parameters
string$commandThe command name - not sent to the server
string$commandstringThe actual command to send
integer | array$expectOne or more expected integer success codes protected
Returns
boolean True on success.

Definition at line 874 of file class.smtp.php.

References $code, array, client_send(), connected(), edebug(), get_lines(), and setError().

Referenced by authenticate(), data(), mail(), noop(), quit(), recipient(), reset(), sendAndMail(), sendHello(), startTLS(), and verify().

875  {
876  if (!$this->connected()) {
877  $this->setError("Called $command without being connected");
878  return false;
879  }
880  //Reject line breaks in all commands
881  if (strpos($commandstring, "\n") !== false or strpos($commandstring, "\r") !== false) {
882  $this->setError("Command '$command' contained line breaks");
883  return false;
884  }
885  $this->client_send($commandstring . self::CRLF);
886 
887  $this->last_reply = $this->get_lines();
888  // Fetch SMTP code and possible error code explanation
889  $matches = array();
890  if (preg_match("/^([0-9]{3})[ -](?:([0-9]\\.[0-9]\\.[0-9]) )?/", $this->last_reply, $matches)) {
891  $code = $matches[1];
892  $code_ex = (count($matches) > 2 ? $matches[2] : null);
893  // Cut off error code from each response line
894  $detail = preg_replace(
895  "/{$code}[ -]" .
896  ($code_ex ? str_replace('.', '\\.', $code_ex) . ' ' : '') . "/m",
897  '',
898  $this->last_reply
899  );
900  } else {
901  // Fall back to simple parsing if regex fails
902  $code = substr($this->last_reply, 0, 3);
903  $code_ex = null;
904  $detail = substr($this->last_reply, 4);
905  }
906 
907  $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER);
908 
909  if (!in_array($code, (array)$expect)) {
910  $this->setError(
911  "$command command failed",
912  $detail,
913  $code,
914  $code_ex
915  );
916  $this->edebug(
917  'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply,
918  self::DEBUG_CLIENT
919  );
920  return false;
921  }
922 
923  $this->setError('');
924  return true;
925  }
$code
Definition: example_050.php:99
connected()
Check connection state.
Definition: class.smtp.php:588
client_send($data)
Send raw data to the server.
Definition: class.smtp.php:989
Create styles array
The data for the language used.
edebug($str, $level=0)
Output debugging info via a user-selected method.
Definition: class.smtp.php:213
get_lines()
Read the SMTP server&#39;s response.
setError($message, $detail='', $smtp_code='', $smtp_code_ex='')
Set error messages and codes.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sendHello()

SMTP::sendHello (   $hello,
  $host 
)
protected

Send an SMTP HELO or EHLO command.

Low-level implementation used by hello()

See also
hello()
Parameters
string$helloThe HELO string
string$hostThe hostname to say we are protected
Returns
boolean

Definition at line 742 of file class.smtp.php.

References $last_reply, parseHelloFields(), and sendCommand().

Referenced by hello().

743  {
744  $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250);
745  $this->helo_rply = $this->last_reply;
746  if ($noerror) {
747  $this->parseHelloFields($hello);
748  } else {
749  $this->server_caps = null;
750  }
751  return $noerror;
752  }
sendCommand($command, $commandstring, $expect)
Send a command to an SMTP server and check its return code.
Definition: class.smtp.php:874
$last_reply
Definition: class.smtp.php:203
parseHelloFields($type)
Parse a reply to HELO/EHLO command to discover server extensions.
Definition: class.smtp.php:760
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setDebugLevel()

SMTP::setDebugLevel (   $level = 0)

Set debug output level.

Parameters
integer$level

Definition at line 1180 of file class.smtp.php.

1181  {
1182  $this->do_debug = $level;
1183  }

◆ setDebugOutput()

SMTP::setDebugOutput (   $method = 'echo')

Set debug output method.

Parameters
string | callable$methodThe name of the mechanism to use for debugging output, or a callable to handle it.

Definition at line 1162 of file class.smtp.php.

1163  {
1164  $this->Debugoutput = $method;
1165  }

◆ setError()

SMTP::setError (   $message,
  $detail = '',
  $smtp_code = '',
  $smtp_code_ex = '' 
)
protected

Set error messages and codes.

Parameters
string$messageThe error message
string$detailFurther detail on the error
string$smtp_codeAn associated SMTP error code
string$smtp_code_exExtended SMTP code

Definition at line 1148 of file class.smtp.php.

References $message, and array.

Referenced by authenticate(), close(), connect(), errorHandler(), getServerExt(), sendCommand(), and turn().

1149  {
1150  $this->error = array(
1151  'error' => $message,
1152  'detail' => $detail,
1153  'smtp_code' => $smtp_code,
1154  'smtp_code_ex' => $smtp_code_ex
1155  );
1156  }
catch(Exception $e) $message
Create styles array
The data for the language used.
+ Here is the caller graph for this function:

◆ setTimeout()

SMTP::setTimeout (   $timeout = 0)

Set SMTP timeout.

Parameters
integer$timeout

Definition at line 1198 of file class.smtp.php.

1199  {
1200  $this->Timeout = $timeout;
1201  }

◆ setVerp()

SMTP::setVerp (   $enabled = false)

Enable or disable VERP address generation.

Parameters
boolean$enabled

Definition at line 1127 of file class.smtp.php.

1128  {
1129  $this->do_verp = $enabled;
1130  }

◆ startTLS()

SMTP::startTLS ( )

Initiate a TLS (encrypted) session.

public

Returns
boolean

Definition at line 348 of file class.smtp.php.

References array, defined, and sendCommand().

349  {
350  if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) {
351  return false;
352  }
353 
354  //Allow the best TLS version(s) we can
355  $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT;
356 
357  //PHP 5.6.7 dropped inclusion of TLS 1.1 and 1.2 in STREAM_CRYPTO_METHOD_TLS_CLIENT
358  //so add them back in manually if we can
359  if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
360  $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
361  $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
362  }
363 
364  // Begin encrypted connection
365  set_error_handler(array($this, 'errorHandler'));
366  $crypto_ok = stream_socket_enable_crypto(
367  $this->smtp_conn,
368  true,
369  $crypto_method
370  );
371  restore_error_handler();
372  return $crypto_ok;
373  }
sendCommand($command, $commandstring, $expect)
Send a command to an SMTP server and check its return code.
Definition: class.smtp.php:874
Create styles array
The data for the language used.
defined( 'APPLICATION_ENV')||define( 'APPLICATION_ENV'
Definition: bootstrap.php:27
+ Here is the call graph for this function:

◆ turn()

SMTP::turn ( )

Send an SMTP TURN command.

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 <CRLF> public

Returns
boolean

Definition at line 976 of file class.smtp.php.

References edebug(), and setError().

977  {
978  $this->setError('The SMTP TURN command is not implemented');
979  $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT);
980  return false;
981  }
edebug($str, $level=0)
Output debugging info via a user-selected method.
Definition: class.smtp.php:213
setError($message, $detail='', $smtp_code='', $smtp_code_ex='')
Set error messages and codes.
+ Here is the call graph for this function:

◆ verify()

SMTP::verify (   $name)

Send an SMTP VRFY command.

Parameters
string$nameThe name to verify public
Returns
boolean

Definition at line 951 of file class.smtp.php.

References array, and sendCommand().

952  {
953  return $this->sendCommand('VRFY', "VRFY $name", array(250, 251));
954  }
sendCommand($command, $commandstring, $expect)
Send a command to an SMTP server and check its return code.
Definition: class.smtp.php:874
Create styles array
The data for the language used.
+ Here is the call graph for this function:

Field Documentation

◆ $CRLF

SMTP::$CRLF = "\r\n"

Definition at line 100 of file class.smtp.php.

◆ $Debugoutput

SMTP::$Debugoutput = 'echo'

Definition at line 127 of file class.smtp.php.

Referenced by getDebugOutput().

◆ $do_debug

SMTP::$do_debug = self::DEBUG_OFF

Definition at line 112 of file class.smtp.php.

Referenced by getDebugLevel().

◆ $do_verp

SMTP::$do_verp = false

Definition at line 135 of file class.smtp.php.

Referenced by getVerp().

◆ $error

SMTP::$error
protected
Initial value:
'error' => '',
'detail' => '',
'smtp_code' => '',
'smtp_code_ex' => ''
)

Definition at line 174 of file class.smtp.php.

Referenced by getError(), and quit().

◆ $helo_rply

SMTP::$helo_rply = null
protected

Definition at line 186 of file class.smtp.php.

◆ $last_reply

SMTP::$last_reply = ''
protected

Definition at line 203 of file class.smtp.php.

Referenced by getLastReply(), and sendHello().

◆ $server_caps

SMTP::$server_caps = null
protected

Definition at line 197 of file class.smtp.php.

Referenced by getServerExtList().

◆ $smtp_conn

SMTP::$smtp_conn
protected

Definition at line 168 of file class.smtp.php.

◆ $SMTP_PORT

SMTP::$SMTP_PORT = 25

Definition at line 92 of file class.smtp.php.

◆ $smtp_transaction_id_patterns

SMTP::$smtp_transaction_id_patterns
protected
Initial value:
'exim' => '/[0-9]{3} OK id=(.*)/',
'sendmail' => '/[0-9]{3} 2.0.0 (.*) Message/',
'postfix' => '/[0-9]{3} 2.0.0 Ok: queued as (.*)/'
)

Definition at line 158 of file class.smtp.php.

◆ $Timelimit

SMTP::$Timelimit = 300

Definition at line 151 of file class.smtp.php.

Referenced by data(), and get_lines().

◆ $Timeout

SMTP::$Timeout = 300

Definition at line 144 of file class.smtp.php.

Referenced by getTimeout().

◆ $Version

SMTP::$Version = '5.2.24'

Definition at line 84 of file class.smtp.php.

◆ CRLF

const SMTP::CRLF = "\r\n"

Definition at line 39 of file class.smtp.php.

◆ DEBUG_CLIENT

const SMTP::DEBUG_CLIENT = 1

Debug level to show client -> server messages.

Definition at line 61 of file class.smtp.php.

◆ DEBUG_CONNECTION

const SMTP::DEBUG_CONNECTION = 3

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

Definition at line 71 of file class.smtp.php.

◆ DEBUG_LOWLEVEL

const SMTP::DEBUG_LOWLEVEL = 4

Debug level to show all messages.

Definition at line 76 of file class.smtp.php.

◆ DEBUG_OFF

const SMTP::DEBUG_OFF = 0

Debug level for no output.

Definition at line 56 of file class.smtp.php.

◆ DEBUG_SERVER

const SMTP::DEBUG_SERVER = 2

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

Definition at line 66 of file class.smtp.php.

◆ DEFAULT_SMTP_PORT

const SMTP::DEFAULT_SMTP_PORT = 25

Definition at line 45 of file class.smtp.php.

◆ MAX_LINE_LENGTH

const SMTP::MAX_LINE_LENGTH = 998

Definition at line 51 of file class.smtp.php.

◆ VERSION

const SMTP::VERSION = '5.2.24'

Definition at line 33 of file class.smtp.php.


The documentation for this class was generated from the following file: