{"id":"email-address-list-parse","version":"1.0.0","description":"Parse an RFC 5322 address-list into ordered mailboxes, groups, and a canonical form.","supported_operations":["parse an rfc 5322 address list","split mailboxes and groups from a recipient list","read display names out of a to header","turn an address list into structured mailboxes","rfc 5322 group syntax to addresses","canonicalize a mailbox list and keep its order","recover addr-spec from an address list"],"unsupported_operations":["deliver the message or look up a DNS MX record","accept an obsolete source route","prove that a mailbox exists"],"semantics":["Dot-atom-text is 1*atext *(\".\" 1*atext) per RFC 5322 section 3.2.3, used by section 3.4.1. U+002E is not atext. A leading dot, a trailing dot, or two dots in a row is rejected in a local-part and in a domain, in both ascii and utf-8 modes. Inside a domain-literal or a quoted-string, a dot is ordinary text.","mode ascii accepts only Unicode scalar values U+0000 through U+007F. mode utf-8 also treats U+0080 through U+10FFFF as atext, qtext, ctext, dtext and VCHAR, which is the RFC 6532 section 3.2 extension. The dot separator stays U+002E only.","Canonical form drops comments and folding white space. A local-part that is a dot-atom is written unquoted; any other local-part is a quoted-string. A display name that is atoms separated by one space is written unquoted; otherwise it is a quoted-string. A mailbox with no display name is a bare addr-spec. Top-level addresses are joined by a comma and one space. Group members are joined by a comma with no space, with no space around the colon, and an empty group is name:; .","Obsolete null list slots and source routes (obs-route) are rejected. Domain-literals are not interpreted as IP addresses. RFC 5321 length limits and the SMTP requirement for a dot in the domain are not applied.","Output preserves the left-to-right order of top-level addresses and of members inside each group.","The same text and mode always produce the same JSON. No clock, locale, or network.","Disclaimer: format transform only; provides no confidentiality, integrity, or authenticity."],"limits":{"max_input_bytes":2048,"max_addresses":32,"max_groups":32,"max_comment_depth":8,"max_output_bytes":65536},"pricing":{"status":"unpriced","charge_usd":null},"input_schema":{"type":"object","additionalProperties":false,"required":["text","mode"],"properties":{"text":{"type":"string","minLength":1,"maxLength":2048},"mode":{"type":"string","enum":["ascii","utf-8"]}}},"output_schema":{"type":"object","additionalProperties":false,"required":["mode","canonical","address_count","mailbox_count","group_count","addresses"],"properties":{"mode":{"type":"string","enum":["ascii","utf-8"]},"canonical":{"type":"string","minLength":1,"maxLength":8192},"address_count":{"type":"integer","minimum":1,"maximum":32},"mailbox_count":{"type":"integer","minimum":0,"maximum":32},"group_count":{"type":"integer","minimum":0,"maximum":32},"addresses":{"type":"array","minItems":1,"maxItems":32,"items":{"oneOf":[{"type":"object","additionalProperties":false,"required":["kind","display_name","local_part","domain","addr_spec"],"properties":{"kind":{"const":"mailbox"},"display_name":{"type":"string","maxLength":2048},"local_part":{"type":"string","maxLength":2048},"domain":{"type":"string","minLength":1,"maxLength":2048},"addr_spec":{"type":"string","minLength":1,"maxLength":8192}}},{"type":"object","additionalProperties":false,"required":["kind","display_name","members"],"properties":{"kind":{"const":"group"},"display_name":{"type":"string","minLength":1,"maxLength":2048},"members":{"type":"array","maxItems":32,"items":{"type":"object","additionalProperties":false,"required":["kind","display_name","local_part","domain","addr_spec"],"properties":{"kind":{"const":"mailbox"},"display_name":{"type":"string","maxLength":2048},"local_part":{"type":"string","maxLength":2048},"domain":{"type":"string","minLength":1,"maxLength":2048},"addr_spec":{"type":"string","minLength":1,"maxLength":8192}}}}}}]}}}},"examples":[{"input":{"text":"Mary Smith <mary@x.test>, jdoe@example.org, Who? <one@y.test>","mode":"ascii"},"output":{"mode":"ascii","canonical":"Mary Smith <mary@x.test>, jdoe@example.org, Who? <one@y.test>","address_count":3,"mailbox_count":3,"group_count":0,"addresses":[{"kind":"mailbox","display_name":"Mary Smith","local_part":"mary","domain":"x.test","addr_spec":"mary@x.test"},{"kind":"mailbox","display_name":"","local_part":"jdoe","domain":"example.org","addr_spec":"jdoe@example.org"},{"kind":"mailbox","display_name":"Who?","local_part":"one","domain":"y.test","addr_spec":"one@y.test"}]}},{"input":{"text":"A Group:Ed Jones <c@a.test>,joe@where.test,John <jdoe@one.test>;","mode":"ascii"},"output":{"mode":"ascii","canonical":"A Group:Ed Jones <c@a.test>,joe@where.test,John <jdoe@one.test>;","address_count":1,"mailbox_count":3,"group_count":1,"addresses":[{"kind":"group","display_name":"A Group","members":[{"kind":"mailbox","display_name":"Ed Jones","local_part":"c","domain":"a.test","addr_spec":"c@a.test"},{"kind":"mailbox","display_name":"","local_part":"joe","domain":"where.test","addr_spec":"joe@where.test"},{"kind":"mailbox","display_name":"John","local_part":"jdoe","domain":"one.test","addr_spec":"jdoe@one.test"}]}]}}],"execute_url":"/v1/tools/email-address-list-parse/versions/1.0.0/execute"}