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 sessionDataResult
is the result of an smtp DATA commandHeloResult
is the result of an smtp HELO or EHLO commandMailResult
is the result of an smtp MAIL commandRcptResult
is the result of an smtp RCPT commandTraits
A
Handler
makes decisions about incoming mail commands.