RFC 1405

Mapping between X.400(1984/1988) and Mail-11 (DECnet mail)

πŸ“… published January 1993, from ietf

RFC 1405 πŸ’–: Mapping between X.400(1984/1988) and Mail-11 (DECnet mail)

Okay bestie, let's start with the title block πŸŽ€. This is RFC 1405, written by C. Allocchio of I.N.F.N. - Italy, dated January 1993. It's an Experimental Protocol, and the title block doesn't list anything it obsoletes or updates. The whole thing is giving Network Working Group energy 🧚.


Status of This Memo ✨

So this memo defines an Experimental Protocol for the Internet community πŸ¦‹. They want feedback and suggestions for improvement, so speak up! For the standardization state and status of this protocol, check the current edition of the "IAB Official Protocol Standards" πŸ“š. Distribution of this memo is unlimited 🌈.

Abstract 🌸

This document describes a set of mappings that let systems running the CCITT X.400 ( 1984 / 1988 ) Recommendations on Message Handling Systems talk to systems running the Mail-11 (also known as DECnet mail) protocol πŸ’Œ. These specs are only valid inside the DECnet Phase IV addressing and routing scheme.

We also look at the whole X.400 / RFC822 / Mail-11 situation πŸ”₯, since things get messy when a message passes through multiple gateway translations.

The main focus is the mapping between O/R addresses and DECnet from/to addresses, and the other mappings are based on RFC 1327 and whatever updates come after it 🫢.

This is a combined effort of COSINE S2.2, the RARE MSG Working Group, and the IETF X.400 Ops Working Group πŸ‘‘.

Chapter 1 - Introduction πŸŽ€

1.1. X.400

When this document says "X.400", it means the CCITT 1984 and 1988 X.400 Series Recommendations for the Message Oriented Text Interchange Service (MOTIS) πŸ’…. This document only covers the Inter Personal Messaging System (IPMS), so that's the only piece we're dealing with πŸ™ˆ.

1.2. Mail-11

Mail-11 is also called DECnet mail, and people often (incorrectly) call it VMSmail πŸ’€. It's the proprietary protocol from Digital Equipment Corporation (DEC) for real-time text messaging between systems running the DECnet Phase IV networking protocols ⭐.

1.3. RFC822

RFC822 was defined as a standard for personal messaging inside the DARPA Internet, and now it's spread across tons of message transfer protocols like SMTP, UUCP, BITNET, JNT Grey Book, and CSnet πŸ“. Its mapping with X.400 is fully covered in RFC1327. In this document, we'll also look at how it relates to Mail-11 🧚.

1.4. The user community

The X.400 messaging community keeps growing all over the world 🌍. Still, there are a bunch of big communities on Mail-11-based messaging systems that want to talk easily with X.400-based Message Handling Systems πŸ₯Ή. Among these big DECnet networks are the High Energy Physics network (HEPnet) and the Space Physics Analysis Network (SPAN) ✨.

These DECnet communities might move to DECnet Phase V (DECnet-OSI) protocols in the future, which would turn their messaging systems into OSI specs, merging them into the X.400 MHS πŸ¦‹. But the transition could take forever, and there will probably always be some DECnet Phase IV communities hanging around πŸ’œ.

That's why this document describes a set of mapping rules for converting between Mail-11 and X.400 πŸŽ€.

It also covers Mail-11 systems that use the "foreign mail protocol," which lets Mail-11 interface with other mail systems, including RFC822-based ones 🌈.

Chapter 2 - Message Elements πŸ’…

2.1. Service Elements

Mail-11 only has a really small set of elements for building an Inter Personal Message (IPM), but X.400 supports a huge pile of service elements 😭. If a message gets relayed between two X.400 MHS through a DECnet network, you could basically lose all your info πŸ’€. To keep that from happening, most X.400 service elements get mapped into Mail-11 text body parts 🫢.

Then there's the case where a message starts on an RFC822 network and gets relayed through Mail-11 to an X.400 MHS. For that, we use the rules in RFC1327 and its updates to map X.400 service elements into Mail-11 text body parts, which gives you an RFC822-like header πŸŽ€.

