In the last 10 years, email has evolved from the uber-geeky tool into the corporate mainstream solution that no one can live without. At the base, Internet email is a 40+ year old technology that was originally designed to provide a reliable (not time sensitive) solution for communications between colleagues. As it has gained popularity corporations have started to rely on it for business critical communications with their customers and vendors. Nowadays, IT departments learn about their outages by how well the email solution is performing.
In the rest of this article, I plan on covering a few of the troubleshooting techniques I use to resolve Internet email issues and what may have caused them.
The Parts of an Email
Every email message delivered across the Internet has 2 basic parts, a header and data. The header consists of the delivery information (To, From) and routing information (what servers processed the message when). The data portion consists of the subject, message body and any attachments. (Note: Since Internet email cannot directly handle files, these attachments are [w:uuencoding|converted] to text and placed inline with the message body. This encoding process can add an additional 30% to the attachment size when completed.)
Message Delivery
The delivery of an email message is not obvious. A message may bounce around a dozen times (or more) before it is delivered to the intended recipient. This entire transaction can be found in the message headers.
Here is a great graphic from Wikipedia:

If you read the header from bottom to top, you see that Alice sent the message at 16:56 -5hrs (or EST) (line #7) and it was delivered at 13:55 -8hrs (or PST) (line #2), meaning it officially delivered before it was sent! (or the two email servers are using different time synchronization servers. You'll also notice that this header includes the IP Address of the servers it touched (line 2 & 4). This is helpful when trying to troubleshoot errors later on.
Here are the possible SMTP Response codes that you may see. Please keep in mind that in general a 2XX indicates success, a 3XX indicates that the server has understood the request but requires further information to complete it, a 4XX error is temporary and a 5XX error is fatal. Float over the
for my take on the error.
| SMTP Code | SMTP / ESMTP Message Description |
|---|---|
| 211 | System status, or system help reply |
| 214 | Help message |
220![]() |
Service ready |
| 221 | Service closing transmission channel |
250![]() |
Requested mail action okay, completed |
251![]() |
User not local; will forward to (other address) |
354![]() |
Start mail input; end with . |
421![]() |
Service not available, closing transmission channel |
450![]() |
Requested mail action not taken: mailbox unavailable |
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 |
551![]() |
User not local; please try |
552![]() |
Requested mail action aborted: exceeded storage allocation |
553![]() |
Requested action not taken: mailbox name not allowed |
554![]() |
Transaction failed |