From 136dabd855b85c6772340ef3dd4fe02703c3a016 Mon Sep 17 00:00:00 2001 From: martin Date: Fri, 24 May 2002 06:38:37 +0000 Subject: [PATCH] Changes to mailing system, now supports HTML, attachments. Simplified functions. --- lib/moodlelib.php | 187 +++++++++++++--------------------------------- 1 file changed, 51 insertions(+), 136 deletions(-) diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 729ba863b1d..23d85d8af81 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -97,10 +97,10 @@ function print_single_button($link, $options, $label="OK") { echo ""; } -function print_user_picture($userid, $courseid, $picture, $large=false) { +function print_user_picture($userid, $courseid, $picture, $large=false, $returnstring=false) { global $CFG; - echo "wwwroot/user/view.php?id=$userid&course=$courseid\">"; + $output = "wwwroot/user/view.php?id=$userid&course=$courseid\">"; if ($large) { $file = "f1.jpg"; $size = 100; @@ -109,11 +109,17 @@ function print_user_picture($userid, $courseid, $picture, $large=false) { $size = 35; } if ($picture) { - echo "wwwroot/user/pix.php/$userid/$file\" BORDER=0 WIDTH=$size HEIGHT=$size ALT=\"\">"; + $output .= "wwwroot/user/pix.php/$userid/$file\" BORDER=0 WIDTH=$size HEIGHT=$size ALT=\"\">"; } else { - echo "wwwroot/user/default/$file\" BORDER=0 WIDTH=$size HEIGHT=$size ALT=\"\">"; + $output .= "wwwroot/user/default/$file\" BORDER=0 WIDTH=$size HEIGHT=$size ALT=\"\">"; + } + $output .= ""; + + if ($returnstring) { + return $output; + } else { + echo $output; } - echo ""; } function print_table($table) { @@ -856,164 +862,73 @@ function print_update_module_icon($moduleid) { /// CORRESPONDENCE //////////////////////////////////////////////// - -function email_to_user($user, $from, $subject, $message) { - global $CFG; - - include_once("$CFG->libdir/class.smtp.php"); - include_once("$CFG->libdir/class.phpmailer.php"); - - $subject = strip_tags(stripslashes($subject)); - $message = strip_tags(stripslashes($message)); - - $mail = new phpmailer; - - $mail->IsSMTP(); // set mailer to use SMTP - $mail->From = "$from->email"; - $mail->FromName = "$from->firstname $from->lastname"; - $mail->Host = "$CFG->smtphost;localhost"; // specify main and backup server - $mail->AddReplyTo("$from->email","$from->firstname $from->lastname"); - $mail->AddAddress("$user->email","$user->firstname $user->lastname"); - $mail->WordWrap = 70; // set word wrap - $mail->IsHTML(false); // set email format to HTML - $mail->Subject = "$subject"; - - $mail->Body = "\n\n$message"; - - if (!$mail->Send()) { - return false; - } - - return true; -} - - -function email_to_users(&$users, $from, $subject, $message, $link, $footer="") { -// users is an array of user records as returned by get_records_sql +function email_to_users(&$users, $from, $subject, $messagetext, $messagehtml="", $attachment="", $attachname="") { +// users - an array of user records as returned by get_records_sql +// messagetext - plain text version of the message +// messagehtml - complete html version of the message (optional) +// attachment - a file on the filesystem, relative to $CFG->dataroot +// attachname - the name of the file (extension indicates MIME) global $CFG; - include_once("$CFG->libdir/class.smtp.php"); - include_once("$CFG->libdir/class.phpmailer.php"); + include_once("$CFG->libdir/phpmailer/class.phpmailer.php"); if (!$users) { return false; } - $subject = strip_tags(stripslashes($subject)); - $message = strip_tags(stripslashes($message)); - $mail = new phpmailer; + $mail->Version = "Moodle"; // mailer version + $mail->PluginDir = "$CFG->libdir/phpmailer/"; // plugin directory (eg smtp plugin) $mail->IsSMTP(); // set mailer to use SMTP - $mail->From = "$from->email"; + $mail->Host = "$CFG->smtphosts"; // specify main and backup servers + + $mail->From = "$from->email"; $mail->FromName = "$from->firstname $from->lastname"; - $mail->Host = "$CFG->smtphost;localhost"; // specify main and backup server - $mail->AddAddress("","Subscribers"); + $mail->Subject = stripslashes($subject); + $mail->AddReplyTo("$from->email","$from->firstname $from->lastname"); + + $mail->AddAddress("$from->email","$from->firstname $from->lastname"); foreach ($users as $user) { - $mail->AddBCC("$user->email","$user->firstname $user->lastname"); - } - - $mail->AddReplyTo("$from->email","$from->firstname $from->lastname"); - $mail->WordWrap = 70; // set word wrap - $mail->IsHTML(false); // set email format to HTML - $mail->Subject = "$subject"; - - $message .= "\n\n--\n$from->firstname $from->lastname"; - - if ($footer) { - $message .= "\n\n$footer\n"; - } - - if ($link) { - $message .= "Link: $link\n"; - } - - $mail->Body = "\n\n$message"; - - if (!$mail->Send()) { - //echo "Message was not sent

"; - //echo "Mailer Error: " . $mail->ErrorInfo; - return false; - } - - return true; -} - - - -function email_to_course($from, $course, $emailall, $subject, $message, $link, $footer="") { - global $CFG; - - include_once("$CFG->libdir/class.smtp.php"); - include_once("$CFG->libdir/class.phpmailer.php"); - - - if (!$students = get_records_sql("SELECT u.* FROM user u, user_students s - WHERE s.course = '$course->id' - AND s.user = u.id")) { - notice("Could not find any students to mail to!"); - } - - if (!$teachers = get_records_sql("SELECT u.* FROM user u, user_teachers t - WHERE t.course = '$course->id' - AND t.user = u.id")) { - notice("Could not find any teachers to mail to!"); - } - - if (!$teachers && !$students) { - return false; - } - - $subject = stripslashes($subject); - $message = stripslashes($message); - - $mail = new phpmailer; - - $mail->IsSMTP(); // set mailer to use SMTP - $mail->From = "$from->email"; - $mail->FromName = "$from->firstname $from->lastname"; - $mail->Host = "$CFG->smtphost;localhost"; // specify main and backup server - - foreach ($students as $student) { - if ($emailall || $student->forwardmail) { - $mail->AddAddress("$student->email","$student->firstname $student->lastname"); - } - } - foreach ($teachers as $teacher) { - if ($emailall || $teacher->forwardmail) { - $mail->AddAddress("$teacher->email","$teacher->firstname $teacher->lastname"); + if ($user->email <> $from->email) { + $mail->AddBCC("$user->email","$user->firstname $user->lastname"); } } - $mail->AddReplyTo("$from->email","$from->firstname $from->lastname"); $mail->WordWrap = 70; // set word wrap - $mail->IsHTML(false); // set email format to HTML - $mail->Subject = "$course->shortname: $subject"; - $message .= "\n\n--\n$from->firstname $from->lastname"; - - if ($footer) { - $message .= "\n\n$footer"; + if ($messagehtml) { + $mail->IsHTML(true); + $mail->Body = $messagehtml; + $mail->AltBody = "\n\n$messagetext\n"; + } else { + $mail->IsHTML(false); + $mail->Body = "\n\n$messagetext\n"; } - if ($link) { - $message .= "\nLink: $link"; + if ($attachment && $attachname) { + if (ereg( "\\.\\." ,$attachment )) { // Security check for ".." in dir path + add_to_log ("Mailer error: attachment contained '..'"); + $mail->AddStringAttachment("Error in attachment", "error.txt", "8bit", "text/plain"); + } else { + include_once("$CFG->dirroot/files/mimetypes.php"); + $mimetype = mimeinfo("type", $attachname); + $mail->AddAttachment("$CFG->dataroot/$attachment", "$attachname", "base64", "$mimetype"); + } } - $mail->Body = "\n\n$message"; - - if (!$mail->Send()) { - //echo "Message was not sent

"; - //echo "Mailer Error: " . $mail->ErrorInfo; + if ($mail->Send()) { + return true; + } else { + echo "ERROR: $mail->ErrorInfo"; + add_to_log ("Mailer error: ".$mail->ErrorInfo); return false; } - - return true; - } + /// FILE HANDLING ///////////////////////////////////////////// function get_directory_list( $rootdir ) {