On-Demand Mail Relay
On-Demand Mail Relay (ODMR) is an SMTP extension standardized in RFC 2645 that allows e-mail to be relayed to the recipients after they have been authenticated. It uses the extended SMTP command ATRN
, similar to the ETRN command but available for dynamically assigned IP addresses.
ODMR works in the following way: to check their inbound mail, customers issue EHLO and AUTH commands to the ODMR service, followed by ATRN command (Authenticated TuRN); after a successful ATRN command the ODMR server begins to act as an SMTP client and starts to send all messages directed to the customer's domain (or domains) using SMTP protocol, via the same TCP connection. Since connections are initiated by customers, this protocol works well for machines having dynamically assigned IPs and/or are firewall protected (i.e. your ISP may block incoming connection on port 25 or may use NAT). Only the ODMR server, referred as the provider, must listen to SMTP connections on a fixed IP address.
External ODMR Support
The design of ODMR allows the protocol to be used with an SMTP server that doesn't support it natively. A separate application can be used to do the initial ODMR protocol negotiation (EHLO, AUTH and ATRN), then hand over the connection to the SMTP server once the protocol has reached the "reversed" state.
ODMR transport example
A typical example of getting emails with odmr.
For illustration purposes here (not part of protocol), the protocol exchanges are prefixed for the server (>) and the client (<).
> 220 EXAMPLE.NET on-demand mail relay server ready < EHLO example.org > 250-EXAMPLE.NET > 250-AUTH CRAM-MD5 EXTERNAL > 250 ATRN < AUTH CRAM-MD5 > 334 <keysequenz> > 235 now authenticated as example.org < ATRN example.org,example.com > 250 OK now reversing the connection < 220 example.org ready to receive email > EHLO EXAMPLE.NET < 250-example.org < 250 SIZE > MAIL FROM:<Lester.Tester@dot.foo.bar> < 250 OK > RCPT TO:<l.eva.msg@example.com> < 250 OK, recipient accepted ... > QUIT < 221 example.org closing connection
ODMR clients
- fetchmail (GPL) works with many protocols, including ODMR; win32 ports require Cygwin: looks like that doesn't support TLS data exchange (using STARTTLS)
- xatrn (closed source), win32 only; doesn't support TLS data exchange (using STARTTLS)
- xODMR (GPL), portable (pure Python), works fine with TLS.