diff options
Diffstat (limited to 'extensions/LimitedEmail/Extension.pm')
-rw-r--r-- | extensions/LimitedEmail/Extension.pm | 62 |
1 files changed, 62 insertions, 0 deletions
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; |