Class Deliver

Description

Deliver Class - called to actually deliver the message

This class is called by compose.php and other code that needs to send messages. All delivery functionality should be centralized in this class.

Do not place UI code in this class, as UI code should be placed in templates going forward.

  • author: Marc Groot Koerkamp

Located in /class/deliver/Deliver.class.php (line 29)


	
			
Direct descendents
Class Description
Deliver_SMTP Deliver messages using SMTP
Deliver_IMAP This class is incomplete and entirely undocumented.
Deliver_SendMail Delivers messages using the sendmail binary
Method Summary
void clean_crlf (string &$s)
string foldLine (string $header, [integer $soft_wrap = 78], [string $indent = ''], [string $hard_wrap = 998])
void getBCC ()
handle initStream (Message $message, string $domain, [integer $length = 0], [string $host = ''], [integer $port = ''], [string $user = ''], [string $pass = ''], [boolean $authpop = false], [string $pop_host = ''], [array $stream_options = array()])
string ip2hex (string $string)
integer mail ( &$message, [resource $stream = false], [string $reply_id = 0], [string $reply_ent_id = 0], [resource $imap_stream = NULL], [mixed $extra = NULL], Message $message)
string mimeBoundary ()
string prepareMIME_Header (Message $message, string $boundary)
string prepareRFC822_Header ( &$rfc822_header, Rfc822Header $reply_rfc822_header, integer &$raw_length, Rfc822Header $rfc822_header)
void preWriteToStream (string &$s)
void send_mail (Message $message, string $header, string $boundary, [resource $stream = false], int &$raw_length, [mixed $extra = NULL])
void strip_crlf (string &$s)
string timezone ()
void writeBody (Message $message, resource $stream, integer &$length_raw, [string $boundary = ''])
void writeBodyPart (Message $message, resource $stream, integer &$length)
void writeToStream (resource $stream, string $data)
Methods
calculate_references (line 1194)

function calculate_references - calculate correct References string Adds the current message ID, and makes sure it doesn't grow forever, to that extent it drops message-ID's in a smart way until the string length is under the recommended value of 1000 ("References: <986>\r\n").

It always keeps the first and the last three ID's.

  • return: concatenated and trimmed References string
string calculate_references (Rfc822Header $hdr)
clean_crlf (line 387)

function clean_crlf - change linefeeds and newlines to legal characters

The SMTP format only allows CRLF as line terminators. This function replaces illegal teminators with the correct terminator.

void clean_crlf (string &$s)
  • string &$s: string to clean linefeeds on
foldLine (line 839)

Fold header lines per RFC 2822/2.2.3 and RFC 822/3.1.1

Herein "soft" folding/wrapping (with whitespace tokens) is what we refer to as the preferred method of wrapping - that which we'd like to do within the $soft_wrap limit, but if not possible, we will try to do as soon as possible after $soft_wrap up to the $hard_wrap limit. Encoded words don't need to be detected in this phase, since they cannot contain spaces.

"Hard" folding/wrapping (with "hard" tokens) is what we refer to as less ideal wrapping that will be done to keep within the $hard_wrap limit. This adds other syntactical breaking elements such as commas and encoded words.

  • return: The folded header content, with a trailing CRLF.
string foldLine (string $header, [integer $soft_wrap = 78], [string $indent = ''], [string $hard_wrap = 998])
  • string $header: The header content being folded
  • integer $soft_wrap: The desirable maximum line length (OPTIONAL; default is 78, per RFC)
  • string $indent: Wrapped lines will already have whitespace following the CRLF wrap, but you can add more indentation (or whatever) with this. The use of this parameter is DISCOURAGED, since it can corrupt the redisplay (unfolding) of headers whose content is space- sensitive, like subjects, etc. (OPTIONAL; default is an empty string)
  • string $hard_wrap: The absolute maximum line length (OPTIONAL; default is 998, per RFC)
getBCC (line 471)

function getBCC - reserved for extended functionality

This function is not yet implemented. Reserved for extended functionality.

void getBCC ()
initStream (line 460)

function initStream - reserved for extended functionality

