--- loncom/interface/lonmsg.pm 2015/02/12 21:22:07 1.238 +++ loncom/interface/lonmsg.pm 2015/06/23 02:42:34 1.242 @@ -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.242 2015/06/23 02:42:34 musolffc 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); @@ -421,7 +421,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 +457,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 +477,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'}; @@ -562,7 +561,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 +572,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 +633,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 +653,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 +667,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 +680,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 +741,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 +750,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 +885,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 +895,7 @@ sub user_normal_msg_raw { } unless ($numperm) { $numperm = &sendnotification($permemail,$user,$domain,$subject,0, - $text,$msgid); + $text,$msgid,$attachmenturl); } } if ($toperm) { @@ -926,8 +925,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,