Exemplo n.º 1
0
def handle_mail(state: State, arguments: str) -> Reply:
    if arguments[:5].upper() != "FROM:":
        return handle_wrong_arguments()
    try:
        path, rest = parse_reverse_path(arguments[5:])
    except ValueError as exc:
        return handle_wrong_arguments(str(exc))
    if not is_valid_smtp_arguments(rest):
        return handle_wrong_arguments()
    if not state.greeted:
        return handle_no_greeting()
    if not state.mail_allowed:
        return handle_bad_command_sequence()
    state.clear()
    state.reverse_path = path
    return SMTPStatus.OK, "Sender OK"
Exemplo n.º 2
0
 def test_invalid_domain(self) -> None:
     with pytest.raises(ValueError):
         parse_reverse_path("<foo@*>")
Exemplo n.º 3
0
 def test_empty_path(self) -> None:
     path, rest = parse_reverse_path("<>")
     assert path == ""
     assert rest == ""
Exemplo n.º 4
0
 def test_missing_at(self) -> None:
     with pytest.raises(ValueError):
         parse_reverse_path("<invalid>")
Exemplo n.º 5
0
 def test_invalid_local_part(self) -> None:
     with pytest.raises(ValueError):
         parse_reverse_path("<@@example.com>")
Exemplo n.º 6
0
 def test_invalid(self) -> None:
     with pytest.raises(ValueError):
         parse_reverse_path("INVALID")
Exemplo n.º 7
0
 def test_quoted_string(self) -> None:
     path, rest = parse_reverse_path('<"foo \\" bar"@example.com>')
     assert path == '"foo \\" bar"@example.com'
     assert rest == ""
Exemplo n.º 8
0
 def test_mailbox_with_rest(self) -> None:
     path, rest = parse_reverse_path("<*****@*****.**>REST")
     assert path == "*****@*****.**"
     assert rest == "REST"
Exemplo n.º 9
0
 def test_mailbox(self) -> None:
     path, rest = parse_reverse_path("<*****@*****.**>")
     assert path == "*****@*****.**"
     assert rest == ""
Exemplo n.º 10
0
 def test_empty_path_with_rest(self) -> None:
     path, rest = parse_reverse_path("<>REST")
     assert path == ""
     assert rest == "REST"