2.2. Mail-11 service elements

All the Mail-11 envelope (P1) and header (P2) service elements are supported when converting to X.400 πŸ”₯. Just know that Mail-11 P1 is made up only of P1.From and P1.To, and every other Mail-11 element belongs to P2 🌸:

  • P1.From maps to P1.Originator
  • P1.To maps to P1.Primary Recipient
  • P2.From maps to P2.Originator
  • P2.To maps to P2.Primary Recipient
  • Cc maps to P2.Copy Recipient
  • Date maps to Submission Time Stamp
  • Subj maps to Subject

Any RFC822-like text header inside a Mail-11 body part gets interpreted the way RFC1327 and its updates say ✨.

2.3. X.400 service elements

These X.400 service elements are supported directly in the Mail-11 conversion 🧚:

  • P1.Originator maps to P1.'From'
  • P1.Primary Recipients maps to P1.'To'
  • P2.Originator maps to P2.'From'
  • P2.Primary Recipients maps to P2.'To'
  • Copy Recipients maps to 'Cc'
  • Submission Time Stamp maps to 'date'
  • Subject maps to 'Subj'

This X.400 service element is only partly supported in the Mail-11 conversion πŸ™ˆ:

  • Blind Copy Recipient: to keep things private, when a message has a BCC address, these steps happen 🀫:
    • a new message gets created, holding the body parts;
    • a new envelope gets added to the new message, holding only the originator and BCC recipient addresses;
    • a note gets added to the message to tell the BCC recipient that it was a BCC;
    • the new message is delivered separately;
    • a note gets added to the message delivered to the TO and CC recipients, letting them know there were some BCC recipients too.

Any other X.400 service element support follows RFC1327, including the element being mapped into the RFC822-like header inside the Mail-11 body part πŸ’–.

Chapter 3 - Basic Mappings 🌈

The basic mappings in RFC1327 and its updates should be fully used πŸ“.

Chapter 4 - Addressing πŸ¦‹

4.1. Mail-11 addressing

Mail-11 addressing can go from super simple to very complicated if other Mail-11 to "something-else" gateways are involved πŸŒ€. Either way, a Mail-11 address is an ASCII string made up of different elements πŸ’œ.

4.2. X.400 addressing

An X.400 O/R address is a collection of attributes, and it can still be shown as an IA5 textual representation, as defined in chapter 4 of RFC1327 ✨.

4.3. Mail-11 address components

Let's break down the parts of a Mail-11 address 🧩. Any Mail-11 address has 3 parts:

[[route]::] [[node]::] local-part

route and node are optional, and only local-part is compulsory πŸŽ€.

Here's the strict definition of these elements πŸ€“:

  node = *(ALPHA/DIGIT) / *DIGIT / *DIGIT "." *DIGIT

  route = *(node "::")

  local-part = username / nickname / for-protocol

  username = *(ALPHA/DIGIT)

  nickname = <printablestring - <" " and HTAB>>

  for-protocol = (f-pref f-sep <">f-address<">)

  f-pref = *(ALPHA/DIGIT)

  f-sep = "%" / "::"

  f-address = printablestring / RFC822-address / X400-text-address

  X400-text-address = <textual representation of an X.400 O/R addr>

Also, in x-text-address, the ";" notation and the "/" notation are both equivalent and allowed (see examples in different sect.) πŸ¦‹. Here are some examples πŸ’…:

      route           node    local-part
      -----------------------------------------------------------
                              USER47
                      MYNODE::BETTY
      BOSTON::CLUS02::GOOFY1::MARY34
                              IN%"M.P.Tracy@Dicdum.cc.edu"
              UCLA13::MVAX93::MRGATE::"MBOX1::MBX34::MYC3::BOB"
                      MIAMI2::George.Rosenthal
              CCUBVX::VS3100::Jnet%"IAB3425@IBAX23L"
                              MRGATE::"C=xx::A=bbb::P=ppp::S=Joe"
                      MAINVX::IN%"path1!path2!user%dom"
                      GWX400::gw%"C=xx;ADMD=aaa;PRMD=ppp;S=Lee;"
                      GX409A::x400%"/C=xx/A=aaa/P=ppp/S=Lee"
                              smtp%"postmast@nodeb.bitnet"
              MICKEY::PRFGAT::profs%"NANCY@IBMB"
                              edu%"HU427BD%CSUNIB@abc.acme.edu"

