[LON-CAPA-cvs] cvs: loncom /interface lonmsg.pm
musolffc
musolffc at source.lon-capa.org
Thu Jun 18 17:42:38 EDT 2015
musolffc Thu Jun 18 21:42:38 2015 EDT
Modified files:
/loncom/interface lonmsg.pm
Log:
Attaching files to external email
Files attached to LON-CAPA messages (normal or critical) will now be included in the
external email if the "Send copy to permanent e-mail address (if known)" option is
selected. Attachments were previously only sent internally and stripped from the
external email.
The module Mail::Send was replaced by MIME::Entity to allow attachments.
This should resolve bug #6723.
Index: loncom/interface/lonmsg.pm
diff -u loncom/interface/lonmsg.pm:1.239 loncom/interface/lonmsg.pm:1.240
--- loncom/interface/lonmsg.pm:1.239 Fri Feb 13 01:46:03 2015
+++ loncom/interface/lonmsg.pm Thu Jun 18 21:42:37 2015
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Routines for messaging
#
-# $Id: lonmsg.pm,v 1.239 2015/02/13 01:46:03 raeburn Exp $
+# $Id: lonmsg.pm,v 1.240 2015/06/18 21:42:37 musolffc Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -202,7 +202,7 @@
use Apache::lonnet;
use HTML::TokeParser();
use Apache::lonlocal;
-use Mail::Send;
+use MIME::Entity;
use HTML::Entities;
use Encode;
use LONCAPA qw(:DEFAULT :match);
@@ -421,7 +421,7 @@
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,23 @@
"*** ".($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) {
+ print '<p><span class="LC_error">'
+ .&mt('Email not sent. Attachment exceeds permitted length.')
+ .'</span><br /></p>';
+ } 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;
$msgsent = 1;
}
return $msgsent;
@@ -478,7 +482,7 @@
# ==================================================== 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 +566,7 @@
}
$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 +577,7 @@
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 ++;
}
}
@@ -742,7 +746,7 @@
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 +755,7 @@
}
}
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 +890,7 @@
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 +900,7 @@
}
unless ($numperm) {
$numperm = &sendnotification($permemail,$user,$domain,$subject,0,
- $text,$msgid);
+ $text,$msgid,$attachmenturl);
}
}
if ($toperm) {
More information about the LON-CAPA-cvs
mailing list