Skip to content

Commit e78051a

Browse files
author
ens_adm02
committed
Merging postreleasefix/115 to release/115
* postreleasefix/115: Use Mail::Address methods instead of Email::Address::XS (#1155)
2 parents 6c3d591 + 4b2f8a5 commit e78051a

File tree

2 files changed

+23
-26
lines changed

2 files changed

+23
-26
lines changed

cpanfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ requires 'DB_File';
1111
requires 'DBD::mysql';
1212
requires 'DBI';
1313
requires 'Digest::MD5';
14-
requires 'Email::Address::XS';
1514
requires 'File::Spec::Functions';
1615
requires 'GD::Simple';
1716
requires 'Hash::Merge';

modules/EnsEMBL/Web/Mailer.pm

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ use strict;
2525
use warnings;
2626

2727
use Mail::Mailer;
28+
use Mail::Address;
2829
use MIME::Base64 qw(encode_base64);
2930
use EnsEMBL::Web::Exceptions;
30-
use Email::Address::XS qw(parse_email_addresses split_address);
3131
use Encode 'decode';
3232
use feature 'unicode_strings';
3333

@@ -162,7 +162,25 @@ sub send_plain {
162162
return 1;
163163
}
164164

165+
sub _parse_email_addresses {
166+
my ($address_string, $type) = @_;
165167

168+
my @addresses = Mail::Address->parse($address_string);
169+
if (@addresses != 1) {
170+
warn "EnsEMBL/Web/Mailer: Illegal $type: addr: '$address_string'";
171+
return 0;
172+
}
173+
174+
if ($type eq 'To') {
175+
my $host = $addresses[0]->host;
176+
if ($host !~ /(ebi\.ac\.uk|ensembl\.org)$/) {
177+
warn "EnsEMBL/Web/Mailer: Rcpt addr not within EBI: '$address_string'";
178+
return 0;
179+
}
180+
}
181+
182+
return $addresses[0]->address;
183+
}
166184

167185
sub send {
168186
my $self = shift;
@@ -171,35 +189,15 @@ sub send {
171189

172190
# First validate user-supplied data
173191

174-
my @addresses = parse_email_addresses($self->{'to'});
175-
if (@addresses != 1) {
176-
warn "EnsEMBL/Web/Mailer: Illegal To: addr: '$self->{'to'}'";
177-
return 0;
178-
}
179-
my $helpdesk_mail = $addresses[0]->address();
180-
my ($user, $host) = split_address($helpdesk_mail);
181-
if ($host !~ /(ebi\.ac\.uk|ensembl\.org)$/) {
182-
warn "EnsEMBL/Web/Mailer: Rcpt addr not within EBI: '$self->{'to'}'";
183-
return 0;
184-
}
192+
my $helpdesk_mail = _parse_email_addresses($self->{'to'}, 'To');
185193
$valid_params{'To'} = $helpdesk_mail;
186194

187-
@addresses = parse_email_addresses($self->{'from'});
188-
if (@addresses != 1) {
189-
warn "EnsEMBL/Web/Mailer: Illegal From: addr: '$self->{'from'}'";
190-
return 0;
191-
}
192-
my $from_mail = $addresses[0]->address();
195+
my $from_mail = _parse_email_addresses($self->{'from'}, 'From');
193196
$valid_params{'From'} = $from_mail;
194197

195198
$valid_params{'Reply-To'} = undef;
196199
if ($self->{'reply'}) {
197-
@addresses = parse_email_addresses($self->{'reply'});
198-
if (@addresses != 1) {
199-
warn "EnsEMBL/Web/Mailer: Illegal Reply-To: addr: '$self->{'reply'}'";
200-
return 0;
201-
}
202-
$valid_params{'Reply-To'} = $addresses[0]->address();
200+
$valid_params{'Reply-To'} = _parse_email_addresses($self->{'reply'}, 'Reply-To');
203201
}
204202

205203

@@ -213,7 +211,7 @@ sub send {
213211
}
214212

215213
if ($self->{'base_url'}) {
216-
if ($self->{'base_url'} !~ m{^http(s)?://[A-Za-z0-9.-/]+$}){
214+
if ($self->{'base_url'} !~ m{^http(s)?://[A-Za-z0-9.\-/]+$}){
217215
warn "EnsEMBL/Web/Mailer: Unexpected URL: '$self->{'base_url'}'";
218216
return 0;
219217
}

0 commit comments

Comments
 (0)