Chapter 5 - Mapping 🫧

5.1. Mapping scheme

The DECnet address field is kind of a "flat land," with some required routes to reach hidden areas πŸ—ΊοΈ. So a truly hierarchical mapping scheme with mapping tables, like the one used for RFC822, isn't the right fit πŸ™…. Instead, the mapping is defined by a fixed set of rules that use DDAs support πŸ’«.

Another big deal is that lots of separate DECnet networks share the same DECnet address space 🌐. A common X.400 and/or RFC822 mail system can act as the glue connecting these isolated Mail-11 islands 🏝️. So to uniquely identify each DECnet network, we also introduce the concept of a "DECnet network name," which we'll just call 'net' from here on 🏷️. A 'net' is a unique ASCII string that identifies the DECnet network we're connected to. To be more specific, the 'net' element identifies the DECnet community being served, so it can differ from the actual official network name πŸ’. Aliases are allowed for the

       net = 'HEPnet'       the High Energy Physics DECnet network
       net = 'SPAN'         the Space Physics Analysis Network
       net = 'Enet'         the Digital Equipment Corporate Network

Labelling each DECnet network with its name also comes from needing an 'intelligent' gateway 🧠. That's a gateway that knows it can connect directly to the specified DECnet network, even if the O/R address gives a path through a different gateway πŸ›£οΈ. There's more detail on this in 5.3 and 5.5 πŸ“–.

There also needs to be a registry of 'net' attributes and their matching gateways, so the names stay unique πŸ”. A simple table pairs 'net' with the gateway address, using syntax similar to the 'gate' table in RFC1327 ✨. For example:

        HEPnet#OU$Cosine-gw.O$@.PRMD$infn.ADMD$garr.C$IT#
        SPAN#OU$Cosine-gw.O$@.PRMD$infn.ADMD$garr.C$IT#
        SPAN#O$ESRIN1.PRMD$esa.ADMD$Master400.C$it#

Ambiguous left entries are allowed πŸ€·β€β™€οΈ. Gateway implementations can just pick one of them, or try them all in cyclic order to get better performance πŸš€.

In order to keep the mapping rules very simple, avoiding the need to analyse Mail-11 addresses to distinguish the 'route', 'node' and needed to cover the mapping problem. πŸ₯Ί

5.2. Mail-11 --> X.400 πŸ’–

okay so this is the Mail-11 to X.400 direction, and it's giving tidy πŸŽ€. We define these two Domain Defined Attributes to carry a Mail-11 address:

DD.Dnet
DD.Mail-11

So the mapping rule

route::node::localpart

turns into

C=xx; ADMD=yyy; PRMD=zzz; O=ooo; OU=uuu; DD.Dnet=net;
DD.Mail-11=route::node::localpart;

where:

  • xx is the country code of the gateway doing the conversion
  • yyy is the Admd of the gateway doing the conversion
  • zzz is the Prmd of the gateway doing the conversion
  • ooo is the Organisation of the gateway doing the conversion
  • uuu is the Org. Unit(s) of the gateway doing the conversion
  • net is the name of the DECnet network (e.g., HEPnet, SPAN,...) 🌸

zzz, ooo and uuu get used or dropped as needed, just so the gateway can be uniquely identified inside the X.400 MHS. ✨

There are also some defaults that save the day 🫢:

  • If node is missing and we're mapping the Mail-11 originator (From), then node defaults to the DECnet node name of the gateway (gwnode).
  • If node is missing and we're mapping the Mail-11 recipient (To, Cc), then node defaults to the DECnet node name of the From address.
  • If DD.Dnet=net is missing, it defaults to a value the gateway sets locally. If the gateway is connected to exactly one DECnet network, net is that network's name. If it's connected to more than one, the gateway picks a "first choice" DECnet network and net defaults to that. πŸ’…

