diff options
Diffstat (limited to '')
-rw-r--r-- | src/lib-smtp/smtp-submit.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/lib-smtp/smtp-submit.h b/src/lib-smtp/smtp-submit.h new file mode 100644 index 0000000..6a00f56 --- /dev/null +++ b/src/lib-smtp/smtp-submit.h @@ -0,0 +1,73 @@ +#ifndef SMTP_SUBMIT_H +#define SMTP_SUBMIT_H + +#include "smtp-submit-settings.h" + +struct ssl_iostream_settings; +struct smtp_address; +struct smtp_submit_settings; +struct smtp_submit_session; +struct smtp_submit; + +struct smtp_submit_input { + /* SSL settings */ + const struct ssl_iostream_settings *ssl; + + /* Event to use as parent for the submit event */ + struct event *event_parent; + + /* Allow running sendmail as root */ + bool allow_root:1; +}; + +struct smtp_submit_result { + /* 1 on success, + 0 on permanent failure (e.g. invalid destination), + -1 on temporary failure */ + int status; + + const char *error; +}; + +typedef void +smtp_submit_callback_t(const struct smtp_submit_result *result, + void *context); + +/* Use submit session to reuse resources (e.g. SMTP connections) between + submissions (FIXME: actually implement this) */ +struct smtp_submit_session * +smtp_submit_session_init(const struct smtp_submit_input *input, + const struct smtp_submit_settings *set); +void smtp_submit_session_deinit(struct smtp_submit_session **_session); + +struct smtp_submit * +smtp_submit_init(struct smtp_submit_session *session, + const struct smtp_address *mail_from); +struct smtp_submit * +smtp_submit_init_simple(const struct smtp_submit_input *input, + const struct smtp_submit_settings *set, + const struct smtp_address *mail_from) ATTR_NULL(2); +void smtp_submit_deinit(struct smtp_submit **_submit); + +/* Add a new recipient */ +void smtp_submit_add_rcpt(struct smtp_submit *subm, + const struct smtp_address *rcpt_to); +/* Get an output stream where the message can be written to. The recipients + must already be added before calling this. */ +struct ostream *smtp_submit_send(struct smtp_submit *subm); + +/* Submit the message. Callback is called once the message submission + finishes. */ +void smtp_submit_run_async(struct smtp_submit *subm, + smtp_submit_callback_t *callback, void *context); +#define smtp_submit_run_async(subm, callback, context) \ + smtp_submit_run_async(subm, \ + (smtp_submit_callback_t*)callback, \ + (char*)context - CALLBACK_TYPECHECK(callback, \ + void (*)(const struct smtp_submit_result *result, typeof(context)))) + +/* Returns 1 on success, 0 on permanent failure (e.g. invalid destination), + -1 on temporary failure. */ +int smtp_submit_run(struct smtp_submit *subm, const char **error_r); + +#endif |