aboutsummaryrefslogtreecommitdiffstats
path: root/src/ragel/smtp_address.rl
blob: 68226f748721c225153f96d8d721d96ef36bd646 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
%%{
  machine smtp_address;

  # SMTP address spec
  # Source: https://tools.ietf.org/html/rfc5321#section-4.1.2
  # Dependencies: smtp_base + smtp_ip
  # Required actions:
  #  - User_has_backslash
  #  - User_end
  #  - Quoted_addr
  #  - Domain_start
  #  - Domain_end
  #  - Addr_end
  #  - Addr_has_angle
  #  - Valid_addr
  #  - Empty_addr
  # + from deps:
  #  - IP4_start
  #  - IP4_end
  #  - IP6_start
  #  - IP6_end
  #  - Domain_addr_start
  #  - Domain_addr_end

  # SMTP address spec
  # Obtained from: https://tools.ietf.org/html/rfc5321#section-4.1.2

  QcontentSMTP   = qtextSMTP | quoted_pairSMTP %User_has_backslash;
  Quoted_string  = ( DQUOTE QcontentSMTP* >User_start %User_end DQUOTE ) %Quoted_addr;
  Local_part     = Dot_string >User_start %User_end | Quoted_string;
  Mailbox        = Local_part "@" (address_literal | Domain >Domain_start %Domain_end);
  UnangledPath = ( Adl ":" )? Mailbox >Addr_start %Addr_end "."?;
  AngledPath = "<" UnangledPath ">" %Addr_has_angle;
  Path = AngledPath | UnangledPath;
  SMTPAddr = space* (Path | "<>" %Empty_addr ) %Valid_addr space*;
}%%