--- loncom/interface/lonmsg.pm 2015/02/12 21:22:07 1.238
+++ loncom/interface/lonmsg.pm 2018/12/27 18:14:25 1.244
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Routines for messaging
#
-# $Id: lonmsg.pm,v 1.238 2015/02/12 21:22:07 raeburn Exp $
+# $Id: lonmsg.pm,v 1.244 2018/12/27 18:14:25 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 Mail::Send;
use HTML::Entities;
use Encode;
use LONCAPA qw(:DEFAULT :match);
@@ -397,14 +397,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)) {
@@ -421,7 +424,7 @@ sub unpackmsgid {
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 $replytoaddress='';
my $msgsent;
@@ -457,19 +460,18 @@ 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*** ".
&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 ($replytoaddress) {
- $msg->add('Reply-to',$replytoaddress);
- }
- if ($senderaddress) {
- $msg->add('From',$senderaddress);
- }
- $msg->add('Content-type','text/plain; charset=UTF-8');
- if (my $fh = $msg->open()) {
- print $fh $body;
- $fh->close;
+ $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 {
+ # Otherwise build and send the email
+ $subject = '[LON-CAPA] '.$subject;
+ &Apache::loncommon::mime_email($senderaddress, $to, $subject, $body, ,'',
+ '', $attachmenturl, '', '');
$msgsent = 1;
}
return $msgsent;
@@ -478,7 +480,7 @@ sub sendemail {
# ==================================================== Send notification emails
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'};
unless ($sender=~/\w/) {
$sender=$env{'user.name'}.':'.$env{'user.domain'};
@@ -489,9 +491,10 @@ 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).
+ my $url = $protocol.'://'.$hostname.
'/adm/email?username='.$touname.'&domain='.$toudom.
'&display='.&escape($msgid);
my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid,
@@ -562,7 +565,7 @@ to access the full message.',$url);
}
$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 ++;
}
}
@@ -573,7 +576,7 @@ to access the full message.',$url);
my $htmlfree = &make_htmlfree($text);
$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 ++;
}
}
@@ -634,9 +637,9 @@ sub retrieve_author_res_msg {
my ($domain,$author)=($url=~/^($match_domain)\/($match_username)\//);
my %errormsgs=&Apache::lonnet::dump('nohist_res_msgs',$domain,$author);
my $msgs='';
- foreach (keys(%errormsgs)) {
- if ($_=~/^\Q$url\E\_\d+$/) {
- my %content=&unpackagemsg($errormsgs{$_});
+ foreach my $msg (keys(%errormsgs)) {
+ if ($msg =~ /^\Q$url\E\_\d+$/) {
+ my %content=&unpackagemsg($errormsgs{$msg});
$msgs.='
'.
$content{'time'}.': '.$content{'message'}.
'
';
@@ -654,9 +657,9 @@ sub del_url_author_res_msg {
$url=&Apache::lonnet::declutter($url);
my ($domain,$author)=($url=~/^($match_domain)\/($match_username)\//);
my @delmsgs=();
- foreach (&Apache::lonnet::getkeys('nohist_res_msgs',$domain,$author)) {
- if ($_=~/^\Q$url\E\_\d+$/) {
- push (@delmsgs,$_);
+ foreach my $msg (&Apache::lonnet::getkeys('nohist_res_msgs',$domain,$author)) {
+ if ($msg =~ /^\Q$url\E\_\d+$/) {
+ push (@delmsgs,$msg);
}
}
return &Apache::lonnet::del('nohist_res_msgs',\@delmsgs,$domain,$author);
@@ -668,9 +671,9 @@ sub clear_author_res_msg {
$url=&Apache::lonnet::declutter($url);
my ($domain,$author)=($url=~/^($match_domain)\/($match_username)\//);
my @delmsgs=();
- foreach (&Apache::lonnet::getkeys('nohist_res_msgs',$domain,$author)) {
- if ($_=~/^\Q$url\E/) {
- push (@delmsgs,$_);
+ foreach my $msg (&Apache::lonnet::getkeys('nohist_res_msgs',$domain,$author)) {
+ if ($msg =~ /^\Q$url\E/) {
+ push (@delmsgs,$msg);
}
}
return &Apache::lonnet::del('nohist_res_msgs',\@delmsgs,$domain,$author);
@@ -681,8 +684,8 @@ sub clear_author_res_msg {
sub all_url_author_res_msg {
my ($author,$domain)=@_;
my %returnhash=();
- foreach (&Apache::lonnet::getkeys('nohist_res_msgs',$domain,$author)) {
- $_=~/^(.+)\_\d+/;
+ foreach my $msg (&Apache::lonnet::getkeys('nohist_res_msgs',$domain,$author)) {
+ $msg =~ /^(.+)\_\d+/;
$returnhash{$1}=1;
}
return %returnhash;
@@ -742,7 +745,7 @@ sub user_crit_msg_raw {
my $numperm = 0;
my $permlogmsgstatus;
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 ($critnotify && $numcrit) {
@@ -751,7 +754,7 @@ sub user_crit_msg_raw {
}
}
unless ($numperm) {
- $numperm = &sendnotification($permemail,$user,$domain,$subject,1,$text,$msgid);
+ $numperm = &sendnotification($permemail,$user,$domain,$subject,1,$text,$msgid,$attachmenturl);
}
}
if ($toperm) {
@@ -886,7 +889,7 @@ sub user_normal_msg_raw {
my $numperm = 0;
my $permlogmsgstatus;
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 ($notify && $numnotify) {
@@ -896,7 +899,7 @@ sub user_normal_msg_raw {
}
unless ($numperm) {
$numperm = &sendnotification($permemail,$user,$domain,$subject,0,
- $text,$msgid);
+ $text,$msgid,$attachmenturl);
}
}
if ($toperm) {
@@ -926,8 +929,8 @@ sub user_normal_msg {
$domain,$user);
my $msgforward=$userenv{'msgforward'};
if ($msgforward) {
- foreach (split(/\,/,$msgforward)) {
- my ($forwuser,$forwdomain)=split(/\:/,$_);
+ foreach my $fwd (split(/\,/,$msgforward)) {
+ my ($forwuser,$forwdomain)=split(/\:/,$fwd);
push(@status,
&user_normal_msg_raw($forwuser,$forwdomain,$subject,$message,
$citation,$baseurl,$attachmenturl,$toperm,