X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=reporting%2Fincludes%2Fclass.mail.inc;h=466675ee299adf6b87292f47aac45a36d9d02017;hb=a67b9dfc9f6932d5fe64ae21758f86bdb9250df2;hp=7cce85a109e1788546d2c2d4cc265bad504162e2;hpb=17b390efcf904072b02ec866b2a427490471a260;p=fa-stable.git diff --git a/reporting/includes/class.mail.inc b/reporting/includes/class.mail.inc index 7cce85a1..466675ee 100644 --- a/reporting/includes/class.mail.inc +++ b/reporting/includes/class.mail.inc @@ -35,44 +35,64 @@ class email var $bcc = array(); var $attachment = array(); var $boundary = ""; - var $header = ""; + var $headers = array(); var $subject = ""; var $body = ""; var $charset = 'ISO-8859-1'; - var $add_params; + var $add_params = ""; - function email($name, $mail) + function __construct($name, $mail) { $this->boundary = md5(uniqid(time())); - $this->header = "From: $name <$mail>\n"; + $this->headers['From'] = $this->encode($name)." <$mail>"; + $bcc = get_company_pref('bcc_email'); if ($bcc) $this->bcc[] = $bcc; } - function to($mail) + function encode($txt) + { + + $opts = array('input-charset' => $_SESSION['language']->encoding, + 'output-charest' => 'utf-8', // utf-8 works always nowadays + 'line-length'=> 72, + 'linebreak-chars'=>'\n', + 'scheme' => 'Q', + ); + return substr(iconv_mime_encode('', $txt, $opts), 2); + } + + // + // For backward compatibility in extensions address can be passed + // in $name in form: '"full name" '. + // Don't use this form unless all the mail addresses are encoded in ASCII + // + function to($name, $mail='') { - $this->to[] = $mail; + $this->to[] = $mail=='' ? $name : ($this->encode($name)." <$mail>"); } - function cc($mail) + function cc($name, $mail='') { - $this->cc[] = $mail; + $this->cc[] = $mail=='' ? $name : ($this->encode($name)." <$mail>"); } - function bcc($mail) + function bcc($name='', $mail='') { - $this->bcc[] = $mail; + $this->bcc[] = $mail=='' ? $name : ($this->encode($name)." <$mail>"); } - function attachment($file) + function attachment($file, $filename=null) { - $this->attachment[] = $file; + if (!isset($filename)) + $filename = $file; + $this->attachment[$filename] = $file; } function subject($subject) { - $this->subject = $subject; + $this->subject = $this->encode($subject); } function text($text) @@ -118,26 +138,24 @@ class email { // Add CC Recipients if (!empty($this->cc)) - $this->header .= "Cc: " . implode(", ", $this->cc) . "\n" ; + $this->headers['Cc'] = implode(", ", $this->cc); // 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"; + $this->headers['Bcc'] = implode(", ", $this->bcc); + $this->headers['Content-Type'] = "multipart/mixed;\n boundary=\"$this->boundary\""; // Add Attachments - $max = count($this->attachment); - if ($max > 0) + if (!empty($this->attachment)) { - for ($i = 0; $i < $max; $i++) + foreach ($this->attachment as $filename => $fname) { - $file = fread(fopen($this->attachment[$i], "r"), filesize($this->attachment[$i])); + $file = fread(fopen($fname, "r"), filesize($fname)); $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-Type: " .$this->mime_type(basename($filename)). "; name=\"".basename($fname)."\"\n"; $this->body .= "Content-Transfer-Encoding: base64\n"; - $this->body .= "Content-Disposition: attachment; filename=\"".basename($this->attachment[$i])."\"\n\n"; + $this->body .= "Content-Disposition: attachment; filename=\"".$filename."\"\n\n"; $this->body .= chunk_split(base64_encode($file),"72","\n"); - $file = ""; } } $this->body .= "--".$this->boundary."--\n"; @@ -145,7 +163,7 @@ class email $ret = 0; foreach($this->to as $mail) { - if (mail($mail, $this->subject, $this->body, $this->header, $this->add_params)) + if (mail($mail, $this->subject, $this->body, $this->headers, $this->add_params)) $ret++; } return $ret;