From a58be35368e1d3c4cff9b2c5480d878171532f2b Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Fri, 20 Aug 2021 18:23:30 -0300 Subject: [PATCH] Bug 28870: Use Email::Address to validate email addresses This patch adds a new dependency, Email::Address. It is used in Koha::Email to replace the current use of Email::Valid, which proved to be problematic when it comes to UTF-8 characters. Email::Address provides suitable regexes that -when used- keep our tests passing, but also deal better with UTF-8 data. To test: 1. Apply the regression tests patch 2. Notice the only change is that it tweaks a couple addresses so they contain umlauts and also have the "Description
" format that is used when sending carts. 3. Run: $ kshell k$ prove t/Koha/Email.t => FAIL: Tests fail! Things die because Email::Valid doesn't like the from we passed. 4. Run: $ sudo apt install libemail-address-perl 5. Apply this patch 6. Repeat 3 => SUCCESS: Tests pass! 7. Try what is described in comment 1 => SUCCESS: Things are back to normal 8. Sign off :-D 9. Send cookies Signed-off-by: Tomas Cohen Arazi Signed-off-by: Martin Renvoize --- Koha/Email.pm | 12 +++++------- cpanfile | 1 + 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Koha/Email.pm b/Koha/Email.pm index 5083af8bbd..4feeb0ad99 100644 --- a/Koha/Email.pm +++ b/Koha/Email.pm @@ -20,7 +20,7 @@ package Koha::Email; use Modern::Perl; -use Email::Valid; +use Email::Address; use Email::MessageID; use List::Util qw( pairs ); @@ -78,7 +78,7 @@ sub create { my $args = {}; $args->{from} = $params->{from} || C4::Context->preference('KohaAdminEmailAddress'); Koha::Exceptions::BadParameter->throw("Invalid 'from' parameter: ".$args->{from}) - unless Email::Valid->address( -address => $args->{from}, -fqdn => 0 ); # from is mandatory + unless $args->{from} =~ m/$Email::Address::mailbox/; # from is mandatory $args->{subject} = $params->{subject} // ''; @@ -90,7 +90,7 @@ sub create { } Koha::Exceptions::BadParameter->throw("Invalid 'to' parameter: ".$args->{to}) - unless Email::Valid->address( -address => $args->{to}, -fqdn => 0 ); # to is mandatory + unless $args->{to} =~ m/$Email::Address::mailbox/; # to is mandatory my $addresses = {}; $addresses->{reply_to} = $params->{reply_to}; @@ -111,10 +111,8 @@ sub create { foreach my $address ( keys %{$addresses} ) { Koha::Exceptions::BadParameter->throw( "Invalid '$address' parameter: " . $addresses->{$address} ) - if $addresses->{$address} and !Email::Valid->address( - -address => $addresses->{$address}, - -fqdn => 0 - ); + if $addresses->{$address} + and $addresses->{$address} !~ m/$Email::Address::mailbox/; } $args->{cc} = $addresses->{cc} diff --git a/cpanfile b/cpanfile index 6e13f04932..8aa37b55ea 100644 --- a/cpanfile +++ b/cpanfile @@ -34,6 +34,7 @@ requires 'DateTime::Format::MySQL', '0.04'; requires 'DateTime::TimeZone', '1.20'; requires 'Digest::MD5', '2.36'; requires 'Digest::SHA', '5.43'; +requires 'Email::Address', '>= 1.908'; requires 'Email::Date', '1.103'; requires 'Email::MessageID', '1.406'; requires 'Email::Sender', '1.300030'; -- 2.20.1