Liking cljdoc? Tell your friends :D

boundary.email.core.email

Core email processing functions.

Pure functions for preparing, validating, and formatting emails. No side effects - all I/O happens in the shell layer.

Core email processing functions.

Pure functions for preparing, validating, and formatting emails.
No side effects - all I/O happens in the shell layer.
raw docstring

boundary.email.ports

Port definitions for email module.

This module defines protocols for sending emails and managing email queues, providing abstraction over different email providers (SMTP, SendGrid, etc.) and queue implementations (in-memory, Redis, etc.).

Key Features:

  • Synchronous and asynchronous email sending
  • Email queue management
  • Provider-agnostic interface
Port definitions for email module.

This module defines protocols for sending emails and managing email queues,
providing abstraction over different email providers (SMTP, SendGrid, etc.)
and queue implementations (in-memory, Redis, etc.).

Key Features:
- Synchronous and asynchronous email sending
- Email queue management
- Provider-agnostic interface
raw docstring

boundary.email.shell.adapters.queue

In-memory email queue implementing EmailQueueProtocol.

A lightweight, single-process queued-sending mode: queue-email! enqueues, process-queue! drains one entry through the wrapped sender, with bounded retry (failed sends are re-queued up to :max-retries times). Backed by a thread-safe ConcurrentLinkedDeque.

For distributed queuing across replicas use jobs-integration (jobs module) instead — this adapter's state is per-process and lost on restart.

In-memory email queue implementing `EmailQueueProtocol`.

A lightweight, single-process queued-sending mode: `queue-email!` enqueues,
`process-queue!` drains one entry through the wrapped sender, with bounded
retry (failed sends are re-queued up to `:max-retries` times). Backed by a
thread-safe `ConcurrentLinkedDeque`.

For distributed queuing across replicas use `jobs-integration` (jobs module)
instead — this adapter's state is per-process and lost on restart.
raw docstring

boundary.email.shell.adapters.smtp

SMTP email adapter — delegates raw transport to libs/external SmtpProviderAdapter.

This adapter sits at the boundary between the email library's domain model (Email with :id, :created-at, :attachments, :metadata) and the external library's transport layer (OutboundEmail). It translates between the two and delegates all javax.mail work to boundary.external.shell.adapters.smtp.

Responsibility split: libs/email — Email domain model, validation, preparation, job queuing libs/external — Raw SMTP transport (javax.mail, TLS/SSL, HTML multipart)

Usage: (def sender (create-smtp-sender {:host "smtp.gmail.com" :port 587 :username "user@gmail.com" :password "app-password" :tls? true})) (send-email! sender prepared-email)

SMTP email adapter — delegates raw transport to libs/external SmtpProviderAdapter.

This adapter sits at the boundary between the email library's domain model
(Email with :id, :created-at, :attachments, :metadata) and the external
library's transport layer (OutboundEmail). It translates between the two and
delegates all javax.mail work to boundary.external.shell.adapters.smtp.

Responsibility split:
  libs/email  — Email domain model, validation, preparation, job queuing
  libs/external — Raw SMTP transport (javax.mail, TLS/SSL, HTML multipart)

Usage:
  (def sender (create-smtp-sender
                {:host "smtp.gmail.com"
                 :port 587
                 :username "user@gmail.com"
                 :password "app-password"
                 :tls? true}))
  (send-email! sender prepared-email)
raw docstring

boundary.email.shell.jobs-integration

Optional integration with jobs module for async email sending.

This namespace provides async email sending via the jobs module. The jobs module is an OPTIONAL dependency - add it to your deps.edn:

{:deps {org.boundary-app/boundary-jobs {:mvn/version "0.1.0"}}}

If jobs module is not available, async functions will throw descriptive errors with :type :missing-dependency.

Usage: ;; Queue email for async sending (queue-email-job! job-queue email-sender prepared-email)

;; Register email job handler with jobs module (register-email-job-handler! job-registry)

The job handler will:

  • Create a new SMTP sender from config stored in job args
  • Send the email using that sender
  • Return job result map with :success? and :result or :error
Optional integration with jobs module for async email sending.

This namespace provides async email sending via the jobs module.
The jobs module is an OPTIONAL dependency - add it to your deps.edn:

  {:deps {org.boundary-app/boundary-jobs {:mvn/version "0.1.0"}}}

If jobs module is not available, async functions will throw descriptive errors
with :type :missing-dependency.

Usage:
  ;; Queue email for async sending
  (queue-email-job! job-queue email-sender prepared-email)
  
  ;; Register email job handler with jobs module
  (register-email-job-handler! job-registry)
  
The job handler will:
  - Create a new SMTP sender from config stored in job args
  - Send the email using that sender
  - Return job result map with :success? and :result or :error
raw docstring

boundary.email.shell.module-wiring

Integrant lifecycle for the email module.

Config keys:

:boundary/email {:provider :smtp :host "..." :port 587 :username "..." :password "..."} {:provider :logging} ; dev — logs instead of sending

Returns an EmailSenderProtocol implementation.

:boundary/email-queue {:sender (ig/ref :boundary/email) :max-retries 3}

Returns an EmailQueueProtocol implementation (in-memory, single-process).

Integrant lifecycle for the email module.

Config keys:

:boundary/email
  {:provider :smtp :host "..." :port 587 :username "..." :password "..."}
  {:provider :logging}                          ; dev — logs instead of sending

  Returns an EmailSenderProtocol implementation.

:boundary/email-queue
  {:sender (ig/ref :boundary/email) :max-retries 3}

  Returns an EmailQueueProtocol implementation (in-memory, single-process).
raw docstring

No vars found in this namespace.

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close