@@ -880,16 +880,19 @@ sub mail_message_to_recipients {
880880
881881 my $msg = eval { $self -> process_message($ur ,$rh_merge_data ) };
882882 $error_messages .= " There were errors in processing user $recipient , merge file $merge_file . \n $@ \n " if $@ ;
883- # warn "message is ok";
884- # my $transport = Email::Sender::Transport::SMTP->new({
885- # host => $ce->{mail}->{smtpServer},
886- # ssl => $ce->{mail}->{tls_allowed}//1, ## turn on ssl security
887- # timeout => $ce->{mail}->{smtpTimeout}
888- # });
889- #
890-
891- # createEmailSenderTransportSMTP is defined in ContentGenerator
892- my $transport = $self -> createEmailSenderTransportSMTP();
883+
884+ my $transport = $self -> createEmailSenderTransportSMTP();
885+ my $return_path_for_errors = $ce -> {mail }-> {set_return_path };
886+ # createEmailSenderTransportSMTP is defined in ContentGenerator
887+ # return_path_for_errors is the address used to report returned email. It is an argument
888+ # used in sendmail() (aka Email::Simple::sendmail).
889+ # For arcane historical reasons sendmail actually sets the field "MAIL FROM" and the smtp server then
890+ # uses that to set "Return-Path".
891+ # references:
892+ # stackoverflow:
893+ # https://stackoverflow.com/questions/1235534/what-is-the-behavior-difference-between-return-path-reply-to-and-from
894+ # Email::Simple: https://metacpan.org/pod/Email::Sender::Manual::QuickStart#envelope-information
895+
893896 my $email = Email::Simple-> create(
894897 header => [
895898 To => $ur -> email_address,
@@ -902,7 +905,12 @@ sub mail_message_to_recipients {
902905
903906
904907 try {
905- sendmail($email ,{transport => $transport });
908+ if ($return_path_for_errors ) {
909+ sendmail($email ,{transport => $transport , from => $return_path_for_errors });
910+ }
911+ else {
912+ sendmail($email ,{transport => $transport });
913+ }
906914 debug " email sent successfully to " . $ur -> email_address;
907915 } catch {
908916 debug " error sending email: $_ " ;
@@ -936,16 +944,10 @@ sub email_notification {
936944
937945 my $mailing_errors = " " ;
938946
939- # my $transport = Email::Sender::Transport::SMTP->new({
940- # host => $ce->{mail}->{smtpServer},
941- # ssl => $ce->{mail}->{tls_allowed}//1, ## turn on ssl security
942- # timeout => $ce->{mail}->{smtpTimeout}
943- # });
944- #
945- # $transport->port($ce->{mail}->{smtpPort}) if defined $ce->{mail}->{smtpPort};
946- # createEmailSenderTransportSMTP is defined in ContentGenerator
947+ # createEmailSenderTransportSMTP is defined in ContentGenerator
947948 my $transport = $self -> createEmailSenderTransportSMTP();
948949
950+ my $return_path_for_errors = $ce -> {mail }-> {set_return_path };
949951 my $email = Email::Simple-> create(
950952 header => [
951953 To => $self -> {defaultFrom },
@@ -958,7 +960,12 @@ sub email_notification {
958960 $email -> header_set(" X-Remote-Host: " ,$self -> {remote_host });
959961
960962 try {
961- sendmail($email ,{transport => $transport });
963+ if ($return_path_for_errors ) {
964+ sendmail($email ,{transport => $transport , from => $return_path_for_errors });
965+ }
966+ else {
967+ sendmail($email ,{transport => $transport });
968+ }
962969 } catch {
963970 warn " Error sending email: $_ " ;
964971 next ;
@@ -1022,7 +1029,7 @@ sub process_message {
10221029 my $endCol = @COL ;
10231030 # for safety, only evaluate special variables
10241031 my $msg = $text ;
1025- $msg =~ s /\$ SID/ $SID / ge ;
1032+ $msg =~ s /\$ SID/ $SID / ge ;
10261033 $msg =~ s /\$ LN/ $LN / ge ;
10271034 $msg =~ s /\$ FN/ $FN / ge ;
10281035 $msg =~ s /\$ STATUS/ $STATUS / ge ;
0 commit comments