pub struct DkimSignConfig {
pub selector: String,
pub domain: String,
pub private_key_pem: String,
pub extra_keys: HashMap<String, DkimDomainKey>,
/* private fields */
}Expand description
DKIM signing configuration.
The PKCS#8 PEM is parsed into an RsaSigningKey lazily on first use
and cached for the lifetime of this config — important on the hot
outbound path where every delivered message triggers a sign call.
Existing struct-literal callers need to add ..Default::default()
(the parsed-key cache is non-public, populated on demand).
v3 (mailrs-dkim 3.0): RsaSigningKey wraps aws-lc-rs’s
RsaKeyPair, so per-sign cost dropped from ~1.5 ms (pure-Rust
rsa crate) to ~0.5 ms.
v4 (2026-06-03): added extra_keys to
support per-domain DKIM signing. sign parses the
message’s From: header and looks up the matching key by domain
(exact match → ancestor-domain suffix walk → default). The
pre-v4 single-domain config (just selector / domain /
private_key_pem) keeps working unchanged — extra_keys empty
= old behaviour.
Fields§
§selector: StringDKIM selector — the label under <selector>._domainkey.<domain>.
Used as the default when the message’s From: domain doesn’t
match any extra_keys entry.
domain: StringSigning domain (matches the d= tag in the DKIM-Signature header).
Default d= when no extra_keys entry matches.
private_key_pem: StringPrivate RSA key in PKCS#8 PEM form.
extra_keys: HashMap<String, DkimDomainKey>Extra DKIM keys keyed by signing domain, used when the
message’s From: header domain matches an entry (exact match
first, then ancestor-suffix walk — e.g. mail.example.com
falls back to example.com). When no entry matches, signing
uses the default selector/domain/private_key_pem above.
Keep extra_keys.is_empty() for the single-domain config.
Implementations§
Source§impl DkimSignConfig
impl DkimSignConfig
Sourcepub fn sign(&self, message: &[u8]) -> Result<Vec<u8>, String>
pub fn sign(&self, message: &[u8]) -> Result<Vec<u8>, String>
Sign a message, prepending the DKIM-Signature header.
Parses the message’s From: header to determine the signing
domain via key_for_from_domain.
If no From: header is present (or it’s malformed enough that
no domain can be extracted), falls back to the default
domain/selector/key on this config.
Trait Implementations§
Source§impl Clone for DkimSignConfig
impl Clone for DkimSignConfig
Source§fn clone(&self) -> DkimSignConfig
fn clone(&self) -> DkimSignConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for DkimSignConfig
impl Debug for DkimSignConfig
Source§impl Default for DkimSignConfig
impl Default for DkimSignConfig
Source§fn default() -> DkimSignConfig
fn default() -> DkimSignConfig
Auto Trait Implementations§
impl Freeze for DkimSignConfig
impl RefUnwindSafe for DkimSignConfig
impl Send for DkimSignConfig
impl Sync for DkimSignConfig
impl Unpin for DkimSignConfig
impl UnsafeUnpin for DkimSignConfig
impl UnwindSafe for DkimSignConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more