X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=reporting%2Fincludes%2Fclass.mail.inc;h=16cc81c368f7a7b0a69894e10a1a14e77cc554d3;hb=c001557f8ebee630494c6323477bd865a61942d9;hp=7e6be6f93a1d958a5c2e003196287d667e8d6799;hpb=2383d33373d6ddec06906658a0ed6398077c1147;p=fa-stable.git diff --git a/reporting/includes/class.mail.inc b/reporting/includes/class.mail.inc index 7e6be6f9..16cc81c3 100644 --- a/reporting/includes/class.mail.inc +++ b/reporting/includes/class.mail.inc @@ -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 = ""; - - function email($name, $mail) + var $charset = 'ISO-8859-1'; + var $add_params; + + function __construct($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) @@ -43,9 +65,11 @@ class email $this->bcc[] = $mail; } - function attachment($file) + function attachment($file, $filename=null) { - $this->attachment[] = $file; + if (!isset($filename)) + $filename = basename($file); + $this->attachment[$filename] = $file; } function subject($subject) @@ -55,14 +79,16 @@ 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 .= "\n".$html."\n\n"; } @@ -73,6 +99,8 @@ class email if ($filename == $file . '.zip') return 'application/x-zip-compressed'; $file = basename($filename, '.pdf'); if ($filename == $file . '.pdf') return 'application/pdf'; + $file = basename($filename, '.xls'); + if ($filename == $file . '.xls') return 'application/vnd.ms-excel'; $file = basename($filename, '.csv'); if ($filename == $file . '.csv') return 'application/vnd.ms-excel'; $file = basename($filename, '.tar'); @@ -83,61 +111,44 @@ class email 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 - $max = count($this->cc); - if ($max > 0) - { - $this->header .= "Cc: ".$this->cc[0]; - for ($i = 1; $i < $max; $i++) - { - $this->header .= ", ".$this->cc[$i]; - } - $this->header .= "\n"; - } - // BCC Empfänger hinzufügen - $max = count($this->bcc); - if ($max > 0) - { - $this->header .= "Bcc: ".$this->bcc[0]; - for ($i = 1; $i < $max; $i++) - { - $this->header .= ", ".$this->bcc[$i]; - } - $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; - - // Attachment hinzufügen - $max = count($this->attachment); - if ($max > 0) + // Add CC Recipients + if (!empty($this->cc)) + $this->header .= "Cc: " . implode(", ", $this->cc) . "\n" ; + + // Add BCC Recipients + if (!empty($this->bcc)) + $this->header .= "Bcc: " . implode(", ", $this->bcc) . "\n" ; + $this->header .= "Content-Type: multipart/mixed;\n boundary=\"$this->boundary\"\n"; + + // Add Attachments + if (!empty($this->attachment)) { - for ($i = 0; $i < $max; $i++) + foreach ($this->attachment as $filename => $file) { - $file = fread(fopen($this->attachment[$i], "r"), filesize($this->attachment[$i])); - $this->header .= "--".$this->boundary."\n"; - $this->header .= "Content-Type: " .$this->mime_type(basename($this->attachment[$i])). "; 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"; + $file = fread(fopen($file, "r"), filesize($file)); + $this->body .= "--".$this->boundary."\n"; + $this->body .= "Content-Type: " .$this->mime_type($file). "; name=\"".$filename."\"\n"; + $this->body .= "Content-Transfer-Encoding: base64\n"; + $this->body .= "Content-Disposition: attachment; filename=\"".$filename."\"\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