If local-part contains an x400-text-address, go check section 6.4.3. If local-part contains an RFC822-address, go check section 6.4.4. πŸ¦‹

5.2.1. Examples 🌈

Let's say:

  • the DECnet network name (net) is HEP;
  • the DECnet node name of the gateway (gwnode) is X4TDEC;
  • the Country Code of the gateway is IT and its ADMD is garr (and these two fields are enough to uniquely identify the gateway within the X.400 MHS).

Then:

USER47
 C=it; ADMD=garr; DD.Dnet=HEP; DD.Mail-11=X4TDEC::USER47;

MYNODE::BETTY
 C=it; ADMD=garr; DD.Dnet=HEP; DD.Mail-11=MYNODE::BETTY;

BOSTON::CLUS02::GOOFY1::MARY34
 C=it; ADMD=garr; DD.Dnet=HEP; DD.Mail-11=BOSTON::GOOFY1::MARY34;

UCLA13::MVAX93::MRGATE::"MBOX1::MBX34:MYC3::BOB"
 C=it; ADMD=garr; DD.Dnet=HEP;
 DD.Mail-11=UCLA13::MVAX93::MRGATE::(q)MBOX1::MBX34::MYC3::BOB(q)

MIAMI2::George.Rosenthal
 C=it; ADMD=garr; DD.Dnet=HEP; DD.Mail-11=MIAMI2::George.Rosenthal;

MRGATE::"C=xx::A=bbb::P=ppp::S=Joe"
 C=it; ADMD=garr; DD.Dnet=HEP;
 DD.Mail-11=X4TDEC::MRGATE::(q)C=xx::A=bbb::P=ppp::S=Joe(q)

MAINVX::In%"path1!path2!user%dom"
 C=it; ADMD=garr; DD.Dnet=HEP;
 DD.Mail-11=MAINVX::In(p)(q)path1(b)path2(b)user(p)dom(q)

5.3. X.400 encoding of Mail-11 --> Mail-11 πŸ“

okay so to keep the path reversible when a message crosses more than one Mail-11/X.400 gateway, we have to split this into two cases 🧚

  • DD.Dnet=net is known to the gateway as one of the DECnet networks it's connected to. In this case the mapping is trivial:
C=xx; ADMD=yyy; PRMD=zzz; O=ooo; OU=uuu; DD.Dnet=net;
DD.Mail-11=route::node::localpart;

(see sect. 5.2 for the explanation of xx, yyy, zzz, ooo, uuu, net)

maps into

route::node::localpart
  • DD.Dnet=net is NOT known to the gateway as one of the DECnet networks it's connected to. In this case the mapping rule described in section 5.4 applies:
C=xx; ADMD=yyy; PRMD=www; DD.Dnet=net;
DD.Mail-11=route::node::localpart;

maps into

gwnode::gw%"C=xx;ADMD=yyy;PRMD=www;DD.Dnet=net;
DD.Mail-11=route::node::localpart;"

5.3.1. Examples πŸŽ€

Let's say:

  • the DECnet network name (net) is HEP;
  • the DECnet node name of the gateway (gwnode) is X4TDEC;
  • the Country Code of the gateway is IT and its ADMD is garr;
  • (and these two fields are enough to uniquely identify the gateway within the X.400 MHS).

Then:

C=it; ADMD=garr; DD.Dnet=HEP;
DD.Mail-11=X4TDEC::MRGATE::(q)C=ab::A=dsa::P=qwty::OU=mie::S=Cly(q)
  MRGATE::"C=ab::A=dsa::P=qwty::OU=mie::S=Cly"

C=it; ADMD=garr; DD.Dnet=EASYNET; DD.Mail-11=ROM01::CARLO;
  X4TDEC::gw%"C=it;ADMD=garr;DD.Dnet=EASYNET;
  DD.Mail-11=ROM01::CARLO;"

(in the example above, 'EASYNET' is supposed to be not connected to our gateway on the X4TDEC DECnet node πŸ™ˆ)

