RT option to exclude certain Cc addresses, #15451
authormark <mark>
Wed, 7 Dec 2011 00:58:11 +0000 (00:58 +0000)
committermark <mark>
Wed, 7 Dec 2011 00:58:11 +0000 (00:58 +0000)
rt/etc/RT_Config.pm
rt/etc/RT_Config.pm.in
rt/lib/RT/Interface/Email.pm

index 996bc0b..4995053 100644 (file)
@@ -293,6 +293,17 @@ can generate a naive first pass regexp by using
 
 Set($RTAddressRegexp , undef);
 
+=item C<$IgnoreCcRegexp>
+
+C<$IgnoreCcRegexp> is a regexp to exclude addresses from automatic addition 
+to the Cc list.  Use this for addresses that are I<not> received by RT but
+are sometimes added to Cc lists by mistake.  Unlike C<$RTAddressRegexp>, 
+these addresses can still receive email from RT otherwise.
+
+=cut
+
+Set($IgnoreCcRegexp, undef);
+
 =item C<$CanonicalizeEmailAddressMatch>, C<$CanonicalizeEmailAddressReplace>
 
 RT provides functionality which allows the system to rewrite
index 575a94f..ae1bc88 100644 (file)
@@ -293,6 +293,17 @@ can generate a naive first pass regexp by using
 
 Set($RTAddressRegexp , undef);
 
+=item C<$IgnoreCcRegexp>
+
+C<$IgnoreCcRegexp> is a regexp to exclude addresses from automatic addition 
+to the Cc list.  Use this for addresses that are I<not> received by RT but
+are sometimes added to Cc lists by mistake.  Unlike C<$RTAddressRegexp>, 
+these addresses can still receive email from RT otherwise.
+
+=cut
+
+Set($IgnoreCcRegexp, undef);
+
 =item C<$CanonicalizeEmailAddressMatch>, C<$CanonicalizeEmailAddressReplace>
 
 RT provides functionality which allows the system to rewrite
index 401e970..9216887 100755 (executable)
@@ -997,13 +997,28 @@ sub ParseCcAddressesFromHead {
     my $user = $args{'CurrentUser'}->UserObj;
 
     return
-        grep $_ ne $current_address && !RT::EmailParser->IsRTAddress( $_ ),
+        grep {  $_ ne $current_address 
+                && !RT::EmailParser->IsRTAddress( $_ )
+                && !IgnoreCcAddress( $_ )
+             }
         map lc $user->CanonicalizeEmailAddress( $_->address ),
         map Email::Address->parse( $args{'Head'}->get( $_ ) ),
         qw(To Cc);
 }
 
+=head2 IgnoreCcAddress ADDRESS
 
+Returns true if ADDRESS matches the $IgnoreCcRegexp config variable.
+
+=cut
+
+sub IgnoreCcAddress {
+    my $address = shift;
+    if ( my $address_re = RT->Config->Get('IgnoreCcRegexp') ) {
+        return 1 if $address =~ /$address_re/i;
+    }
+    return undef;
+}
 
 =head2 ParseSenderAddressFromHead HEAD