メールに関する覚え書き

〜規格を満たすであろう書式に関する覚え書き〜

最大長は何バイト?

メール関係の仕様って調べるのが結構しんどい。

メールアドレスの検証(最大長は 320バイト)

メールアドレスの最大長は 320バイト。
■RFC3696より
(Application Techniques for Checking and Transformation of Names)
以下のメールアドレスは「正しい」アドレスである。
Abc\@def@example.com
customer/department=shipping@example.com
user+mailbox/department=shipping@example.com
!#$%&'*+-/=?^_`.{|}~@example.com
!def!xyz%abc@example.com
"Abc@def"@example.com (quoted-string)
exsample@[192.0.2.69]

正しいメールアドレスの条件

  1. メールアドレスは local part と domain が @ で区切られて構成されている。(RFC2822)
  2. local partは、
    アルファベット、数字、記号 ! # $ % & ' * + - / = ? ^ _ ` { | } ~ で、ドット「 . 」で区切られている場合がある。
    ドット「 . 」は最初、最後、他のドットの隣にあってはいけない。(連続しない) (RFC2822 3.2.4)
    → ドット「 . 」は先頭と末尾以外で使用可能。2個以上連続してはならない
  3. local partは、 クオーテーションマーク「 " 」のなかにスペースを含む種々の文字が入った quoted string を含むことがある (RFC2822 3.2.5)
    quoted-string 形式の場合、( ) < > [ ] : ; @ , および ドット「 . 」と空白文字を制限無く使用できる。
  4. \@ などの "quoted pair" をlocal partに含むものも「正しい」。
    注意:"obsolete" (RFC822、RFC2822 4.4) (RFC2822はRFC822をsupersedeしてobsoleteにした、とある)
  5. local partの最大長は 64文字 (RFC2821 4.5.3.1)
  6. domainは、labelがドットで区切られたものである (RFC1035 2.3.1)
  7. domainは、アルファベットで始まり、その後に、0文字以上のアルファベット、数字、ハイフン「 - 」が続き、最後の一字はアルファベットか数字。(RFC1035 2.3.1)
  8. labelの最大長は 63字 (RFC1035 2.3.1)
  9. domainの最大長は 255字 (RFC2821 4.5.3.1)
  10. domainは、fully qualifiedで、DNSのtype AもしくはMXレコードでresolvableでなければならない (RFC2821 3.6)

RFC822の非常に嫌らしい例

下方互換のため、この様なアドレスでも通さなければならない。
Muhammed.(I am the greatest) Ali @(the)Vegas.WBA
     ↓
Muhammed.Ali@Vegas.WBA
※コメントはデリミタとして扱われるため(ピリオドやスペースと同じ扱い)、".","@"の前後に配置するのが無難。

実際通るか試して見た
To: テスト送信 aaa(this is test)umihiko.yamahiko@example.co.jp
     ↓
To: テスト送信 aaa.umihiko.yamahiko@example.co.jp (this is test)
※ "umi(this is test)hiko.yamahiko"@example.co.jp はエラーになった。

メールアドレスに使用可能な文字列

■ドメイン名部分には、A-Z0-9と'.','-'のみ
■以下を除外する7bitコード
・特殊文字(「()<>@,;:\".[]」)
・制御文字(0x00−0x1F,0x7F)
・スペース(0x20)

故に
0x21(!),23(#),24($),25(%),26(&),27('),2A(*),2B(+),2D(-),2E(.) ,2F(/)
0x30-0x39(0-9),
0x3D(=),
0x3F(?),
0x41-0x5A(A-Z),
0x5E(^),0x5F(_),0x60(`),
0x61-0x7A(a-z),
0x7b-0x7e({,|,},~),
ただし、qmailの場合、先頭が'-'のメアドはデフォルトでは排除される。

メールヘッダで遊ぶ

メールヘッダに関する覚え書き

mailto: spam_spam_spam_spam_spam_spam@mbj.nifty.com
Last update:2019/03/17