diff options
Diffstat (limited to 'extensions/LimitedEmail')
-rw-r--r-- | extensions/LimitedEmail/Config.pm | 22 | ||||
-rw-r--r-- | extensions/LimitedEmail/Extension.pm | 62 | ||||
-rw-r--r-- | extensions/LimitedEmail/disabled | 0 |
3 files changed, 84 insertions, 0 deletions
diff --git a/extensions/LimitedEmail/Config.pm b/extensions/LimitedEmail/Config.pm new file mode 100644 index 000000000..ea05f363c --- /dev/null +++ b/extensions/LimitedEmail/Config.pm @@ -0,0 +1,22 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Extension::LimitedEmail; + +use strict; +use constant NAME => 'LimitedEmail'; +use constant REQUIRED_MODULES => [ ]; +use constant OPTIONAL_MODULES => [ ]; + +use constant FILTERS => [ + qr/^(?:glob|dkl|justdave|shyam)\@mozilla\.com$/i, + qr/^byron\.jones\@gmail\.com$/i, + qr/^gerv\@mozilla\.org$/i, + qr/^reed\@reedloden\.com$/i, +]; + +__PACKAGE__->NAME; diff --git a/extensions/LimitedEmail/Extension.pm b/extensions/LimitedEmail/Extension.pm new file mode 100644 index 000000000..35cc83567 --- /dev/null +++ b/extensions/LimitedEmail/Extension.pm @@ -0,0 +1,62 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::Extension::LimitedEmail; +use strict; +use base qw(Bugzilla::Extension); + +our $VERSION = '2'; + +use FileHandle; +use Date::Format; +use Encode qw(encode_utf8); +use Bugzilla::Constants qw(bz_locations); + +sub mailer_before_send { + my ($self, $args) = @_; + my $email = $args->{email}; + my $header = $email->{header}; + return if $header->header('to') eq ''; + + my $blocked = ''; + if (!deliver_to($header->header('to'))) { + $blocked = $header->header('to'); + $header->header_set(to => ''); + } + + my $log_filename = bz_locations->{'datadir'} . '/mail.log'; + my $fh = FileHandle->new(">>$log_filename"); + if ($fh) { + print $fh encode_utf8(sprintf( + "[%s] %s%s %s : %s\n", + time2str('%D %T', time), + ($blocked eq '' ? '' : '(blocked) '), + ($blocked eq '' ? $header->header('to') : $blocked), + $header->header('X-Bugzilla-Reason') || '-', + $header->header('subject') + )); + $fh->close(); + } +} + +sub deliver_to { + my $email = address_of(shift); + my $ra_filters = Bugzilla::Extension::LimitedEmail::FILTERS; + foreach my $re (@$ra_filters) { + if ($email =~ $re) { + return 1; + } + } + return 0; +} + +sub address_of { + my $email = shift; + return $email =~ /<([^>]+)>/ ? $1 : $email; +} + +__PACKAGE__->NAME; diff --git a/extensions/LimitedEmail/disabled b/extensions/LimitedEmail/disabled new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/extensions/LimitedEmail/disabled |