# Binary to use for sending mails.
#sendmail_path = /usr/lib/sendmail
- # Human readable error message for rejection mails. Use can use variables:
- # %n = CRLF, %r = reason, %s = subject, %t = recipient
+ # Subject: header to use for rejection mails. You can use the same variables
+ # as for rejection_reason below.
+ #rejection_subject = Automatically rejected mail
+
+ # Human readable error message for rejection mails. You can use variables:
+ # %n = CRLF, %r = reason, %s = original subject, %t = recipient
#rejection_reason = Your message to <%t> was automatically rejected:%n%r
# UNIX socket path to master authentication server to find users.
deliver_set->sendmail_path = getenv("SENDMAIL_PATH");
if (deliver_set->sendmail_path == NULL)
deliver_set->sendmail_path = DEFAULT_SENDMAIL_PATH;
+ deliver_set->rejection_subject = getenv("REJECTION_SUBJECT");
+ if (deliver_set->rejection_subject == NULL)
+ deliver_set->rejection_subject = DEFAULT_MAIL_REJECTION_SUBJECT;
deliver_set->rejection_reason = getenv("REJECTION_REASON");
if (deliver_set->rejection_reason == NULL) {
deliver_set->rejection_reason =
#include "lib.h"
#include "mail-storage.h"
+#define DEFAULT_MAIL_REJECTION_SUBJECT \
+ "Automatically rejected mail"
#define DEFAULT_MAIL_REJECTION_HUMAN_REASON \
"Your message to <%t> was automatically rejected:%n%r"
#define DEFAULT_LOG_FORMAT "msgid=%m: %$"
const char *hostname;
const char *postmaster_address;
const char *sendmail_path;
+ const char *rejection_subject;
const char *rejection_reason;
const char *log_format;
bool mailbox_autosubscribe;
struct smtp_client *smtp_client;
FILE *f;
struct message_size hdr_size;
- const char *return_addr, *str;
+ const char *return_addr, *hdr;
const unsigned char *data;
const char *msgid, *orig_msgid, *boundary;
- string_t *human_reason;
+ string_t *str;
size_t size;
int ret;
fprintf(f, "Content-Type: "
"multipart/report; report-type=disposition-notification;\r\n"
"\tboundary=\"%s\"\r\n", boundary);
- fprintf(f, "Subject: Automatically rejected mail\r\n");
+
+ str = t_str_new(256);
+ var_expand(str, deliver_set->rejection_subject,
+ get_var_expand_table(mail, reason, recipient));
+ fprintf(f, "Subject: %s\r\n", str_c(str));
+
fprintf(f, "Auto-Submitted: auto-replied (rejected)\r\n");
fprintf(f, "Precedence: bulk\r\n");
fprintf(f, "\r\nThis is a MIME-encapsulated message\r\n\r\n");
fprintf(f, "Content-Disposition: inline\r\n");
fprintf(f, "Content-Transfer-Encoding: 8bit\r\n\r\n");
- human_reason = t_str_new(256);
- var_expand(human_reason, deliver_set->rejection_reason,
+ str_truncate(str, 0);
+ var_expand(str, deliver_set->rejection_reason,
get_var_expand_table(mail, reason, recipient));
- fprintf(f, "%s\r\n", str_c(human_reason));
+ fprintf(f, "%s\r\n", str_c(str));
/* MDN status report */
fprintf(f, "--%s\r\n"
boundary);
fprintf(f, "Reporting-UA: %s; Dovecot Mail Delivery Agent\r\n",
deliver_set->hostname);
- if (mail_get_first_header(mail, "Original-Recipient", &str) > 0)
- fprintf(f, "Original-Recipient: rfc822; %s\r\n", str);
+ if (mail_get_first_header(mail, "Original-Recipient", &hdr) > 0)
+ fprintf(f, "Original-Recipient: rfc822; %s\r\n", hdr);
fprintf(f, "Final-Recipient: rfc822; %s\r\n", recipient);
if (orig_msgid != NULL)