};
struct smtp_client_settings lmtp_set;
struct smtp_server_transaction *trans = proxy->trans;
+ struct client *client = proxy->client;
struct lmtp_proxy_connection *conn;
enum smtp_client_connection_ssl_mode ssl_mode;
struct ssl_iostream_settings ssl_set;
lmtp_set.peer_trusted = !conn->set.proxy_not_trusted;
lmtp_set.forced_capabilities = SMTP_CAPABILITY__ORCPT;
lmtp_set.mail_send_broken_path = TRUE;
+ lmtp_set.verbose_user_errors = client->lmtp_set->lmtp_verbose_replies;
if (conn->set.hostip.family != 0) {
conn->lmtp_conn = smtp_client_connection_create_ip(
lmtp_proxy_handle_connection_error(struct lmtp_proxy_recipient *lprcpt,
const struct smtp_reply *reply)
{
- struct smtp_server_recipient *rcpt = lprcpt->rcpt->rcpt;
+ struct lmtp_recipient *lrcpt = lprcpt->rcpt;
+ struct client *client = lrcpt->client;
+ struct smtp_server_recipient *rcpt = lrcpt->rcpt;
const char *detail = "";
+ if (client->lmtp_set->lmtp_verbose_replies) {
+ smtp_server_command_fail(rcpt->cmd->cmd, 451, "4.4.0",
+ "Proxy failed: %s",
+ smtp_reply_log(reply));
+ return;
+ }
+
switch (reply->status) {
case SMTP_CLIENT_COMMAND_ERROR_ABORTED:
break;
DEF(BOOL, lmtp_save_to_detail_mailbox),
DEF(BOOL, lmtp_rcpt_check_quota),
DEF(BOOL, lmtp_add_received_header),
+ DEF(BOOL, lmtp_verbose_replies),
DEF(UINT, lmtp_user_concurrency_limit),
DEF(ENUM, lmtp_hdr_delivery_address),
DEF(STR_VARS, lmtp_rawlog_dir),
.lmtp_save_to_detail_mailbox = FALSE,
.lmtp_rcpt_check_quota = FALSE,
.lmtp_add_received_header = TRUE,
+ .lmtp_verbose_replies = FALSE,
.lmtp_user_concurrency_limit = 0,
.lmtp_hdr_delivery_address = "final:none:original",
.lmtp_rawlog_dir = "",
bool lmtp_save_to_detail_mailbox;
bool lmtp_rcpt_check_quota;
bool lmtp_add_received_header;
+ bool lmtp_verbose_replies;
unsigned int lmtp_user_concurrency_limit;
const char *lmtp_hdr_delivery_address;
const char *lmtp_rawlog_dir;