]> git.mjollnir.org Git - moodle.git/commitdiff
admin: Introducing the mailout-debugger
authormartinlanghoff <martinlanghoff>
Tue, 13 Nov 2007 00:34:47 +0000 (00:34 +0000)
committermartinlanghoff <martinlanghoff>
Tue, 13 Nov 2007 00:34:47 +0000 (00:34 +0000)
A stand-in for sendmail that will log all emails instead of sending
them out. Use when debugging cron performance and output.

References:
  MDL-12142
  http://moodle.org/mod/forum/post.php?reply=349457

admin/mailout-debugger.php [new file with mode: 0644]

diff --git a/admin/mailout-debugger.php b/admin/mailout-debugger.php
new file mode 100644 (file)
index 0000000..3a4cbbb
--- /dev/null
@@ -0,0 +1,76 @@
+#!/usr/bin/php
+<?php
+  /*
+   * Utility to debug mailouts - will save the content of emails to a
+   * logfile instead of sending them out. Use it as a sendmail
+   * "stand-in" when testing mailouts.
+   *
+   * It is not Moodle specific - use it anywhere by setting the php
+   * "sendmail_path" setting to this file with a logfile parameter.
+   *
+   * - Set in config.php:
+   *     set_ini('sendmail_path', $CFG->dirroot.'/admin/mailout-debugger.php');
+   *   Or from the commandline
+   *     php -d sendmail_path='/path-to-moodle/admin/mailout-debugger.php' /path/to/cron.php
+   *
+   * - Create a file in admin called mailout-debugger.enable
+   *   (this is a security check to prevent execution in prod environments)
+   *   touch /path/to/moodle/admin/mailout-debugger.enable
+   *
+   * - Mark as executable: chmod ugo+rx mailout-debugger.php
+   *
+   * - Run your admin/cron.php
+   *
+   * - Read /tmp/moodle-mailout.log
+   *
+   * This script will create logfiles in /tmp/ or in $TMPDIR if set.
+   *
+   */
+
+// Security check.
+if (!file_exists(dirname(__FILE__).'/mailout-debugger.enable')) {
+    mdie("Disabled.");
+}
+$tmpdir='/tmp'; // default
+
+if (isset($_SERVER['REMOTE_ADDR'])) {
+    mdie("should not be called from web server!");
+}
+
+if (isset($_ENV['TMPDIR']) && is_dir($_ENV['TMPDIR'])) {
+    $tmpdir = $_ENV['TMPDIR'];
+}
+
+$tmpfile = $tmpdir . '/moodle-mailout.log';
+$fh = fopen($tmpfile, 'a+', false)
+    or mdie("Error openning $tmpfile on append\n");
+fwrite($fh, "==== ".strftime("%a %b %e %H:%M:%S %Y", time())." ====\n");
+fwrite($fh, "==== Commandline: " . implode(' ',$argv) . "\n");
+
+$stdin = fopen('php://stdin', 'r');
+
+while ($line = fgets($stdin)) {
+    fwrite($fh, $line);
+}
+fwrite($fh, "\n");
+fclose($fh);
+fclose($stdin);
+
+/**
+ * Print an error to STDOUT and exit with a non-zero code. For commandline scripts.
+ * Default errorcode is 1.
+ *
+ * Very useful for perl-like error-handling:
+ *
+ * do_somethting() or mdie("Something went wrong");
+ *
+ * @param string  $msg       Error message
+ * @param integer $errorcode Error code to emit
+ *
+ */
+function mdie($msg='', $errorcode=1) {
+    trigger_error($msg);
+    exit($errorcode);
+}
+
+?>