-sub _send_message_by_email {
- my $message = shift;
-
- my $member = C4::Members::GetMember( $message->{'borrowernumber'} );
- return unless $message->{'to_address'} or $member->{'email'};
+sub _send_message_by_email ($;$$$) {
+ my $message = shift or return;
+ my ($username, $password, $method) = @_;
+
+ my $to_address = $message->{to_address};
+ unless ($to_address) {
+ my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
+ unless ($member) {
+ warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})";
+ _set_message_status( { message_id => $message->{'message_id'},
+ status => 'failed' } );
+ return;
+ }
+ my $which_address = C4::Context->preference('AutoEmailPrimaryAddress');
+ # If the system preference is set to 'first valid' (value == OFF), look up email address
+ if ($which_address eq 'OFF') {
+ $to_address = GetFirstValidEmailAddress( $message->{'borrowernumber'} );
+ } else {
+ $to_address = $member->{$which_address};
+ }
+ unless ($to_address) {
+ # warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
+ # warning too verbose for this more common case?
+ _set_message_status( { message_id => $message->{'message_id'},
+ status => 'failed' } );
+ return;
+ }
+ }