flags |= SMTP_CLIENT_COMMAND_FLAG_PIPELINE;
cmd = smtp_client_command_new(conn, flags, callback, context);
- smtp_client_command_printf(cmd, "MAIL FROM:<%s>",
- smtp_address_encode(from));
+ if (!conn->set.mail_send_broken_path || !smtp_address_is_broken(from)) {
+ /* Compose MAIL command with normalized path. */
+ smtp_client_command_printf(cmd, "MAIL FROM:<%s>",
+ smtp_address_encode(from));
+ } else {
+ /* Compose MAIL command with broken path (for proxy). */
+ smtp_client_command_printf(cmd, "MAIL FROM:<%s>",
+ smtp_address_encode_raw(from));
+ }
if (params != NULL) {
size_t orig_len = str_len(cmd->data);
str_append_c(cmd->data, ' ');
i_assert(mail != NULL);
event_add_str(trans->event, "mail_from",
smtp_address_encode(mail->mail_from));
+ event_add_str(trans->event, "mail_from_raw",
+ smtp_address_encode_raw(mail->mail_from));
smtp_params_mail_add_to_event(&mail->mail_params,
trans->event);
bool xclient_defer;
/* don't clear password after first successful authentication */
bool remember_password;
+ /* sending even broken MAIL command path (otherwise a broken address
+ is sent as <>) */
+ bool mail_send_broken_path;
};
struct smtp_client *smtp_client_init(const struct smtp_client_settings *set);