This function is not yet implemented. Reserved for extended functionality. UPDATE: It is implemented in Deliver_SMTP and Deliver_SendMail classes, but it remains unimplemented in this base class (and thus not in Deliver_IMAP or other child classes that don't define it)

NOTE: some parameters are specific to the child class that is implementing this method

  • return: file handle resource to SMTP stream
handle initStream (Message $message, string $domain, [integer $length = 0], [string $host = ''], [integer $port = ''], [string $user = ''], [string $pass = ''], [boolean $authpop = false], [string $pop_host = ''], [array $stream_options = array()])
  • Message $message: Message object
  • string $domain
  • integer $length
  • string $host: host name or IP to connect to
  • integer $port
  • string $user: username to log into the SMTP server with
  • string $pass: password to log into the SMTP server with
  • boolean $authpop: whether or not to use POP-before-SMTP authorization
  • string $pop_host: host name or IP to connect to for POP-before-SMTP authorization
  • array $stream_options: Stream context options, see config_local.example.php for more details (OPTIONAL)

Redefined in descendants as:
ip2hex (line 1230)

Converts ip address to hexadecimal string

Function is used to convert ipv4 and ipv6 addresses to hex strings. It removes all delimiter symbols from ip addresses, converts decimal ipv4 numbers to hex and pads strings in order to present full length address. ipv4 addresses are represented as 8 byte strings, ipv6 addresses are represented as 32 byte string.

If function fails to detect address format, it returns unprocessed string.

  • return: processed ip address string
  • since: 1.5.1 and 1.4.5
string ip2hex (string $string)
  • string $string: ip address string
mail (line 75)

function mail - send the message parts to the SMTP stream

  • return: The number of bytes written (or that would have been written) to the output stream.
integer mail ( &$message, [resource $stream = false], [string $reply_id = 0], [string $reply_ent_id = 0], [resource $imap_stream = NULL], [mixed $extra = NULL], Message $message)
  • Message $message: Message object to send NOTE that this is passed by reference and will be modified upon return with updated fields such as Message ID, References, In-Reply-To and Date headers.
  • resource $stream: Handle to the outgoing stream (when FALSE, nothing will be written to the stream; this can be used to determine the actual number of bytes that will be written to the stream)
  • string $reply_id: Identifies message being replied to (OPTIONAL; caller should ONLY specify a value for this when the message being sent is a reply)
  • string $reply_ent_id: Identifies message being replied to in the case it was an embedded/attached message inside another (OPTIONAL; caller should ONLY specify a value for this when the message being sent is a reply)
  • resource $imap_stream: If there is an open IMAP stream in the caller's context, it should be passed in here. This is OPTIONAL, as one will be created if not given, but as some IMAP servers may baulk at opening more than one connection at a time, the caller should always abide if possible. Currently, this stream is only used when $reply_id is also non-zero, but that is subject to change.
  • mixed $extra: Any implementation-specific variables can be passed in here and used in an overloaded version of this method if needed.
  • &$message
mimeBoundary (line 1131)

function mimeBoundary - calculates the mime boundary to use

This function will generate a random mime boundary base part for the message if the boundary has not already been set.

  • return: random mime boundary string
string mimeBoundary ()
prepareMIME_Header (line 483)

function prepareMIME_Header - creates the mime header

  • return: properly formatted mime header
string prepareMIME_Header (Message $message, string $boundary)
  • Message $message: Message object to act on
  • string $boundary: mime boundary from fn MimeBoundary
prepareRFC822_Header (line 579)

function prepareRFC822_Header - prepares the RFC822 header string from Rfc822Header object(s)

This function takes the Rfc822Header object(s) and formats them into the RFC822Header string to send to the SMTP server as part of the SMTP message.

string prepareRFC822_Header ( &$rfc822_header, Rfc822Header $reply_rfc822_header, integer &$raw_length, Rfc822Header $rfc822_header)
  • Rfc822Header $rfc822_header
  • Rfc822Header $reply_rfc822_header
  • integer &$raw_length: length of the message
  • &$rfc822_header
preWriteToStream (line 420)

function preWriteToStream - reserved for extended functionality

This function is not yet implemented. Reserved for extended functionality.

void preWriteToStream (string &$s)
  • string &$s: string to operate on

Redefined in descendants as:
send_mail (line 167)

function send_mail - send the message parts to the IMAP stream

void send_mail (Message $message, string $header, string $boundary, [resource $stream = false], int &$raw_length, [mixed $extra = NULL])
  • Message $message: Message object to send
  • string $header: Headers ready to send
  • string $boundary: Message parts boundary
  • resource $stream: Handle to the SMTP stream (when FALSE, nothing will be written to the stream; this can be used to determine the actual number of bytes that will be written to the stream)
  • int &$raw_length: The number of bytes written (or that would have been written) to the output stream - NOTE that this is passed by reference
  • mixed $extra: Any implementation-specific variables can be passed in here and used in an overloaded version of this method if needed.

Redefined in descendants as:
strip_crlf (line 404)

function strip_crlf - strip linefeeds and newlines from a string

The SMTP format only allows CRLF as line terminators. This function strips all line terminators from the string.

void strip_crlf (string &$s)
  • string &$s: string to clean linefeeds on
timezone (line 1147)

function timezone - Time offset for correct timezone

  • return: with timezone and offset
string timezone ()
writeBody (line 197)

function writeBody - generate and write the mime boundaries around each part to the stream

Recursively formats and writes the MIME boundaries of the $message to the output stream.

void writeBody (Message $message, resource $stream, integer &$length_raw, [string $boundary = ''])
  • Message $message: Message object to transform
  • resource $stream: SMTP output stream (when FALSE, nothing will be written to the stream; this can be used to determine the actual number of bytes that will be written to the stream)
  • integer &$length_raw: raw length of the message (part) as returned by mail fn
  • string $boundary: custom boundary to call, usually for subparts
writeBodyPart (line 259)

function writeBodyPart - write each individual mimepart

Recursively called by WriteBody to write each mime part to the SMTP stream

void writeBodyPart (Message $message, resource $stream, integer &$length)
  • Message $message: Message object to transform
  • resource $stream: SMTP output stream (when FALSE, nothing will be written to the stream; this can be used to determine the actual number of bytes that will be written to the stream)
  • integer &$length: length of the message part as returned by mail fn
writeToStream (line 431)

function writeToStream - write data to the SMTP stream

void writeToStream (resource $stream, string $data)
  • resource $stream: SMTP output stream
  • string $data: string with data to send to the SMTP stream

Documentation generated on Mon, 13 Jan 2020 04:22:21 +0100 by phpDocumentor 1.4.3