Paste #1005



  1. #!/usr/bin/php
  2. <?php
  3. error_reporting(E_ERROR);
  4. $cfg = file_get_contents(dirname(__FILE__).'/authlib/authmysqlrc');
  5. $cfg = preg_replace('/^#.*$/m', '', $cfg);
  6. foreach (array('USERNAME' => 'user', 'PASSWORD' => 'pass', 'DATABASE' => 'dbname') as $k => $v) {
  7.         if (preg_match('/MYSQL_'.$k.'\s+([^\s]+)/', $cfg, $m)) $$v = $m[1];
  8. }
  9. if (isset($user) && isset($pass) && isset($dbname)) {
  10.  
  11.         $stdin = fopen('php://stdin', 'r');
  12.         $mail = stream_get_contents($stdin);
  13.         fclose($stdin);
  14.         //file_put_contents('/tmp/mail', $mail);
  15.         //file_put_contents('/tmp/mail_env', print_r($_ENV,1));
  16.  
  17.         $result = array();
  18.  
  19.         //this will be the answer for courier
  20.         $drop = 0;
  21.         if (!$_ENV) {
  22.                 $result[] = 'autoreply error: set variables_order to "EGPCS" in php.ini';
  23.         } elseif (empty($_ENV['FROM']) && empty($_ENV['SENDER'])) {
  24.                 $result[] = 'The message has empty "sender" as well as empty "from" field. Autoreply will ignore this.';
  25.         } elseif (preg_match('@^Content-Type: message/delivery-status@m', $mail)) {
  26.                 $result[] = 'This seems a delivery notification. Autoreply will ignore this.';
  27.         } else {
  28.                 if (($db = mysql_connect('localhost', $user, $pass)) && mysql_select_db($dbname, $db)) {
  29.                         if (($q = mysql_query("SELECT destination FROM mail_fw WHERE mail = '".mysql_real_escape_string($_ENV['USER'])."'", $db)) && $destinations = mysql_result($q, 0)) {
  30.                                 $result[] = "forward instructions found. setting default DROP to 1\n";
  31.                                 $drop = 1;
  32.                                 file_put_contents($tmpfile = '/tmp/tmpmail.'.uniqid().'.eml', $mail);
  33.                                 foreach(explode(',', $destinations) as $dest) {
  34.                                         if (substr_count($dest, '@') == 2) {
  35.                                                 $action = substr($dest, strrpos($dest, '@')+1);
  36.                                                 $addr = substr($dest, 0, strrpos($dest, '@'));
  37.                                                 $sender = !empty($_ENV['SENDER']) ? $_ENV['SENDER'] : $_ENV['FROM'];
  38.                                                 $result[] = $action." action requested from ".$_ENV['USER']." to ".$sender."\n";
  39.                                                 if (!$sender || !$addr) continue;
  40.                                                 if ($action == "autoreply") {
  41.                                                         if (($q = mysql_query("SELECT subject, body FROM vacation WHERE email = '".mysql_real_escape_string($_ENV['USER'])."' AND active = 1", $db)) && $reply = mysql_fetch_assoc($q)) {
  42.                                                                 $result[] = "\n".$_ENV['USER']." activated out-of-office content for ".$sender." (subject: ".$reply['subject'].", length:".strlen($reply['body']).").";
  43.                                                                 file_put_contents('./autoresponse.txt', $reply['body']);
  44.                                                                 shell_exec("mailbot -c utf-8 -t ./autoresponse.txt -d ./autoresponse.db -T reply -N -A 'From: ".$_ENV['USER']."' -s '".$reply['subject']."' < $tmpfile");
  45.                                                         }
  46.                                                 }
  47.                                         } elseif (substr_count($dest, '@') == 1) {
  48.                                                 if ($dest <> $_ENV['USER']) {
  49.                                                         $result[] = $_ENV['USER']." not set any action to ".$dest.". sending copy as default action...\n";
  50.                                                         shell_exec("sendmail '$dest' < $tmpfile");
  51.                                                 } else {
  52.                                                         $result[] = $_ENV['USER']." wants keep mails. setting DROP to 0\n";
  53.                                                         $drop = 0;
  54.                                                 }
  55.                                         }
  56.                                 }
  57.                                 unlink($tmpfile);
  58.                         }
  59.                         mysql_close($db);
  60.                 } else {
  61.                         $result[] = "unable to connect to db (".mysql_error().")!\n";
  62.                 }
  63.         }
  64. } else {
  65.         $result[] = 'cannot read authlib/authmysqlrc file for database access ('.$user.';'.str_repeat(2*strlen($pass), '*').';'.$dbname.')\n';
  66. }
  67. if (!$result) $result[] = "autoreply has nothing to do with this mail...";
  68.  
  69. $stdout = fopen('php://stdout', 'w');
  70. fwrite($stdout, implode("\n", $result))."\n\n";
  71. fclose($stdout);
  72. exit($drop);
  73. ?>

Posted by GT at 09 May 2012, 13:25:15 CET
Language: php