5.4. X.400 --> Mail-11 πŸ’œ

so mapping an X.400 O/R address into Mail-11 works like this: you encode its attributes into the X400-text-address, as defined in chapter 4 of RFC1327, and include that as the 'f-address'. Then you add an 'f-pref' and the DECnet node name of the gateway. ✨

So

x400-text-address

gets encoded like

gwnode::gw%"x400-text-address"

with spaces between the attributes being optional. 🫢

5.4.1. Example 🌸

Let's say:

  • the DECnet node name of the gateway (gwnode) is X4TDEC;

So

C=gb; ADMD=Gold 400; PRMD=AC.UK; O=ucl; OU=cs; G=Jim; S=Clay;

will be encoded like

X4TDEC::gw%"/C=gb/A=Gold 400/P=AC.UK/O=ucl/OU=cs/G=Jim/S=Clay"

or, with the ; notation instead,

X4TDEC::gw%"C=gb;ADMD=Gold 400;PRMD=AC.UK;O=ucl;OU=cs;G=Jim;S=Clay;"

5.5. Mail-11 encoding of X.400 --> X.400 πŸ¦‹

It can happen that Mail-11 is used to relay messages between X.400 systems. That means multiple X.400/Mail-11 gateway crossings, and we'll run into Mail-11 addresses carrying embedded X.400 information. To keep the path reversible we have to split this into two cases 🌈

  • The embedded X.400 address belongs to a domain whose naming and routing rules are known to the global X.400 MHS. In this case the mapping is trivial:
route::gwnode::gw%"x400-text-address"

maps into

x400-text-address

'route' and 'gwnode' are mapped into X.400 Trace service elements.

  • The encoded X.400 domain does not belong to the global X.400 name space. In this case the mapping rule described in section 5.2 applies:
route::gwnode::gw%"x400-text-address"

maps into

C=xx; ADMD=yyy; DD.Dnet=net;
DD.Mail-11=route::gwnode::gw(p)(q)x400-text-address(q);
⚠️ This last case is deprecated. It must be regarded as a possible temporary solution only, while waiting for this domain to be included in the global X.400 MHS. πŸ™ƒ

5.5.1. Examples πŸ’…

Let's say:

  • the DECnet network name (net) is HEP;
  • the DECnet node name of the gateway (gwnode) is X4TDEC;
  • the Country Code of the gateway is IT and its ADMD is garr;
  • (and these two fields are enough to uniquely identify the gateway within the X.400 MHS).

Then:

X4TDEC::gw%"C=fr;ADMD=atlas;PRMD=ifip;O=poly;S=Moreau;"
  C=fr; ADMD=atlas; PRMD=ifip; O=poly; S=Moreau;

X4TDEC::gw%"C=zz;ADMD= ;PRMD=Botwa;O=Miner;S=Chiuaw;"
  C=it; ADMD=garr; DD.Dnet=HEP;
  DD.Mail-11=X4TDEC::gw(p)(q)C=zz;ADMD= ;
  PRMD=Botwa;O=Miner;S=Chiuaw;(q)

(in the example above, C=zz is unknown to the global X.400 MHS πŸ’€)


Chapter 6 - Complex mapping πŸ”₯

6.1. The protocol triangle πŸ”Ί

The bilateral mappings in chapter 5 have to be extended so they also cover the case where RFC822 addressing is involved too, which gives us this triangle situation πŸ‘‘

                                   x.400
                                   /  \
                                  /    \
                                 /      \
                             Mail-11----RFC822

The X.400 - RFC822 side is fully covered by RFC1327, and the earlier chapters of this document cover the Mail-11 - X.400 side. πŸŽ€

Right now a bunch of implementations also do the mapping along the Mail-11 - RFC822 side. The most important of these de facto standards are discussed in Appendix A, together with a Mail-11 - RFC822 mapping scheme that covers this side of the triangle. ✨

6.2. RFC822 mapped in Mail-11 πŸ¦‹

The 'RFC822-address' is usually included in 'local-part' like this:

route::gwnode::gw%"rfc822-address"

for example:

