Diff for /loncom/interface/lonmsg.pm between versions 1.239.2.5 and 1.248

version 1.239.2.5, 2024/02/08 03:09:10 version 1.248, 2022/01/18 17:33:13
Line 200  Returns Line 200  Returns
   
 use strict;  use strict;
 use Apache::lonnet;  use Apache::lonnet;
   use Apache::loncommon;
 use HTML::TokeParser();  use HTML::TokeParser();
 use Apache::lonlocal;  use Apache::lonlocal;
 use Mail::Send;  
 use HTML::Entities;  use HTML::Entities;
 use Encode;  use Encode;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
Line 428  sub unpackmsgid { Line 428  sub unpackmsgid {
     $shortsubj = &unescape($shortsubj);      $shortsubj = &unescape($shortsubj);
     $shortsubj = &HTML::Entities::decode($shortsubj);      $shortsubj = &HTML::Entities::decode($shortsubj);
     $symb = &unescape($symb);      $symb = &unescape($symb);
     if (!defined($processid)) { $fromcid = ''; }  
     my %status=();      my %status=();
     unless ($skipstatus) {      unless ($skipstatus) {
  if (ref($status_cache)) {   if (ref($status_cache)) {
Line 445  sub unpackmsgid { Line 444  sub unpackmsgid {
   
   
 sub sendemail {  sub sendemail {
     my ($to,$subject,$body,$to_uname,$to_udom,$user_lh)=@_;      my ($to,$subject,$body,$to_uname,$to_udom,$user_lh,$attachmenturl)=@_;
     my $senderaddress='';      my $senderaddress='';
     my $replytoaddress='';      my $replytoaddress='';
     my $msgsent;      my $msgsent;
Line 455  sub sendemail { Line 454  sub sendemail {
         $replytoaddress = 'do-not-reply@'.$hostname;          $replytoaddress = 'do-not-reply@'.$hostname;
     } else {      } else {
         my %senderemails;          my %senderemails;
         my ($have_sender,$setreplyto);          my $have_sender;
         if ($env{'form.reply_to_addr'}) {          if ($env{'form.reply_to_addr'}) {
             my ($replytoname,$replytodom) = split(/:/,$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 (!($replytoname eq $env{'user.name'} && $replytodom eq $env{'user.domain'})) {
                 $setreplyto = 1;  
             } else {  
                 if (&Apache::lonnet::homeserver($replytoname,$replytodom) ne 'no_host') {                  if (&Apache::lonnet::homeserver($replytoname,$replytodom) ne 'no_host') {
                     %senderemails =                       %senderemails = 
                         &Apache::loncommon::getemails($replytoname,$replytodom);                          &Apache::loncommon::getemails($replytoname,$replytodom);
                     $have_sender = 1;                      $have_sender = 1;
                     $setreplyto = 1;  
                 }                  }
             }              }
         }          }
Line 475  sub sendemail { Line 471  sub sendemail {
         foreach my $type ('permanentemail','critnotification','notification') {          foreach my $type ('permanentemail','critnotification','notification') {
             if ($senderemails{$type}) {              if ($senderemails{$type}) {
                 ($senderaddress) = split(/,/,$senderemails{$type});                  ($senderaddress) = split(/,/,$senderemails{$type});
                 if ($senderaddress) {                  last if ($senderaddress);
                     if ($setreplyto) {  
                         $replytoaddress = $senderaddress;  
                     }  
                     last;  
                 }  
             }              }
         }          }
     }      }
Line 489  sub sendemail { Line 480  sub sendemail {
     "*** ".($senderaddress?&mt_user($user_lh,'You can reply to this e-mail'):&mt_user($user_lh,'Please do not reply to this address.')."\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;      $attachmenturl = &Apache::lonnet::filelocation("",$attachmenturl);
     $msg->to($to);      my $filesize = (stat($attachmenturl))[7];
     $msg->subject('[LON-CAPA] '.$subject);      if ($filesize > 1048576) {
     if ($replytoaddress) {          # Don't send if it exceeds 1 MB.
         $msg->add('Reply-to',$replytoaddress);          print '<p><span class="LC_error">' 
     }              .&mt('Email not sent.  Attachment exceeds permitted length.')
     if ($senderaddress) {              .'</span><br /></p>';
         $msg->add('From',$senderaddress);      } else {
     }          # Otherwise build and send the email
     $msg->add('Content-type','text/plain; charset=UTF-8');          $subject = '[LON-CAPA] '.$subject;
     if (my $fh = $msg->open()) {          &Apache::loncommon::mime_email($senderaddress,$replytoaddress,$to,
  print $fh $body;                                         $subject,$body,'','',$attachmenturl,'','');
  $fh->close;  
         $msgsent = 1;          $msgsent = 1;
     }      }
     return $msgsent;      return $msgsent;
Line 510  sub sendemail { Line 500  sub sendemail {
 # ==================================================== Send notification emails  # ==================================================== Send notification emails
   
 sub sendnotification {  sub sendnotification {
     my ($to,$touname,$toudom,$subj,$crit,$text,$msgid)=@_;      my ($to,$touname,$toudom,$subj,$crit,$text,$msgid,$attachmenturl)=@_;
     my $sender=$env{'environment.firstname'}.' '.$env{'environment.lastname'};      my $sender=$env{'environment.firstname'}.' '.$env{'environment.lastname'};
     unless ($sender=~/\w/) {       unless ($sender=~/\w/) { 
  $sender=$env{'user.name'}.':'.$env{'user.domain'};   $sender=$env{'user.name'}.':'.$env{'user.domain'};
Line 521  sub sendnotification { Line 511  sub sendnotification {
     $text=~s/\&lt\;/\</gs;      $text=~s/\&lt\;/\</gs;
     $text=~s/\&gt\;/\>/gs;      $text=~s/\&gt\;/\>/gs;
     my $homeserver = &Apache::lonnet::homeserver($touname,$toudom);      my $homeserver = &Apache::lonnet::homeserver($touname,$toudom);
       my $hostname = &Apache::lonnet::hostname($homeserver);
     my $protocol = $Apache::lonnet::protocol{$homeserver};      my $protocol = $Apache::lonnet::protocol{$homeserver};
     $protocol = 'http' if ($protocol ne 'https');      $protocol = 'http' if ($protocol ne 'https');
     my $url = $protocol.'://'.&Apache::lonnet::hostname($homeserver).  #FIXME
       my $url = $protocol.'://'.$hostname.
               '/adm/email?username='.$touname.'&domain='.$toudom.                '/adm/email?username='.$touname.'&domain='.$toudom.
               '&display='.&escape($msgid);                '&display='.&escape($msgid);
     my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid,      my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid,
Line 598  to access the full message.',$url); Line 590  to access the full message.',$url);
                 }                  }
                 $body = $bodybegin.$bodysubj.$sendtext.$bodyend;                  $body = $bodybegin.$bodysubj.$sendtext.$bodyend;
             }              }
             if (&sendemail($addr,$subject,$body,$touname,$toudom,$user_lh)) {              if (&sendemail($addr,$subject,$body,$touname,$toudom,$user_lh,$attachmenturl)) {
                 $numsent ++;                  $numsent ++;
             }              }
         }          }
Line 609  to access the full message.',$url); Line 601  to access the full message.',$url);
             my $htmlfree = &make_htmlfree($text);              my $htmlfree = &make_htmlfree($text);
             $body = $bodybegin.$bodysubj.$htmlfree.$bodyend;              $body = $bodybegin.$bodysubj.$htmlfree.$bodyend;
         }          }
         if (&sendemail($to,$subject,$body,$touname,$toudom,$user_lh)) {          if (&sendemail($to,$subject,$body,$touname,$toudom,$user_lh,$attachmenturl)) {
             $numsent ++;              $numsent ++;
         }          }
     }      }
Line 782  sub user_crit_msg_raw { Line 774  sub user_crit_msg_raw {
     my $numperm = 0;      my $numperm = 0;
     my $permlogmsgstatus;      my $permlogmsgstatus;
     if ($critnotify) {      if ($critnotify) {
         $numcrit = &sendnotification($critnotify,$user,$domain,$subject,1,$text,$msgid);          $numcrit = &sendnotification($critnotify,$user,$domain,$subject,1,$text,$msgid,$attachmenturl);
     }      }
     if ($toperm && $permemail) {      if ($toperm && $permemail) {
         if ($critnotify && $numcrit) {          if ($critnotify && $numcrit) {
Line 791  sub user_crit_msg_raw { Line 783  sub user_crit_msg_raw {
             }              }
         }          }
         unless ($numperm) {          unless ($numperm) {
             $numperm = &sendnotification($permemail,$user,$domain,$subject,1,$text,$msgid);              $numperm = &sendnotification($permemail,$user,$domain,$subject,1,$text,$msgid,$attachmenturl);
         }          }
     }      }
     if ($toperm) {      if ($toperm) {
Line 912  sub user_normal_msg_raw { Line 904  sub user_normal_msg_raw {
            if ($status eq 'ok' || $status eq 'con_delayed') {             if ($status eq 'ok' || $status eq 'con_delayed') {
                if ($senthide && $sentmsgid) {                 if ($senthide && $sentmsgid) {
                    &store_sent_mail($sentmsgid,$packed_message_no_citation);                     &store_sent_mail($sentmsgid,$packed_message_no_citation);
                } else {                  } else {
                    &store_sent_mail($msgid,$packed_message_no_citation);                     &store_sent_mail($msgid,$packed_message_no_citation);
                }                 }
            }             }
Line 931  sub user_normal_msg_raw { Line 923  sub user_normal_msg_raw {
        my $numperm = 0;         my $numperm = 0;
        my $permlogmsgstatus;         my $permlogmsgstatus;
        if ($notify) {         if ($notify) {
            $numnotify = &sendnotification($notify,$user,$domain,$subject,0,$text,$msgid);             $numnotify = &sendnotification($notify,$user,$domain,$subject,0,$text,$msgid,$attachmenturl);
        }         }
        if ($toperm && $permemail) {         if ($toperm && $permemail) {
            if ($notify && $numnotify) {             if ($notify && $numnotify) {
Line 941  sub user_normal_msg_raw { Line 933  sub user_normal_msg_raw {
            }             }
            unless ($numperm) {             unless ($numperm) {
                $numperm = &sendnotification($permemail,$user,$domain,$subject,0,                 $numperm = &sendnotification($permemail,$user,$domain,$subject,0,
                                             $text,$msgid);                                              $text,$msgid,$attachmenturl);
            }             }
        }         }
        if ($toperm) {         if ($toperm) {

Removed from v.1.239.2.5  
changed lines
  Added in v.1.248


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>