--- loncom/interface/lonmsg.pm 2015/06/18 21:42:37 1.240 +++ loncom/interface/lonmsg.pm 2021/11/30 15:55:37 1.247 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines for messaging # -# $Id: lonmsg.pm,v 1.240 2015/06/18 21:42:37 musolffc Exp $ +# $Id: lonmsg.pm,v 1.247 2021/11/30 15:55:37 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -200,9 +200,9 @@ Returns use strict; use Apache::lonnet; +use Apache::loncommon; use HTML::TokeParser(); use Apache::lonlocal; -use MIME::Entity; use HTML::Entities; use Encode; use LONCAPA qw(:DEFAULT :match); @@ -231,6 +231,7 @@ sub packagemsg { $attachmenturl =&HTML::Entities::encode($attachmenturl,'<>&"'); my $course_context = &get_course_context(); my $now=time; + my $ip = &Apache::lonnet::get_requestor_ip(); my $msgcount = &get_uniq(); unless(defined($msgid)) { $msgid = &buildmsgid($now,$subject,$env{'user.name'},$env{'user.domain'}, @@ -250,7 +251,7 @@ sub packagemsg { } $result .= ''.$ENV{'SERVER_NAME'}.''. ''.$ENV{'HTTP_HOST'}.''. - ''.$ENV{'REMOTE_ADDR'}.''. + ''.$ip.''. ''.$env{'browser.type'}.''. ''.$env{'browser.os'}.''. ''.$env{'browser.version'}.''. @@ -397,14 +398,17 @@ sub buildmsgid { } sub unpackmsgid { - my ($msgid,$folder,$skipstatus,$status_cache)=@_; + my ($msgid,$folder,$skipstatus,$status_cache,$onlycid)=@_; $msgid=&unescape($msgid); my ($sendtime,$shortsubj,$fromname,$fromdomain,$count,$fromcid, $processid,$symb,$error) = split(/\:/,&unescape($msgid)); + if (!defined($processid)) { $fromcid = ''; } + if (($onlycid) && ($onlycid ne $fromcid)) { + return ($sendtime,'',$fromname,$fromdomain,'',$fromcid,'',$error); + } $shortsubj = &unescape($shortsubj); $shortsubj = &HTML::Entities::decode($shortsubj); $symb = &unescape($symb); - if (!defined($processid)) { $fromcid = ''; } my %status=(); unless ($skipstatus) { if (ref($status_cache)) { @@ -460,20 +464,15 @@ sub sendemail { $attachmenturl = &Apache::lonnet::filelocation("",$attachmenturl); my $filesize = (stat($attachmenturl))[7]; if ($filesize > 1048576) { + # Don't send if it exceeds 1 MB. print '

' .&mt('Email not sent. Attachment exceeds permitted length.') .'

'; } else { - my $top = MIME::Entity->build( Type => "multipart/mixed", - From => $senderaddress, - To => $to, - Subject => '[LON-CAPA] '.$subject); - $top->attach(Data=>$body); - $top->attach(Path=>$attachmenturl); - - open MAIL, "| /usr/lib/sendmail -t -oi -oem" or die "open: $!"; - $top->print(\*MAIL); - close MAIL; + # Otherwise build and send the email + $subject = '[LON-CAPA] '.$subject; + &Apache::loncommon::mime_email($senderaddress,$replytoaddress,$to, + $subject,$body,'','',$attachmenturl,'',''); $msgsent = 1; } return $msgsent; @@ -493,9 +492,11 @@ sub sendnotification { $text=~s/\<\;/\/gs; my $homeserver = &Apache::lonnet::homeserver($touname,$toudom); + my $hostname = &Apache::lonnet::hostname($homeserver); my $protocol = $Apache::lonnet::protocol{$homeserver}; $protocol = 'http' if ($protocol ne 'https'); - my $url = $protocol.'://'.&Apache::lonnet::hostname($homeserver). +#FIXME + my $url = $protocol.'://'.$hostname. '/adm/email?username='.$touname.'&domain='.$toudom. '&display='.&escape($msgid); my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid, @@ -539,16 +540,20 @@ to access the full message.',$url); $subject = $subj; } - my ($blocked,$blocktext); + my ($blocked,$blocktext,$clientip); + $clientip = &Apache::lonnet::get_requestor_ip(); if (!$crit) { my %setters; - my ($startblock,$endblock) = - &Apache::loncommon::blockcheck(\%setters,'com',$touname,$toudom); + my ($startblock,$endblock,$triggerblock,$by_ip,$blockdom) = + &Apache::loncommon::blockcheck(\%setters,'com',$clientip,$touname,$toudom); if ($startblock && $endblock) { $blocked = 1; my $showstart = &Apache::lonlocal::locallocaltime($startblock); my $showend = &Apache::lonlocal::locallocaltime($endblock); $blocktext = &mt_user($user_lh,'LON-CAPA messages sent to you between [_1] and [_2] will be inaccessible until the end of this time period, because you are a student in a course with an active communications block.',$showstart,$showend); + } elsif ($by_ip) { + $blocked = 1; + $blocktext = &mt_user($user_lh,'LON-CAPA messages sent to you will be inaccessible from your IP address [_1], because communication is being blocked for certain IP address(es).',$clientip); } } if ($userenv{'notifywithhtml'} ne '') {