NVXA23::SMTPGW::in%"M.T.Rose@CS.UCLA.edu"

6.3. Mail-11 mapped in RFC822 🧚

There are different styles for mapping a Mail-11 address into RFC822. Here's a quick summary πŸ’–

  • A Mail-11 address encoded in the "Left Hand Side" (LHS) of an RFC822 address, using "%" syntax or "::" syntax:
route::node::localpart

maps to

localpart%node%route@gw-domains

or

"route::node::localpart"@gw-domains

where 'gw-domains' uniquely identify the Mail-11 / RFC822 gateway.

  • A Mail-11 address maps partly to the LHS and partly to the 'domain' part of an RFC822 address:
node::localpart

maps to

localpart@node.gw-domains
  • A Mail-11 address is completely hidden by a mapping table / directory, and the resulting RFC822 address contains no trace at all of the original address.

As you may have noticed, in every one of these cases the resulting RFC822 address can't be told apart from a genuine RFC822 address. πŸ™ˆ

6.4. Multiple conversions 🌸

Let's look briefly at the situations involving multiple conversions, where one protocol relays between the other two. This summary suggests some possible enhanced solutions that avoid heavy and unduly complicated mappings, but the 'step by step' approach, which treats each conversion blindly as disjoint from the other as described in the previous sections, can always be used. πŸ’…

6.4.1. X.400 --> RFC822 --> Mail-11 🌈

We apply the RFC1327 rules to the first step, which gives us an RFC822 address. That can then be mapped into Mail-11 using the 'f-address' field, as described in section 6.2.

An example:

C=gb; ADMD=Gold 400; PRMD=AC.UK; O=UCL; OU=cs; G=Jim; S=Clay;

maps, according to RFC1327, to

Jim.Clay@cs.UCL.AC.UK

and finally becomes

SMTPGW::In%"Jim.Clay@cs.UCL.AC.UK"

where 'SMTPGW' is the DECnet node name of the machine running the RFC822 to Mail-11 gateway. 🫢

6.4.2. Mail-11 --> RFC822 --> X.400 πŸ¦‹

Some of the possible mappings described in section 6.3 apply to the Mail-11 address, which hides its origin completely. The RFC1327 rules apply on the last step. 🧚

An example:

RELAY::MYNODE::BETTY

could map into RFC822 as

BETTY%MYNODE@RELAY.dnet.gw1.it

and, according to RFC1327,

C=it; A=garr; P=dom1; O=gw1; OU=RELAY; S=BETTY(p)MYNODE;

where 'dnet.gw1.it' is the domain of the machine running the Mail-11 to RFC822 gateway. πŸ’œ

6.4.3. X.400 --> Mail-11 --> RFC822 🌟

The X.400 address is stored in the Mail-11 'f-address' element, as described in sections 5.3 and 5.4. Then, if the Mail-11 to RFC822 gateway can understand that there's an 'x400-text-address' in the Mail-11 address, it applies RFC1327 to it and encodes header. Otherwise it applies the rules described in 6.3. πŸŽ€

An example:

C=gb; ADMD=Gold 400; PRMD=AC.UK; O=UCL; OU=cs; G=Jim; S=Clay;

will be encoded like

X4TDEC::gw%"/C=gb/A=Gold 400/P=AC.UK/O=UCL/OU=cs/G=Jim/S=Clay"

If the Mail-11 to RFC822 gateway recognises the x400-text-address, then, according to RFC1327, the address becomes

Jim.Clay@cs.UCL.AC.UK

and the following RFC822 header line is added

Received: from X4TDEC with DECnet (Mail-11) on xx-xxx-xxxx.

Otherwise, one of the dumb rules could produce

gw%"/C=gb/A=Gold 400/P=AC.UK/O=UCL/OU=cs/G=Jim/S=Clay"@X4TDEC.doms

6.4.4. RFC822 --> Mail-11 --> X.400 πŸ¦‹

okay so first the RFC822 address gets encoded into a Mail-11 f-address element, like we covered in sect. 6.2 πŸ’…. Then, if the Mail-11 to X.400 gateway can spot an RFC822-address inside that Mail-11 address, it applies RFC1327 to it, encodes the route, and runs the rules from 5.2 and 5.5. it's giving multi-step glow-up ✨

