Cleanup: removed all closing tags in php files.
[fa-stable.git] / reporting / includes / class.mail.inc
index 3cc1d1d27f0f76d8717494b82294252092447215..edda2b5ad781e077ae28816802b8ef00fa8a6512 100644 (file)
@@ -9,6 +9,23 @@
     Homepage:       http://www.danielkaefer.de
 
     Leave this header in this file!
+------------------------------------------------------------------ 
+ Updated: 2010-10-25
+ Updated by: Michael Hahn (MPH)
+ Problem: The Suhosin patch for PHP was blocking the email before it ever reached
+ the email server due to double line feeds (\n) in the header of the email.
+ Also, the body of the message was included in the header. This would also
+ trip the security measure everytime it spotted a double line feed.
+ Fix: Remove any double line feed from the header info and seperate the body of 
+ the message from the header.
+ Other updates: I'm not sure about RFC compliance but, every other email I've look at had
+ certain information included in double quotes. More than likely to avoid
+ erroneous file naming. I tried to emulate this mindset.
+ Added line length and EOL char for file chunking. For some reason without
+ it there were extra line feeds in the chunked file.
+
+ * Lots of fixes for FA
 */
 
 class email
@@ -21,11 +38,16 @@ class email
     var $header = "";
     var $subject = "";
     var $body = "";
-
+       var $charset = 'ISO-8859-1';
+       var $add_params;
+       
     function email($name, $mail)
     {
         $this->boundary = md5(uniqid(time()));
-        $this->header .= "From: $name <$mail>\n";
+               $this->header = "From: $name <$mail>\n";
+               $bcc = get_company_pref('bcc_email');
+               if ($bcc)
+                       $this->bcc[] = $bcc;
     }
 
     function to($mail)
@@ -55,18 +77,41 @@ class email
 
     function text($text)
     {
-           $this->body = "Content-Type: text/plain; charset=ISO-8859-1\n";
+        $this->body = "--$this->boundary\n";
+           $this->body .= "Content-Type: text/plain; charset=\"{$this->charset}\"\n";
            $this->body .= "Content-Transfer-Encoding: 8bit\n\n";
            $this->body .= $text."\n";
     }
 
     function html($html)
     {
-           $this->body = "Content-Type: text/html; charset=ISO-8859-1\n";
+        $this->body = "--$this->boundary\n";
+           $this->body .= "Content-Type: text/html; charset=\"{$this->charset}\"\n";
            $this->body .= "Content-Transfer-Encoding: quoted-printable\n\n";
            $this->body .= "<html><body>\n".$html."\n</body></html>\n";
     }
 
+       function mime_type($filename)
+       {
+               $file = basename($filename, '.zip');
+               if ($filename == $file . '.zip') return 'application/x-zip-compressed';
+               $file = basename($filename, '.pdf');
+               if ($filename == $file . '.pdf') return 'application/pdf';
+               $file = basename($filename, '.csv');
+               if ($filename == $file . '.csv') return 'application/vnd.ms-excel';
+               $file = basename($filename, '.tar');
+               if ($filename == $file . '.tar') return 'application/x-tar';
+               $file = basename($filename, '.tar.gz');
+               if ($filename == $file . '.tar.gz') return 'application/x-tar-gz';
+               $file = basename($filename, '.tgz');
+               if ($filename == $file . '.tgz') return 'application/x-tar-gz';
+               $file = basename($filename, '.gz');
+               if ($filename == $file . '.gz') return 'application/x-gzip';
+               $file = basename($filename, '.html');
+               if ($filename == $file . '.html') return 'text/html';
+               return 'application/unknown';
+       }
+
        function send()
     {
         // CC Empfänger hinzufügen
@@ -91,11 +136,7 @@ class email
             }
             $this->header .= "\n";
         }
-        $this->header .= "MIME-Version: 1.0\n";
-           $this->header .= "Content-Type: multipart/mixed; boundary=$this->boundary\n\n";
-           $this->header .= "This is a multi-part message in MIME format\n";
-        $this->header .= "--$this->boundary\n";
-        $this->header .= $this->body;
+               $this->header .= "Content-Type: multipart/mixed;\n boundary=\"$this->boundary\"\n";
 
         // Attachment hinzufügen
         $max = count($this->attachment);
@@ -104,21 +145,22 @@ class email
             for ($i = 0; $i < $max; $i++)
             {
                 $file = fread(fopen($this->attachment[$i], "r"), filesize($this->attachment[$i]));
-                $this->header .= "--".$this->boundary."\n";
-                $this->header .= "Content-Type: application/x-zip-compressed; name=".basename($this->attachment[$i])."\n";
-                $this->header .= "Content-Transfer-Encoding: base64\n";
-                $this->header .= "Content-Disposition: attachment; filename=".basename($this->attachment[$i])."\n\n";
-                $this->header .= chunk_split(base64_encode($file))."\n";
+                               $this->body .= "--".$this->boundary."\n";
+                               $this->body .= "Content-Type: " .$this->mime_type(basename($this->attachment[$i])). "; name=\"".basename($this->attachment[$i])."\"\n";
+                               $this->body .= "Content-Transfer-Encoding: base64\n";
+                               $this->body .= "Content-Disposition: attachment; filename=\"".basename($this->attachment[$i])."\"\n\n";
+                               $this->body .= chunk_split(base64_encode($file),"72","\n");
                 $file = "";
             }
         }
-        $this->header .= "--".$this->boundary."--\n\n";
+                       $this->body .= "--".$this->boundary."--\n";
 
+               $ret = 0;
         foreach($this->to as $mail)
         {
-            $ret = mail($mail, $this->subject, "", $this->header);
+                       if (mail($mail, $this->subject, $this->body, $this->header, $this->add_params))
+                               $ret++;
         }
         return $ret;
     }
 }
-?>
\ No newline at end of file