diff options
Diffstat (limited to 'cf/feature/bcc.m4')
-rw-r--r-- | cf/feature/bcc.m4 | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/cf/feature/bcc.m4 b/cf/feature/bcc.m4 new file mode 100644 index 0000000000000..9454143f2060e --- /dev/null +++ b/cf/feature/bcc.m4 @@ -0,0 +1,90 @@ +divert(-1) +# +# Copyright (c) 2014 Proofpoint, Inc. and its suppliers. +# All rights reserved. +# +# By using this file, you agree to the terms and conditions set +# forth in the LICENSE file which can be found at the top level of +# the sendmail distribution. +# +# + +divert(-1) +# Arguments: +# 1: Map to use +# - empty/none: default map bcctable +# - `access': to use access_db (with bcc: as tag) +# - map definition +# The map contains domain names and the RHS should be simply "ok". +# If the access map is used, then its lookup algorithm is used. +# Otherwise: +# domain ok +# matches anything@domain +# .domain ok +# matches any subdomain, e.g., l@sub.domain and l@sub.dom.domain +# On a match, the original address will be used as bcc address unless +# argument 3 is set. +# 2: Name of host ([mailer:]host) +# 3: Default bcc address: if set, this will be always used. +# Only one of 2/3 can be empty. +# Note: if Bcc address is used then only one copy will be sent! +# (due to duplicate elimination) +# 4: Map definition for canonicalRcpt map of address rewriting to +# apply to the added bcc envelope recipients. +# The option -T<TMPF> is required to handle temporary map failures. +# +# The ruleset must return either +# - an e-mail address (user@dom.ain) which is then added as "bcc" recipient. +# - an empty string: do not add a "bcc" recipient, or +# - $#error: fail the SMTP transaction (e.g., temporary lookup failure) +# +# This feature sets O AddBcc=true + +ifelse(lower(_ARG_),`access',`define(`_BCC_ACCESS_', `1')') +define(`_ADD_BCC_', `1') + +ifdef(`_BCC_ACCESS_', `dnl +ifdef(`_ACCESS_TABLE_', `', + `errprint(`*** ERROR: FEATURE(`bcc') requires FEATURE(`access_db') +')')') + +ifdef(`_BCC_ACCESS_', `', ` +LOCAL_CONFIG +Kbcctable ifelse(defn(`_ARG_'), `', DATABASE_MAP_TYPE MAIL_SETTINGS_DIR`bcctable', `_ARG_')') + +LOCAL_CONFIG +O AddBcc=true +ifelse(len(X`'_ARG2_),`1', `', ` +DA`'_ARG2_') + +ifelse(len(X`'_ARG4_), `1', `', +`define(`_CANONIFY_BCC_', `1')dnl +define(`_NEED_SMTPOPMODES_', `1')dnl +# canonical address look up for AddBcc recipients +KcanonicalRcpt _ARG4_ +')dnl + +LOCAL_RULESETS +Sbcc +R< $+ > $1 +ifdef(`_BCC_ACCESS_', `dnl +R$+ @ $+ $: $1@$2 $| $>SearchList <! bcc> $| <D:$2> <>', +`R$+ @ $+ $: $1@$2 $| $>BCC $2') +R$* $| <?> $@ +R$* $| $* $: ifelse(len(X`'_ARG3_),`1', `$1', `_ARG3_') + +ifdef(`_CANONIFY_BCC_', `dnl +R$+ @ $+ $: $1@$2 $| <$(canonicalRcpt $1 @ $2 $: $)> +R$* $| <> $@ +R$* $| <$* <TMPF>> $#error $@ 4.3.0 $: "451 Temporary system failure. Please try again later." +R$* $| <$+> $@ $2 map matched? +') + + +ifdef(`_BCC_ACCESS_', `', ` +SBCC +R$+ $: $1 < $(bcctable $1 $: ? $) > +R$- . $+ <?> $: $2 < $(bcctable .$2 $: ? $) > +R$- . $+ <?> $: $>BCC $2 +R$* <$*> $: <$2> +') |