It returns the detailed administrator errors as user error in the reply returned
to the calling application.
i_zero(&text_lines);
i_assert(user_error != NULL);
- text_lines[0] = user_error;
+ if (conn->set.verbose_user_errors && error != NULL)
+ text_lines[0] = error;
+ else
+ text_lines[0] = user_error;
timeout_remove(&conn->to_connect);
conn->set.peer_trusted = set->peer_trusted;
conn->set.mail_send_broken_path = set->mail_send_broken_path;
+
+ conn->set.verbose_user_errors =
+ conn->set.verbose_user_errors ||
+ set->verbose_user_errors;
}
if (set != NULL && set->extra_capabilities != NULL) {
client->set.socket_send_buffer_size = set->socket_send_buffer_size;
client->set.socket_recv_buffer_size = set->socket_recv_buffer_size;
client->set.debug = set->debug;
+ client->set.verbose_user_errors = set->verbose_user_errors;
smtp_proxy_data_merge(pool, &client->set.proxy_data, &set->proxy_data);
/* sending even broken MAIL command path (otherwise a broken address
is sent as <>) */
bool mail_send_broken_path;
+ /* Yield verbose user-visible errors for commands and connections that
+ failed locally. */
+ bool verbose_user_errors;
};
struct smtp_client *smtp_client_init(const struct smtp_client_settings *set);