Struct milter::ContextApi[][src]

pub struct ContextApi { /* fields omitted */ }
Expand description

An accessor to the set of methods that make up the context API.

The context API is the set of mostly side-effecting operations that affect the current connection.

Action methods

Of the methods that are part of the context API, some are designated action methods. These are the methods that modify the message being processed. They can be called only in the eom milter callback, and must be enabled before use, either using Milter::actions or during negotiation.

The trait ActionContext serves as a representation of the set of action methods.

Implementations

Requests that the space-separated macros be made available in the given stage. The set of macros appropriate to use depends on the MTA. Passing the empty string requests that no macros be sent. This method may only be called once for each Stage variant; calls per stage are not cumulative.

This method is part of the negotiation procedure and should therefore only be called in the negotiate stage.

Errors

An error variant is returned if type conversion at the FFI boundary fails, or if the underlying libmilter library returns a failure status.

Examples
context.api.request_macros(Stage::Helo, "{cert_issuer} {cert_subject}")?;

Returns the value for the given macro if present. The set of macros available depends on the stage and the MTA in use.

Errors

If conversion of arguments or return values at the boundary to the libmilter library fails, an error variant is returned.

Examples
let ip_address = context.api.macro_value("{daemon_addr}")?;

Sets the default SMTP error reply code for the current connection.

The three-digit SMTP reply code (RFC 5321) may be enhanced with an optional extended status code (RFC 3463), and with an optional multi-line text message.

This setting only takes effect when the first digit of the reply code matches the Status returned from the callback: "4xx" for Tempfail, "5xx" for Reject.

Errors

An error variant is returned if type conversion at the FFI boundary fails, or if the underlying libmilter library returns a failure status.

Examples
context.api.set_error_reply("550", Some("5.7.0"), vec![
    "Access rejected.",
    "Rejection is due to the sending MTA's poor reputation.",
])?;

Replaces the envelope sender (MAIL FROM address) of the current message with mail_from. Optional additional ESMTP arguments to the MAIL command may be given in esmtp_args.

This action is enabled with the flag Actions::REPLACE_SENDER.

Errors

An error variant is returned if type conversion at the FFI boundary fails, or if libmilter returns a failure status.

Adds envelope recipient (RCPT TO address) rcpt_to to the current message. Optional additional ESMTP arguments to the RCPT command may be given in esmtp_args.

This action is enabled with two distinct flags:

Errors

An error variant is returned if type conversion at the FFI boundary fails, or if libmilter returns a failure status.

Removes envelope recipient (RCPT TO address) rcpt_to from the current message.

This action is enabled with the flag Actions::REMOVE_RECIPIENT.

Errors

An error variant is returned if type conversion at the FFI boundary fails, or if libmilter returns a failure status.

Appends a header to the list of headers of the current message. If the header value is to span multiple lines, use \n (followed by whitespace) as the line separator, not \r\n.

This action is enabled with the flag Actions::ADD_HEADER.

Errors

An error variant is returned if type conversion at the FFI boundary fails, or if libmilter returns a failure status.

Examples
context.api.add_header(
    "Content-Type",
    "multipart/signed; micalg=pgp-sha512;\n\
     \tprotocol=\"application/pgp-signature\"; boundary=\"=-=-=\"",
)?;

Inserts a header at index in the list of headers of the current message.

When inserting at index 0, the header is inserted in the first position, before the MTA’s own Received header. When inserting at index 1, the header is inserted in the first position, after the MTA’s Received header. However, the MTA’s Received header, being a header not received from the client but generated by the MTA, is invisible to milters: therefore the exact insertion point may be dependent on header modifications done by earlier milters. This is an unfortunate complication inherent in the milter API.

If the header value is to span multiple lines, use \n (followed by whitespace) as the line separator, not \r\n.

This action is enabled with the flag Actions::ADD_HEADER.

Errors

An error variant is returned if type conversion at the FFI boundary fails, or if libmilter returns a failure status.

Replaces (or removes, or appends) a header at the index’th occurrence of headers with the given name for the current message. The index is 1-based (starts at 1).

More precisely,

  • replaces the index’th occurrence of headers named name with the specified value;
  • if the value is None, the header is instead removed;
  • if index is greater than the number of occurrences of headers named name, a new header is instead appended.

If the header value is to span multiple lines, use \n (followed by whitespace) as the line separator, not \r\n.

This action is enabled with the flag Actions::REPLACE_HEADER.

Errors

An error variant is returned if type conversion at the FFI boundary fails, or if libmilter returns a failure status.

Appends a chunk of bytes to the new message body of the current message.

This method may be called repeatedly: initially empty, the new body is augmented with additional content with each call. If this method is not called, the original message body remains unchanged.

This action is enabled with the flag Actions::REPLACE_BODY.

Errors

An error variant is returned if libmilter returns a failure status.

Quarantines the current message for the given reason.

This action is enabled with the flag Actions::QUARANTINE.

Errors

An error variant is returned if type conversion at the FFI boundary fails, or if libmilter returns a failure status.

Signals to the libmilter library that this milter is still active, causing it to reset timeouts.

Errors

An error variant is returned if libmilter returns a failure status.

Trait Implementations

Replaces the envelope sender of a message as specified for ContextApi::replace_sender. Read more

Adds an envelope recipient to a message as specified for ContextApi::add_recipient. Read more

Removes an envelope recipient from a message as specified for ContextApi::remove_recipient. Read more

Appends a header to the list of headers of a message as specified for ContextApi::add_header. Read more

Inserts a header into the list of headers of a message as specified for ContextApi::insert_header. Read more

Replaces a header in the list of headers of a message as specified for ContextApi::replace_header. Read more

Appends a chunk of bytes to the new message body of a message as specified for ContextApi::append_body_chunk. Read more

Quarantines a message as specified for ContextApi::quarantine.

Signals to the libmilter library that work is in progress as specified for ContextApi::signal_progress. Read more

Formats the value using the given formatter. Read more

Returns the value for the given macro as specified for ContextApi::macro_value. Read more

Sets the SMTP error reply as specified for ContextApi::set_error_reply. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.