Simple Mail Transport Protocol

The EMail protocol involved in sending messages (typically from sending-user to sender's server to recipient's server).

A server which uses SMTP is typically called a Mail Transport Agent (MTA).

There are a number of Open Source MTA apps (SendMail, PostFix, Q Mail, ExIm). This piece provides a very short comparison.

VERP: Variable Envelope Return Path

The protocols associated with reading EMail are POP and IMAP.

notes on writing code to send messages

get better performance from holding single SMTP connection object for multiple messages sent

  • but if a send fails (because of bad address or something) the connection often gets hosed (e.g. your next 'send' gets a 'nested command' error or something like that)
    • so typically call 'quit' on the connection
    • so have to re-create a connection or the next send in the batch will fail
    • or is there a 'reset' function I could use instead of 'quit'?
      • there's a low-level 'RSET' command, but will avoid for now
  • conclusion: just use a separate connection per message for now (I would welcome input from a Python guru...)

Back in 2008 I wrote Python code to process email blocks/errors

  • we were sending email to 1M people
  • we were just writing code to push to PostFix which did the sending
  • we didn't have any hooks catching responses in realtime
  • so I wrote code which scraped (by parsing the files)
    • the inbox of the account we sent from
    • abuse and postmaster inboxes which would get feedback loop messages
  • (these days, to get decent deliverability, you probably have to use an ESP, and they handle all this automatically, though you might have to do work if you want to dig into the data on blocked accounts)

Edited: |