@type assigns() :: keyword() | map()
@type recip() :: map()
@type recips() :: recip() | [recip()]
@type sendto_result() :: {:error, String.t()} | {:error, String.t(), list()} | {:ok, results :: [String.t()]}
@type state() :: %{ this: atom(), from: [String.t() | atom()], user: module(), email: module(), backend: module(), config: module() }
@type template() :: module()
@spec deliver_(map(), recipient :: any(), template :: atom(), assigns :: map()) :: {:ok, Swoosh.Email.t()} | {:error, term()}
@spec get_emails_(state(), recips(), template(), recips()) :: {:ok, recips()} | {:error, String.t(), term()}
@spec sendto_( state(), recips(), template(), assigns(), config :: [String.t()] ) :: sendto_result()