Crate mailin

source ·
Expand description

A library for building smtp servers.

The library supplies a parser and SMTP state machine. The user of the library supplies I/O code and a Handler implementation for controlling SMTP sessions.

The code using the library, sends lines received to the Session.process_line() method. The user also supplies a Handler implementation that makes decisions on whether to accept or reject email messages. After consulting the Handler the Session.process_line() function will return a response that can be sent back to the email client.

§Pseudo Code

// Create a handler which will control the SMTP session
let hander = create_handler();

// Create a SMTP session when a new client connects
let session = SessionBuilder::new("mailserver_name").build(client_ip, handler);

// Read a line from the client
let line = read_line(tcp_connection);
// Send the line to the session
let res = session.process(line);

// Act on the response
match res.action {
    Action::Reply => {
        write_response(tcp_connection, &res)?;
    }
    Action::Close => {
        write_response(tcp_connection, &res)?;
        close(tcp_connection);
    }
    Action::NoReply => (), // No response needed
}

Re-exports§

Modules§

  • Response contains a selection of SMTP responses for use in handlers.

Structs§

Enums§

Traits§

  • A Handler makes decisions about incoming mail commands.