SMTP Commands and Sample Sessions
The easiest way to grasp how SMTP works is to look at a basic SMTP session. Example 6-1 details how a simple e-mail is transmitted between two mail devices using SMTP.
Example 6-1 SMTP Session
220 smtp-outbound.cisco.com ESMTP Sendmail 8.12.10/8.12.6 ; Fri, 20 Oct 2006
16:01:02 -0400 (EDT) HELO cisco.com
250 smtp-outbound.cisco.com Hello [192.168.1.1], pleased to meet you
MAIL FROM:< [email protected]>
250 2.1.0 [email protected]... Sender ok
RCPT TO:<
[email protected]>
250 2.1.5 [email protected]... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself Subject: test message From: [email protected] To: [email protected]
Example 6-1 SMTP Session (Continued) Hello,
This is a test. Goodbye.
250 2.0.0 k9k1234567890 Message accepted for delivery QUIT
221 2.0.0 smtp-outbound.cisco.com closing connection
The SMTP session shown in Example 6-1 begins when the transmitting e-mail device or client initiates a TCP connection on port 25 to the receiving device, typically a mail server. The mail server answers the connection by identifying itself with a three-digit code followed by a greeting similar to the first line of Example 6-1. The three-digit codes preceding all the responses from the mail server are discussed later in this section. Notice that the e-mail client SMTP commands are shown in boldface type, whereas the e-mail server responses are shown in normal type.
The e-mail client responds to the server greeting with a HELO command and includes its domain name. The mail server then acknowledges the HELO command. Following that, the e-mail client submits the sending and receiving address to the mail server using the MAIL FROM: and RCPT TO:
SMTP commands. To make a parallel to standard mail, these two pieces of information are known as the SMTP envelope. The sender's e-mail address and the recipient's e-mail address are the only information used by the SMTP server to deliver the message.
The SMTP content is the body of the message, which also includes header information, and it is transmitted after proper acknowledgment from the e-mail server to the client's DATA command. Upon completion of the e-mail transaction, the e-mail client gracefully ends the SMTP session with a QUIT command.
Example 6-1 illustrates a basic SMTP session using the SMTP command HELO. However, an improved version of SMTP known as Extended Simple Mail Transfer Protocol (ESMTP) is an alternative that has more features and a greater versatility through added service extensions. ESMTP uses the command EHLO rather than HELO as an identification command. An example of an EHLO command and response session is shown in Example 6-2.
Example 6-2 EHLO Command and Response
220 smtp.cisco | com Simple | Mail Transfer Service Ready |
EHLO cisco.com | | |
250-smtp.cisco | com greets | cisco.com |
250-8BITMIME | | |
250-SIZE | | |
250-DSN | | |
250 HELP | | |
In Example 6-2, you can see how the EHLO command elicits a more detailed response from the SMTP server. The server now includes its supported ESMTP extensions in the response. These extensions let the client know the features and other capabilities for this SMTP server. From a T.37 perspective, either ESMTP or SMTP with their respective EHLO and HELO identification commands may be used.
In addition to the SMTP commands highlighted in Example 6-1 and Example 6-2, there are additional SMTP commands. Table 6-2 lists the common SMTP and ESMTP commands and provides a brief description of each.
Table 6-2 Common SMTP/ESMTP Commands
SMTP/ESMTP Command | Definition |
HELO domain name | Hello: Identifies the SMTP client to the SMTP server |
EHLO domain name | Extended Hello: Identifies the SMTP client to the SMTP server |
|
and requests a list of ESMTP extensions supported by the server |
MAIL FROM: sender | Mail From: Identifies the sender of the e-mail message |
address | |
RCPT TO: recipient address | Recipient To: Specifies a single recipient for the e-mail transaction |
DATA | Data: Indicates to the server that the client is ready to transmit the |
| message content |
RSET | Reset: Aborts the current mail transaction |
VRFY user address | Verify: Requests that the server validate a mailbox address |
EXPN mailing list | Expand: Requests that the server confirm the mailing list address |
| and provide a list of users |
HELP [SMTP command] |
Help: Requests general help from the server or command specific |
| help when a valid SMTP command is included |
NOOP | No Operation: A null command that provides no function other |
| than the reception of an OK reply from the server |
QUIT | QUIT: Terminates the SMTP session |
Notice in Example 6-1 and Example 6-2 that the SMTP server always precedes its response with a numeric, three-digit code. These codes are referred to as SMTP response codes, and their definitions are defined by RFC 821. Table 6-3 details the SMTP response codes and their definitions.
Table 6-3 SMTP Response CodesSMTP Response Code | Definition |
211 | System status, or system help reply |
214 | Help message |
220 |
<domain> service ready |
221 | <domain> service closing session |
250 | Requested mail action ok, completed |
251 | User not local; will forward to <forward-path> |
252 | Cannot VRFY user but message will be accepted and delivery |
| attempted |
354 | Start mail input; end with <CRLF>.<CRLF> |
421 | <domain> service not available, ending session |
450 | Requested action not taken, mailbox unavailable (mailbox busy) |
451 | Requested action aborted; local error in processing |
452 | Requested action not taken; insufficient system storage |
500 | Syntax error, command unrecognized |
501 | Syntax error in parameters or arguments |
502 | Command not implemented |
503 | Bad sequence of commands |
504 | Command parameter not implemented |
550 | Requested action not taken; mailbox unavailable (mailbox not found, |
| no access, rejected for policy reasons) |
551 | User not local; try <forward-path> |
552 | Requested action aborted; exceeded storage allocation |
553 | Requested action not taken; mailbox name not allowed (mailbox |
| syntax incorrect) |
554 | Transaction failed |
DSN and MDN
Some of the most commonly used services that are added to the basic functionality of SMTP relate to giving the sender of an e-mail message a notification about the status of the message. Two such notification methods are delivery status notification (DSN) and message disposition notification (MDN) messages. Both of these delivery and processing confirmation methods are frequently integrated with T.37 store-and-forward fax.
DSN messages provide a mechanism for the mail server to convey delivery status of an e-mail message back to the sender. Depending on the mail server configuration, a DSN message can provide positive/negative delivery status information. Negative DSN informs the sender that the message was unable to be delivered or has been delayed, whereas positive DSN updates the originator that the message was successfully delivered.
DSN messages can be requested only during an ESMTP session if the ESMTP mail server explicitly offers support for these messages. Example 6-2 shows an ESMTP mail server responding to an EHLO with DSN support as one of its service extensions. Furthermore, all mail servers in the message path must support DSN for these notifications to work correctly. This concept is important because many mail messages must be routed through more than one e-mail server.
An ESMTP mail server configured for DSN support will only generate DSNs under the conditions requested by the mail client. These conditions are signaled to the mail server by the client in the "RCPT TO:" SMTP envelope command. After the e-mail address, a NOTIFY attribute is used to request the type of delivery notification for a particular recipient required by the sender. Example 6-3 illustrates DSN notification requests during an ESMTP session.
Example 6-3 ESMTP Session with DSN NOTIFY Parameters
220 smtp.cisco.com Simple Mail Transfer Service Ready EHLO cisco.com
250-smtp.cisco.com greets cisco.com
250-8BITMIME
250-SIZE
250-DSN
250 HELP
MAIL FROM:< [email protected]> RET=HDRS ENVID=124567 250 < [email protected]> sender ok
RCPT TO:< [email protected]> NOTIFY=SUCCESS,DELAY ORCPT=rfc822; [email protected] 250 < [email protected]> recipient ok
RCPT TO:<
[email protected]> NOTIFY=FAILURE ORCPT=rfc822; [email protected] 250 < [email protected]> recipient ok RCPT TO:< [email protected]> NOTIFY=NEVER R: 250 < [email protected]> recipient ok
The receivers of the mail message (specified by "RCPT TO:") in Example 6-3 each have the NOTIFY parameter after their respective e-mail addresses. This NOTIFY parameter specifies the delivery conditions under which the DSNs are requested by the sender for that particular recipient. The possible settings for the DSN NOTIFY parameter are specified in Table 6-4.
Table 6-4 DSN NOTIFY Parameter SettingsDSN NOTIFY | Definition |
SUCCESS | Requests a DSN when the mail message has been successfully delivered to the |
| recipient's inbox. This DSN does not reflect that the message has been opened |
| by the recipient. |
FAILURE | Requests a DSN when the mail message cannot be delivered. |
DELAY | Requests a DSN when the mail message delivery has been delayed. |
NEVER | Requests that a DSN is never sent back to the sender. |
Taking into account the DSN NOTIFY parameters defined in Table 6-4, let's analyze the DSN notification for user1 in Example 6-3. The "RCPT TO:" command for user1 requests DSNs for SUCCESS and DELAY as specified in the NOTIFY extension. This means that the sender of this mail message will receive DSN messages only when the mail message is successfully delivered to user1's inbox or if it is delayed in its path to user1's inbox.
Following the NOTIFY parameter and its values, there is another parameter in the "RCPT TO:" SMTP command for user1. This parameter is the ORCPT (Original Recipient Address), and it specifies an address corresponding to the actual recipient of the delivered message.
As part of the ORCPT, an "addr-type" is specified that defines the type of mail address appearing in the ORCPT. In the case of Example 6-3, the "addr-type" for the ORCPT parameters is shown to conform to the format specified in RFC 822.
The last DSN related parameters in Example 6-3 are RET (Return) and ENVID (Envelope ID). These parameters are part of the sender's mail address that is specified in the "MAIL FROM:" SMTP envelope command.
In Example 6-3, RET=HDRS informs the mail server that the client only wants to have the e-mail headers "returned" in any DSN corresponding to a failed message delivery. The other option is RET=FULL, and this parameter requests that the full e-mail be returned for a failed message delivery DSN.
The ENVID parameter allows the client to attach an identifier that will be transmitted along with the message. This ENVID is also included in any DSNs issued for any of the recipients in the SMTP transaction. The purpose of the ENVID is to allow the sender of a message to correlate the original message with any DSNs that are received for that particular message. For a detailed explanation of DSN as a service extension to the SMTP protocol and a definition of all its associated parameters (NOTIFY, ORCPT, RET, ENVID), refer to RFC 3461.
DSN messages are used within T.37 to indicate successful delivery of a fax mail. For instance, if a fax is converted to an e-mail by the onramp gateway and it is configured for DSN, the delivery status of the mail message containing the TIFF attachment of the fax is sent to the user specified in the gateway configuration.
Example 6-4 shows an actual DSN message indicating successful delivery of a fax-mail sent by the mail server to the user specified in the configuration of the onramp gateway. For more information on configuring DSNs on a Cisco onramp gateway, see the section " Dial-Peer Configuration for Onramp Fax" in Chapter 11, "Configuring T.37 Store-and-Forward Fax." Example 6-4 T.37 DSN Success Message
From: Subject: Date: To: | [email protected] Delivery Status Notification (Success) May 22, 2007 7:24:42 PM EDT [email protected] |
Your message |
: Incoming Fax[DNIS=9913170][ANI=9194724118] Tue, 22 May 2007 12:23:04 -0400 |
was delivered to the following recipient(s): |
Gonzalo Salgueiro on Tue, 22 May 2007 19:24:42 -0400 <RTP-ESC-T37. faxmail.com #2.0.0> |
! Output | omitted for brevity |
Another notification to the sender that can prove useful is message disposition notification (MDN) messages. The difference between DSN and MDN is that DSN messages notify the sender of message delivery status by the mail server, whereas MDN messages notify the sender about how the already delivered message is processed by the recipient. For example, although a DSN will notify the sender that the mail message has been successfully deposited in a user's mailbox, it does not mean that the user has viewed the message. An MDN takes the process a step further and informs the sender when the recipient has actually opened the message.
An MDN is often referred to as a "read receipt" or a "return receipt" because it informs the sender that the mail message that was sent was opened by the recipient. A sender requests an MDN by including a "Disposition-Notification-To:" field in the header of the e-mail message. The address in the "Disposition-Notification-To:" field identifies where the disposition notification should be sent.
Example 6-5 illustrates the header for an e-mail that was delivered to the recipient [email protected]. This header requests that an MDN be sent to the sender [email protected]
. Note that the Disposition-Notification-To: field is found in the header information of the SMTP content portion of an SMTP message, unlike a DSN, which makes its notification request in the SMTP envelope.
Example 6-5 E-mail Message Header with an MDN Request
From: | [email protected] |
Subject: | Incoming Fax[DNIS=9913170][ANI=9194724118] |
Date: | May 22, 2007 2:05:26 PM EDT |
To: | [email protected] |
Received: | from fax 2811 ([14.80.32.200]) by RTP-ESC-T37. faxmail.com with |
Microsoft SMTPSVC(5.0.2172.1); Tue, 22 May 2007 21:06:43 -0400 |
Received: | (This is an incoming fax message from the PSTN) by fax_2811 for |
< [email protected]> (with Cisco Networks); Tue, 22 May 2007 18:05:26 +0000 |
Message-Id: | < [email protected]_2811> |
X-Mailer: | Technical Support: http://www.cisco |
Disposition- | Notification-To: [email protected] |
Mime-Version | : 1.0 |
Content-Type | : multipart/fax-message; boundary="yradnuoB=_00692007180523847.fax |
_2811" | |
X-Account-Id | : 0 |
Return-Path: | [email protected] |
X-Originalarrivaltime: 23 May 2007 01:07:04.0671 (UTC) |
FILETIME=[AD3C8EF0:01C79CD6] |
Because an MDN reveals to the sender whether and when a recipient has opened the mail message, it is sometimes considered an invasion of privacy. Because of these privacy considerations, MDN support is not available in several mail clients. If it is supported, it is typically implemented in such a fashion that the recipient is explicitly asked whether to acquiesce to the MDN request by the sender.
For instance, when the recipient of the e-mail in Example 6-5 opened that mail message, his mail reader requested for him to accept or deny the sender's request for a read receipt to be sent back. The recipient agreed to the request, and the MDN shown in Example 6-6 was sent.
Example 6-6 T.37 MDN Message
From: [email protected]
Subject: Read: Incoming Fax[DNIS=9913170][ANI=9194724118]
Date: March 31, 2007 3:58:20 PM EDT
To:
[email protected]
! Output omitted for brevity
This is a receipt for the mail you sent to "gsalguei" < [email protected]> at 5/22/2007 1:05 PM
This receipt verifies that the message has been displayed on the recipient's computer at 3/31/2007 2:58 PM
Example 6-6 T.37 MDN Message (Continued)
<MIME Attachment Information Follows:>
Final-Recipient: rfc822; [email protected] Original-Message-ID: < [email protected]_2811> Disposition: manual-action/MDN-sent-manually; displayed
Let's take a look at how the actual MDN message is actually formatted. Note that the MDN in Example 6-6 indicates in the Subject: that the recipient Read: the original message. Of course, there is no way of knowing whether the message was actually read or not, but the MDN does indicate in a human-readable explanation that the recipient did in fact open the message and even provides a timestamp for when it occurred.
The MDN also contains a MIME attachment with the information shown in Example 6-6. The Original-Message-ID: field is used to easily correlate the MDN receipt with the original e-mail. Note that the Original-Message-ID: field in the MDN in Example 6-6 matches up exactly with the Message-Id: field in the header of the original e-mail in Example 6-5.
The most important information in the MDN is found in the Disposition: field. The Disposition: field is a mandatory field for an MDN, and it is used to indicate what actions the recipient performed while processing the mail message.
Several attributes make up the information in the Disposition: field. The two most important parameters are the disposition-mode and the disposition-type. Table 6-5 defines the disposition-mode parameter settings.
Table 6-5 Disposition-Mode Parameter Settings
Disposition-Mode | Definition |
manual-action | The message disposition described by the disposition-type |
| parameter was an explicit instruction by the recipient. |
automatic-action | The message disposition described by the disposition-type |
| parameter was an automatic action not explicitly indicated by |
| the recipient. |
| Note: manual-action and automatic-action are mutually exclusive. |
| One or the other must be specified. |
MDN-sent-manually | The MDN was sent because the recipient explicitly gave |
| permission. |
MDN-sent-automatically The MDN was sent because the mail client is configured to do it automatically.
MDN-sent-automatically The MDN was sent because the mail client is configured to do it automatically.
Note: MDN-sent-manually and MDN-sent-automatically are mutually exclusive. One or the other must be specified.
The MDN in Example 6-6 clearly specifies in the Notification: header that the "dispositionmode" is manual-action/MDN-sent-manually. This indicates to the sender that the recipient explicitly and manually acknowledged the request for an MDN to be sent. Table 6-6 defines all the disposition-type parameter settings.
Table 6-6 Disposition-Type Parameter Settings
Disposition-type | Definition |
displayed |
The e-mail message has been displayed by the mail client. |
dispatched | The e-mail message has been dispatched somewhere (for example, |
| forwarded, printed, faxed, and so on) without necessarily having |
| been previously displayed. |
processed | The e-mail message has been processed in some other way and has |
| not been displayed by the mail client. |
deleted | The e-mail message has been deleted. |
denied | The recipient does not want to provide any information to the |
| sender about how the e-mail message was processed. |
failed | A failure prevented a proper MDN from being sent. |
The Notification: field for the MDN shown in Example 6-6 has a "disposition-type" with a value of displayed. Referencing Table 6-6, this means that the recipient's mail client displayed the e-mail in Example 6-5. You can get further information on the operation of MDN and all its related parameters in RFC 2298.