234 msg_warn(
"bounce_append: ignoring dsn code \"%s\"", my_dsn.
status);
241 if (delivery_status_filter != 0
243 if (dsn_res->
status[0] ==
'4')
264 my_dsn.
action =
"undeliverable";
275 my_dsn.
action =
"undeliverable";
276 status =
trace_append(flags,
id, stats, rcpt, relay, &my_dsn);
303 my_dsn.
status = my_status;
306 my_dsn.
action =
"delayed";
322 log_adhoc(
id, stats, rcpt, relay, &my_dsn, log_status);
324 }
else if ((flags & BOUNCE_FLAG_CLEAN) == 0) {
344 const char *encoding,
int smtputf8,
345 const char *sender,
const char *dsn_envid,
368 msg_info(
"%s: status=deferred (bounce failed)",
id);
378 const char *encoding,
int smtputf8,
379 const char *sender,
const char *dsn_envid,
380 int dsn_ret,
const char *verp_delims)
403 msg_info(
"%s: status=deferred (bounce failed)",
id);
413 const char *encoding,
int smtputf8,
414 const char *sender,
const char *dsn_envid,
416 const char *relay,
DSN *dsn)
432 if (delivery_status_filter != 0
434 if (dsn_res->
status[0] ==
'4')
439 dsn_envid, dsn_ret, stats, rcpt, relay, &my_dsn));
445 const char *encoding,
int smtputf8,
446 const char *sender,
const char *dsn_envid,
459 my_dsn.
action =
"undeliverable";
470 my_dsn.
action =
"undeliverable";
471 status =
trace_append(flags,
id, stats, rcpt, relay, &my_dsn);
512 log_adhoc(
id, stats, rcpt, relay, &my_dsn,
"bounced");
534 static const char myname[] =
"bounce_client_init";
536 if (delivery_status_filter != 0)
537 msg_panic(
"%s: duplicate initialization", myname);
int dsn_print(ATTR_PRINT_MASTER_FN print_fn, VSTREAM *fp, int flags, void *ptr)
DSN_FILTER * delivery_status_filter
size_t dsn_valid(const char *text)
char * mystrdup(const char *str)
#define MAIL_ATTR_ENCODING
NORETURN msg_panic(const char *fmt,...)
int trace_append(int flags, const char *id, MSG_STATS *stats, RECIPIENT *rcpt, const char *relay, DSN *dsn)
#define DEL_REQ_FLAG_USR_VRFY
#define DEL_RCPT_STAT_BOUNCE
#define BOUNCE_FLAG_CLEAN
DSN_FILTER * dsn_filter_create(const char *title, const char *map_names)
int bounce_append(int flags, const char *id, MSG_STATS *stats, RECIPIENT *rcpt, const char *relay, DSN *dsn)
#define BOUNCE_CMD_APPEND
int bounce_one(int flags, const char *queue, const char *id, const char *encoding, int smtputf8, const char *sender, const char *dsn_envid, int dsn_ret, MSG_STATS *stats, RECIPIENT *rcpt, const char *relay, DSN *dsn)
int bounce_append_intern(int flags, const char *id, MSG_STATS *stats, RECIPIENT *rcpt, const char *relay, DSN *dsn)
int verify_append(const char *queue_id, MSG_STATS *stats, RECIPIENT *recipient, const char *relay, DSN *dsn, int vrfy_stat)
#define MAIL_ATTR_SMTPUTF8
int bounce_flush(int flags, const char *queue, const char *id, const char *encoding, int smtputf8, const char *sender, const char *dsn_envid, int dsn_ret)
void msg_warn(const char *fmt,...)
VSTRING * vstring_alloc(ssize_t len)
#define MAIL_ATTR_DSN_RET
char * var_bounce_service
VSTRING * vstring_sprintf(VSTRING *vp, const char *format,...)
int mail_command_client(const char *class, const char *name,...)
#define MAIL_ATTR_DSN_ENVID
#define SEND_ATTR_INT(name, val)
int defer_append_intern(int flags, const char *id, MSG_STATS *stats, RECIPIENT *rcpt, const char *relay, DSN *dsn)
void log_adhoc(const char *id, MSG_STATS *stats, RECIPIENT *recipient, const char *relay, DSN *dsn, const char *status)
void bounce_client_init(const char *title, const char *maps)
int bounce_flush_verp(int flags, const char *queue, const char *id, const char *encoding, int smtputf8, const char *sender, const char *dsn_envid, int dsn_ret, const char *verp_delims)
#define SEND_ATTR_FUNC(func, val)
int bounce_one_intern(int flags, const char *queue, const char *id, const char *encoding, int smtputf8, const char *sender, const char *dsn_envid, int dsn_ret, MSG_STATS *stats, RECIPIENT *rcpt, const char *relay, DSN *dsn)
VSTRING * vstring_free(VSTRING *vp)
int rcpt_print(ATTR_PRINT_MASTER_FN print_fn, VSTREAM *fp, int flags, void *ptr)
#define MAIL_ATTR_QUEUEID
#define SEND_ATTR_STR(name, val)
#define MAIL_CLASS_PRIVATE
#define DEL_REQ_FLAG_MTA_VRFY
#define DEL_REQ_FLAG_RECORD
void msg_info(const char *fmt,...)
DSN * dsn_filter_lookup(DSN_FILTER *fp, DSN *dsn)