mirror of
https://github.com/stalwartlabs/mail-server.git
synced 2025-02-26 17:04:05 +08:00
51 lines
2.1 KiB
Sieve
51 lines
2.1 KiB
Sieve
|
|
let "subject" "to_lowercase(header.subject)";
|
|
|
|
if eval "(contains(subject, 'delivery') &&
|
|
(contains(subject, 'failed') ||
|
|
contains(subject, 'report') ||
|
|
contains(subject, 'status') ||
|
|
contains(subject, 'warning'))) ||
|
|
(contains(subject, 'failure') &&
|
|
(contains(subject, 'delivery') ||
|
|
contains(subject, 'notice') ||
|
|
contains(subject, 'mail') )) ||
|
|
(contains(subject, 'delivered') &&
|
|
(contains(subject, 'couldn\\'t be') ||
|
|
contains(subject, 'could not be') ||
|
|
contains(subject, 'hasn\\'t been') ||
|
|
contains(subject, 'has not been'))) ||
|
|
contains(subject, 'returned mail') ||
|
|
contains(subject, 'undeliverable') ||
|
|
contains(subject, 'undelivered')" {
|
|
# Subject contains words or phrases typical for DSN
|
|
let "t.SUBJ_BOUNCE_WORDS" "1";
|
|
}
|
|
|
|
if eval "is_empty(envelope.from)" {
|
|
if eval "eq_ignore_case(header.content-type, 'multipart/report') &&
|
|
( eq_ignore_case(header.content-type.attr.report-type, 'delivery-status') ||
|
|
eq_ignore_case(header.content-type.attr.report-type, 'disposition-notification'))" {
|
|
let "t.BOUNCE" "1";
|
|
} else {
|
|
let "from" "to_lowercase(header.from)";
|
|
|
|
if eval "contains(from, 'mdaemon') && !is_empty(header.X-MDDSN-Message)" {
|
|
let "t.BOUNCE" "1";
|
|
} elsif eval "contains(from, 'postmaster') || contains(from, 'mailer-daemon')" {
|
|
if eval "t.SUBJ_BOUNCE_WORDS" {
|
|
let "t.BOUNCE" "1";
|
|
} else {
|
|
foreverypart {
|
|
if eval "(eq_ignore_case(header.content-type.type, 'message') ||
|
|
eq_ignore_case(header.content-type.type, 'text')) &&
|
|
(eq_ignore_case(header.content-type.subtype, 'rfc822-headers') ||
|
|
eq_ignore_case(header.content-type.subtype, 'rfc822'))" {
|
|
let "t.BOUNCE" "1";
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|