What’s the difference between SRS0 and SRS1 formats?
Still have a question, spotted an error, or have a better explanation or a source we should cite?
When SRS rewrites an email's Return-Path address, it uses two different formats depending on where in the forwarding chain the email is.
SRS0 is used on the first forwarding hop. It creates a full rewrite that encodes the original sender's domain, local part, and a timestamp and hash for verification. It looks something like: SRS0=hash=TT=originaldomain.com=user@forwarder.com. This is the "complete" format with all the original address information embedded inside it.
SRS1 is used on subsequent hops, when an SRS0 address gets forwarded again. Instead of encoding everything fresh, SRS1 stores a reference to the previous SRS0 address. This keeps the Return-Path from growing longer with each additional hop. Without SRS1, a message forwarded three times would have a Return-Path address three times as long, which some mail servers would reject.
So In short: SRS0 does the full encoding on the first hop. SRS1 compresses subsequent hops by referencing the prior SRS encoding rather than stacking new layers on top of it.
If this feels like a lot of complexity for what it accomplishes, that's part of why most modern systems use DKIM alignment and ARC instead. SRS is rarely deployed today.
Contributors
Who worked on this answer
Every name links to their profile. Every company links to their site. Real people, real accountability.