an example:

Jim.Clay@cs.UCL.AC.UK

gets encoded like this πŸ‘‡

SMTPGW::In%"Jim.Clay@cs.UCL.AC.UK"

if the gateway recognises the RFC822-address, then according to RFC1327 the address becomes:

C=gb; ADMD=Gold 400; PRMD=AC.UK; O=UCL; OU=cs; G=Jim; S=Clay;

and a trace record gets added into the X.400 P1 data, saying a node named SMTPGW was crossed 🧚

otherwise the dumb rule produces:

C=it; ADMD=garr; DD.Dnet=HEP;
DD.Mail-11=SMTPGW::In(p)(q)Jim.Clay(a)cs.UCL.AC.UK(q)

6.4.5. RFC822 --> X.400 --> Mail-11 πŸŽ€

bestie, we apply RFC1327 to the first conversion so we get an X.400 address 🌸. Then the rules in sections 5.3 and 5.4 store that X.400 address as x400-text-address inside the Mail-11 address. Literally so clean.

an example:

Jim.Clay@cs.UCL.AC.UK

maps to this via RFC1327:

C=gb; ADMD=Gold 400; PRMD=AC.UK; O=UCL; OU=cs; G=Jim; S=Clay;

and then it finally becomes:

SMTPGW::gw%"/C=gb/A=Gold 400/P=AC.UK/O=UCL/OU=cs/G=Jim/S=Clay"

where SMTPGW is the DECnet node name of the machine running the X.400 to Mail-11 gateway πŸ–₯οΈπŸ’–

6.4.6. Mail-11 --> X.400 --> RFC822 🌈

so the Mail-11 address gets encoded as sections 5.2 and 5.5 spell out, and then RFC1327 turns it into RFC822 πŸ¦‹ ngl this is a full round trip.

an example:

RELAY::MYNODE::BETTY

maps into X.400 as:

C=it; ADMD=garr; DD.Dnet=HEP; DD.Mail-11=RELAY::MYNODE::BETTY;

and then, according to RFC1327:

"/C=it/A=garr/DD.Dnet=HEP/DD.Mail-11=RELAY::MYNODE::BETTY"@gw2.it

where gw2.it is the domain of the machine running the RFC1327 gateway πŸ’…


Appendix A Mail-11 - RFC822 mapping 🧚

A.1 Introduction πŸ’œ

the Mail-11 to RFC822 gateway was tackled by tons of software developers, all doing their own thing 😭. It got built into loads of mail products running on both VAX/VMS and UNIX systems. Since there was no single standard way to do the mapping, the implementations turned into a bunch of different variant methods for turning a Mail-11 address into an RFC822 one. Some of these products got super widespread, so they started forming a bunch of de facto mapping methods, iykyk.

this little appendix tries to standardise the mapping problem, aiming to stay compatible with the software people already have installed 🫢. We also need to remember that, in some cases, only simple Mail-11 addresses could be mapped into RFC822, and complex ones gave all sorts of pretty strange results πŸ’€.

the other direction was way more straightforward, though. Mapping an RFC822 address into Mail-11 gave a common definition, which uses the "Mail-11 foreign mail protocol" to design an RFC822 address:

[[node::][node::]...]prot%"rfc-822-address"

or

[node::][node::]...]::"rfc-822-address"

A.2 De facto implementations 🌸

a considerable number of de facto Mail-11/RFC822 gateway implementations exist out there. As we said in the introduction, mapping RFC822 addresses into Mail-11 is done with the foreign mail protocol syntax, so it's unique πŸ”₯.

Mail-11 addresses, on the other hand, get encoded into RFC822 syntax in a few different ways. The most common ones are these:

a) "node::user"@gateway-address
b) user%node@gateway-address
c) user@node.decnet.domains
d) user%node.dnet@gateway-address

