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 and strip the trailing /r/n
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
}

Structs

Response contains a code and message to be sent back to the client
A single smtp session connected to a single client
Builds an smtp Session

Enums

Action indicates the recommended action to take on a response
Supported authentication mechanisms
AuthResult is the result of authenticating a smtp session
DataResult is the result of an smtp DATA command
HeloResult is the result of an smtp HELO or EHLO command
MailResult is the result of an smtp MAIL command
RcptResult is the result of an smtp RCPT command

Traits

A Handler makes decisions about incoming mail commands.