Envelope Objects¶
In slimta, an email message is thought of like a ‘snail mail’ envelope, it’s
not just the message contents but also sending and receiving addresses and other
logistical information. An Envelope object represents all of this information.
The sender and
recipients attributes hold the sending address
of the message and the list of intended recipients. The
Forward policy can be useful to modify the
intended recipients of a message.
Headers and Contents¶
The headers and body of the email contents are split up into the
headers and
message attributes. The headers attribute
is a email.message.Message object and can be used to view, add, and
delete headers only, it does not contain the message payload as described by
Message documentation. The message attribute of the
Envelope object is Python string containing the contents of the message,
everything after the headers.
For delivery, slimta Relay transports will call
flatten() to convert the headers (with any
modifications) and message into a single string. After flattening, the
message headers portion of the generated string is guaranteed to use \r\n
line endings.
Non-Delivery Reports (Bounces)¶
Because a client that sent a message to an edge service will disconnect once the message has been queued, there is no way of reporting to the client that the message was delivered (successfully or unsuccessfully).
As such, the message sender should assume that a message was delivered successfully unless told otherwise. If slimta failed to deliver a message, either because of too many delivery attempts or a permanent error, it will generate and deliver a bounce message back to the original sender address of the message. From this bounce message, the sender should be able to tell which message failed and why.
Generating Bounce Messages¶
Bounce objects are used to build bounce messages from the original
Envelope object and that message’s Reply object.
The Bounce class allows for customization of the format of this bounce
message. The static class member sender is the
sender address to use. Bounce messages are not “from” anyone, and thus the
(RFC mandated) default is an empty string ("").
The Bounce class is a sub-class of Envelope and can thus be used wherever a
regular Envelope is required. The Bounce message is generated using the
original message’s flattened message data surrounded by the header and footer
templates given in the Bounce class’s static
header_template and
footer_template members. See the API documentation
of these attributes for information on how they work.