[LON-CAPA-cvs] cvs: loncom /interface lonmsg.pm

raeburn raeburn@source.lon-capa.org
Sun, 04 Jan 2009 16:20:27 -0000


raeburn		Sun Jan  4 16:20:27 2009 EDT

  Modified files:              
    /loncom/interface	lonmsg.pm 
  Log:
  - Bug 5857.
  - Retrieve senderemail addresses from stored addresses in the order: 'permanentemail','critnotification','notification'. Use the first non-blank entry found.
  - Check for $env{'form.can_reply'}  and  $env{'form.reply_to_addr'} when setting 'From:' and 'Reply-to' addresses in e-mail header.
  - Set $replytoaddress to 'do-not-reply@'.$hostname if can_reply is 'N'.
  
  
Index: loncom/interface/lonmsg.pm
diff -u loncom/interface/lonmsg.pm:1.219 loncom/interface/lonmsg.pm:1.220
--- loncom/interface/lonmsg.pm:1.219	Tue Dec 23 19:22:13 2008
+++ loncom/interface/lonmsg.pm	Sun Jan  4 16:20:27 2009
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines for messaging
 #
-# $Id: lonmsg.pm,v 1.219 2008/12/23 19:22:13 raeburn Exp $
+# $Id: lonmsg.pm,v 1.220 2009/01/04 16:20:27 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -422,21 +422,48 @@
 
 sub sendemail {
     my ($to,$subject,$body,$to_uname,$to_udom,$user_lh)=@_;
-    my %senderemails=&Apache::loncommon::getemails();
     my $senderaddress='';
-    foreach my $type ('notification','permanentemail','critnotification') {
-	if ($senderemails{$type}) {
-	    $senderaddress=$senderemails{$type};
-	}
+    my $replytoaddress='';
+    if ($env{'form.can_reply'} eq 'N') {
+        my $lonhost = $Apache::lonnet::perlvar{'lonHostID'};
+        my $hostname = &Apache::lonnet::hostname($lonhost);
+        $replytoaddress = 'do-not-reply@'.$hostname;
+    } else {
+        my %senderemails;
+        my $have_sender;
+        if ($env{'form.reply_to_addr'}) {
+            my ($replytoname,$replytodom) = split(/:/,$env{'form.reply_to_addr'});
+            if (!($replytoname eq $env{'user.name'} && $replytodom eq $env{'user.domain'})) {
+                if (&Apache::lonnet::homeserver($replytoname,$replytodom) ne 'no_host') {
+                    %senderemails = 
+                        &Apache::loncommon::getemails($replytoname,$replytodom);
+                    $have_sender = 1;
+                }
+            }
+        }
+        if (!$have_sender) {
+            %senderemails=&Apache::loncommon::getemails();
+        }
+        foreach my $type ('permanentemail','critnotification','notification') {
+            if ($senderemails{$type}) {
+                ($senderaddress) = split(/,/,$senderemails{$type});
+                last if ($senderaddress);
+            }
+        }
     }
     $body=
     "*** ".&mt_user($user_lh,'This is an automatic e-mail generated by the LON-CAPA system.')."\n".
     "*** ".($senderaddress?&mt_user($user_lh,'You can reply to this e-mail'):&mt_user($user_lh,'Please do not reply to this address.')."\n*** ".
-	    &mt_user($user_lh,'A reply will not be received by the recipient!'))."\n\n".$body;
+    &mt_user($user_lh,'A reply will not be received by the recipient!'))."\n\n".$body;
     my $msg = new Mail::Send;
     $msg->to($to);
     $msg->subject('[LON-CAPA] '.$subject);
-    if ($senderaddress) { $msg->add('Reply-to',$senderaddress); $msg->add('From',$senderaddress); }
+    if ($replytoaddress) {
+        $msg->add('Reply-to',$replytoaddress);
+    }
+    if ($senderaddress) {
+        $msg->add('From',$senderaddress);
+    }
     if (my $fh = $msg->open()) {
 	print $fh $body;
 	$fh->close;