let's take a quick look at each of these choices πŸ‘€

  • a - this form just wraps the original Mail-11 address, as a quoted Left Hand Side string, inside the RFC822 address of the Mail-11/RFC822 gateway. It's fully conformant with RFC822 syntax, and the Mail-11 address is left untouched, so no encoding rules need to be applied to it. Clean girl energy πŸŽ€
  • b - ngl this one is a little sus 😬. It has nothing in it that says the address is a Mail-11 one, so the encoding can't be told apart from a similar encoding of RSCS (BITnet) addresses used by some IBM VM Mailer systems. It should thus be deprecated.
  • c - here a sort of 'reserved word' (decnet) sitting inside the address itself tells you there's a Mail-11 original address in front of it. Decoding is possible, since you drop 'domains' and pull out the 'user' and 'node' parts. However, complex Mail-11 addresses cannot be mapped properly in this syntax, and there's no specific rule for adding the 'domains' part of the address πŸ™ˆ.
  • d - again, there's a 'reserved word' (dnet) here that makes it possible to identify the original Mail-11 address. 'gateway-address' points to the Mail-11/RFC822 gateway, and the 'node' and 'user' info can be easily pulled from the address. However, complex Mail-11 addresses cannot be embedded easily into this syntax πŸ’”.

from the examples we just saw, we can work out a canonical form for representing the mapping between Mail-11 and RFC822 ✨.

A3.1 RFC822 mapped in Mail-11 πŸ“

mapping an RFC822 address into Mail-11 is straightforward, using the "Mail-11 foreign mail protocol" syntax. The two possible variants are:

[[node::][node::]...]prot%"rfc-822-address"

or

[node::][node::]...]::"rfc-822-address"

A3.2 Mail-11 mapped in RFC822 πŸ’œ

RFC822 has a canonical form for representing non-RFC822 addresses: you put the foreign address in the local part (Left Hand Side, LHS) in a form as similar as possible to its original syntax. So the suggested mapping is:

"Mail-11-address"@gateway-address

this format also makes sure the return path works through the appropriate gateway πŸ”.

A.4 Conclusions 🌈

a standard way of mapping Mail-11 addresses into RFC822 and back is feasible πŸ‘‘. A suggestion is therefore made to unify all existing and future implementations. It's worth noting, though, that there is no way to specify in these mappings the name of the decnet community that owns the encoded address, the way it was done for X.400. So the 'intelligent' gateway in this case is impossible 😭.


Acknowledgements 🫢

I wish to thank all the people who read the first draft and contributed a lot of useful suggestions to the revision of this document πŸ’–, in particular RARE WG1, the IETF X.400 ops group members, and S. Hardcastle-Kille.

References πŸ“š

  • [1] CCITT, "CCITT Recommendations X.400-X.430", Message Handling Systems: Red Book, October 1984.
  • [2] CCITT, "CCITT Recommendations X.400-X.420", Message Handling Systems: Blue Book, November 1988.
  • [3] Crocker, D., "Standard of the Format of ARPA Internet Text Messages", STD 11, RFC 822, UDel, August 1982.
  • [4] Kille, S., "Mapping Between X.400 and RFC 822", UK Academic Community Report (MG.19) / RFC 987, June 1986.
  • [5] Kille, S., "Mapping Between X.400(1988) / ISO 10021 and RFC 822", RFC 1327, March 1992.
  • [6] Digital Equipment Corp.;, "VAX/VMS Mail Utility".
  • [7] Joiner Associates Inc., "Jnet User's Manual".
  • [8] PMDF User's Guide.

Security Considerations πŸ”’

Security issues are not discussed in this memo. πŸ’€ (no drama, just vibes)

Author's Address πŸ–ŠοΈ

Claudio Allocchio
Cosine S2.2
Sincrotrone Trieste
Area di Ricerca
Padriciano 99
I 34012 Trieste
Italy

Phone:   +39 40 3758523
Fax:     +39 40 226338
EMail:  Claudio.Allocchio@elettra.Trieste.it
        C=it; A=garr; P=Trieste; O=Elettra; S=Allocchio; G=Claudio;

that's a wrap on RFC 1405, bestie 🌈✨🫢

πŸ“¦ where this page comes from