Adds support for "catchmail" config value
[platal.git] / classes / plmailer.php
index ca85633..e3e348d 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2008 Polytechnique.org                              *
+ *  Copyright (C) 2003-2009 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -163,11 +163,19 @@ class PlMailer extends Mail_Mime {
         }
     }
 
+    static private function formatUser(PlUser $user)
+    {
+        return '"' . $user->fullName() . '" <' . $user->bestEmail() . '>';
+    }
+
     /**
      * converts all : Foo Bar Baz <quux@foobar.org> into "Foo Bar Baz" <quux@foobar.org> which is RFC compliant
      */
     private function correct_emails($email)
     {
+        if ($email instanceof PlUser) {
+            $email = self::formatUser($email);
+        }
         return preg_replace('!(^|, *)([^<"]+?) *(<[^>]*>)!u', '\1"\2" \3', $email);
     }
 
@@ -307,15 +315,18 @@ class PlMailer extends Mail_Mime {
         }
     }
 
+    public function sendTo(PlUser &$user)
+    {
+        $this->addTo($user);
+        $this->assign_by_ref('user', $user);
+        return $this->send($user->isEmailFormatHtml());
+    }
+
     public function send($with_html = true)
     {
         $this->processPage($with_html);
         if (S::user()) {
             $this->addHeader('X-Org-Mail', S::user()->forlifeEmail());
-        } else if (S::v('forlife')) {
-            // TODO(vzanotti): trash this code when hruid will be part of master.
-            global $globals;
-            $this->addHeader('X-Org-Mail', S::v('forlife') . '@' . $globals->mail->domain);
         }
         $addrs = Array();
         foreach(Array('To', 'Cc', 'Bcc') as $hdr) {
@@ -336,6 +347,18 @@ class PlMailer extends Mail_Mime {
             $dests[] = "{$a->mailbox}@{$a->host}";
         }
 
+        // Support for "catch-all" mail address : all emails are sent to
+        // admin_email instead of actual recipients
+        global $globals;
+        if($globals->catchmail) {
+            require_once 'Mail/RFC822.php';
+            if(@Mail_RFC822::isValidInetAddress($globals->admin_email)){
+                $dests = array($globals->admin_email);
+            }else if(@Mail_RFC822::isValidInetAddress($globals->core->admin_email)){
+                $dests = array($globals->core->admin_email);
+            }
+        }
+
         // very important to do it in THIS order very precisely.
         $body = $this->get(array('text_charset' => $this->charset,
                                  'text_encoding' => '8bit',