module Mail grammar RFC2822Obsolete rule obs_qp "\\" [\x00-\x7F] end rule obs_text LF* CR* (obs_char LF* CR*)* end rule obs_char [\x00-\x09] / # %d0-127 except CR and [\x0B-\x0C] / # LF [\x0E-\x7F] end rule obs_utext obs_text end rule obs_phrase (word / "." / "@")+ end rule obs_phrase_list phrase / (phrase? CFWS? "," CFWS?)+ phrase? end rule obs_FWS WSP+ (CRLF WSP+)* end rule obs_day_of_week CFWS? day_name CFWS? end rule obs_year CFWS? (DIGIT DIGIT) CFWS? end rule obs_month CFWS month_name CFWS end rule obs_day CFWS? (DIGIT / (DIGIT DIGIT)) CFWS? end rule obs_hour CFWS? (DIGIT DIGIT) CFWS? end rule obs_minute CFWS? (DIGIT DIGIT) CFWS? end rule obs_second CFWS? (DIGIT DIGIT) CFWS? end rule obs_zone "UT" / "GMT" / # Universal Time # North American UT # offsets "EST" / "EDT" / # Eastern: - 5/ - 4 "CST" / "CDT" / # Central: - 6/ - 5 "MST" / "MDT" / # Mountain: - 7/ - 6 "PST" / "PDT" / # Pacific: - 8/ - 7 # [\x41-\x49] / # Military zones - "A" [\x4B-\x5A] / # through "I" and "K" [\x61-\x69] / # through "Z", both [\x6B-\x7A] # upper and lower case end rule obs_angle_addr CFWS? "<" obs_route? addr_spec ">" CFWS? end rule obs_route CFWS? obs_domain_list ":" CFWS? end rule obs_domain_list "@" domain (("," )* CFWS? "@" domain)* end rule obs_local_part word ("." word)* end rule obs_domain atom ("." atom)* end rule obs_mbox_list (mailbox? CFWS? "," CFWS?)+ mailbox? end rule obs_addr_list (address? CFWS? "," CFWS?)+ address? end rule obs_fields (obs_return / obs_received / obs_orig_date / obs_from / obs_sender / obs_reply_to / obs_to / obs_cc / obs_bcc / obs_message_id / obs_in_reply_to / obs_references / obs_subject / obs_comments / obs_keywords / obs_resent_date / obs_resent_from / obs_resent_send / obs_resent_rply / obs_resent_to / obs_resent_cc / obs_resent_bcc / obs_resent_mid / obs_optional)* end rule obs_orig_date "Date" WSP* ":" date_time CRLF end rule obs_from "From" WSP* ":" mailbox_list CRLF end rule obs_sender "Sender" WSP* ":" mailbox CRLF end rule obs_reply_to "Reply-To" WSP* ":" mailbox_list CRLF end rule obs_to "To" WSP* ":" address_list CRLF end rule obs_cc "Cc" WSP* ":" address_list CRLF end rule obs_bcc "Bcc" WSP* ":" (address_list / CFWS?) CRLF end rule obs_message_id "Message-ID" WSP* ":" msg_id CRLF end rule obs_in_reply_to "In-Reply-To" WSP* ":" (phrase / msg_id)* CRLF end rule obs_references "References" WSP* ":" (phrase / msg_id)* CRLF end rule obs_id_left local_part end rule obs_id_right domain end rule obs_subject "Subject" WSP* ":" unstructured CRLF end rule obs_comments "Comments" WSP* ":" unstructured CRLF end rule obs_keywords "Keywords" WSP* ":" obs_phrase_list CRLF end rule obs_resent_from "Resent-From" WSP* ":" mailbox_list CRLF end rule obs_resent_send "Resent-Sender" WSP* ":" mailbox CRLF end rule obs_resent_date "Resent-Date" WSP* ":" date_time CRLF end rule obs_resent_to "Resent-To" WSP* ":" address_list CRLF end rule obs_resent_cc "Resent-Cc" WSP* ":" address_list CRLF end rule obs_resent_bcc "Resent-Bcc" WSP* ":" (address_list / CFWS?) CRLF end rule obs_resent_mid "Resent-Message-ID" WSP* ":" msg_id CRLF end rule obs_resent_rply "Resent-Reply-To" WSP* ":" address_list CRLF end rule obs_return "Return-Path" WSP* ":" path CRLF end rule obs_received "Received" WSP* ":" name_val_list CRLF end rule obs_path obs_angle_addr end rule obs_optional field_name WSP* ":" unstructured CRLF end end end