From de8c187b35c98f7627efb3a19bd64c8096f983f0 Mon Sep 17 00:00:00 2001 From: Blou Date: Fri, 7 Mar 2014 13:31:30 -0500 Subject: [PATCH] Bug 8000 - Validate allEmailsTo email address before using it This patch adds Data::Validate::Email to validate the "allEmailsTo" address before using it as a unique destination. Added to PerlDependencies.pm for this and future potential usages. --- C4/Installer/PerlDependencies.pm | 5 +++++ C4/Letters.pm | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/C4/Installer/PerlDependencies.pm b/C4/Installer/PerlDependencies.pm index 2bea1c6..7fcbd1c 100644 --- a/C4/Installer/PerlDependencies.pm +++ b/C4/Installer/PerlDependencies.pm @@ -699,6 +699,11 @@ our $PERL_DEPS = { 'required' => '0', 'min_ver' => '0.73', }, + 'Data::Validate::Email' => { + 'usage' => 'Email validation', + 'required' => '1', + 'min_ver' => '0.04', + }, }; 1; diff --git a/C4/Letters.pm b/C4/Letters.pm index a2affe0..8c08bea 100644 --- a/C4/Letters.pm +++ b/C4/Letters.pm @@ -33,6 +33,7 @@ use Koha::DateUtils; use Date::Calc qw( Add_Delta_Days ); use Encode; use Carp; +use Data::Validate::Email qw(is_email); use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); @@ -286,7 +287,7 @@ sub SendAlerts { my $borinfo = C4::Members::GetMember('borrowernumber' => $_->{'borrowernumber'}); my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo'); my $email = $sendAllEmailsTo; - if (!($sendAllEmailsTo && $sendAllEmailsTo =~ /@/) ){ # some validation. This could be improved. + if (!($sendAllEmailsTo && is_email($sendAllEmailsTo))){ $email = $borinfo->{email} or next; } @@ -374,7 +375,7 @@ sub SendAlerts { my $allemails = join( ',', @email); my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo'); - $allemails = $sendAllEmailsTo if ($sendAllEmailsTo && $sendAllEmailsTo =~ /@/ ); # some validation. This could be improved. + $allemails = $sendAllEmailsTo if ($sendAllEmailsTo && is_email($sendAllEmailsTo) ); # ... then send mail my %mail = ( To => $allemails, @@ -415,7 +416,7 @@ sub SendAlerts { return { error => "no_email" } unless $externalid->{'emailaddr'}; my $emailaddr = $externalid->{'emailaddr'}; my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo'); - $emailaddr = $sendAllEmailsTo if ($sendAllEmailsTo && $sendAllEmailsTo =~ /@/ ); # some validation. This could be improved. + $emailaddr = $sendAllEmailsTo if ($sendAllEmailsTo && is_email($sendAllEmailsTo) ); # ... then send mail my %mail = ( To => $emailaddr, @@ -938,7 +939,7 @@ sub _send_message_by_email { my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} ); my $to_address = $message->{'to_address'}; my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo'); - $to_address = $sendAllEmailsTo if ($sendAllEmailsTo && $sendAllEmailsTo =~ /@/ ); # some validation. This could be improved. + $to_address = $sendAllEmailsTo if ($sendAllEmailsTo && is_email($sendAllEmailsTo) ); unless ($to_address) { unless ($member) { warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})"; -- 1.7.9.5