<?php

/**
  * miniMail - PHP Mailer
  *
  * Versendet HTML Mails mit Attachments, Prioritäten und Empfangsbestätigung
  * 
  * @version 1.3.2
  * @access public
  * @author Tim Böttiger
  * @copyright (C) 2007-2008, Tim Böttiger - http://www.phpblogger.net/2007/03/20/micro-oder-mini/
  * @license LGPL, http://www.gnu.org/licenses/lgpl-3.0.txt
  * @package miniMail
  *
  *
  *
  * CHANGELOG
  * 
  * 08.02.2008 V1.3.2 - Multi-Attachment Bugfix
  *                     (Boundaries unsauber gesesetzt - Danke Rene http://www.syncbyte.com)
  * 
  * 04.02.2008 V1.3.1 - UTF-8 Betreff Bugfix
  * 
  * 30.01.2008 V1.3   - UTF-8 Betreff Bugfix
  *                     UTF-8 Howto-Formatierung
  *                     Seperate Howto-Datei in deutsch englisch
  *
  * 28.09.2007 V1.2   - UTF-8 Header Bugifx
  *                     Formatierung Howto
  *
  * 30.08.2007 V1.1   - Bugifx für Postfix Version > 2
  *
 */



/************************************************************************

Die Dokumentation findest Du unter folgender Adresse oder in der Datei
"minimail_howto.txt" in der Zip-Datei:

http://www.phpblogger.net/download/minimail/minimail_howto.txt
http://www.phpblogger.net/download/minimail/minimail.phps
http://www.phpblogger.net/download/minimail.zip
                          
You can find the documentation on the following URL, or at the file
"minimail_howto.txt" within the zip-file:

http://www.phpblogger.net/download/minimail/minimail_howto.txt
http://www.phpblogger.net/download/minimail/minimail.phps
http://www.phpblogger.net/download/minimail.zip
                          
************************************************************************/
                      
                          
define('CLRF'"\n");

class 
miniMail
{
  
/**
    * Sendet eine HTML Email
    *
    * @param mixed $to Ein Empfänger als String oder mehrere Empfänger als Array (Array = BCC Mode)
    * @param string $from Absender Email-Adresse
    * @param string $subject Email Betreff
    * @param string $utf8Html HTML Inhalt UTF8-kodiert
    * @param optional string $additionalHeaders Benutzerdefinierte Mail-Header
    * @param optional string $boundary Boundary-Kennung
    * @access public
    * @return boolean
   */
  
function send($to$from$subject$utf8Html$additionalHeaders''$boundary'')
  {
        
$bccModeis_array($to);
        
        
$mailHeader'From: ' $from CLRF
        
$mailHeader.= 'Reply-To: ' $from CLRF
        
        if(
$bccMode)
        {
            
$mailHeader.= 'Bcc: ' implode($to",\n\t") . CLRF
            
$recipient'';
        }
        else 
$recipient$to;
        
        if(
$additionalHeaders$mailHeader.= $additionalHeaders;
        
        
$mailHeader.= 'MIME-Version: 1.0' CLRF

        if(
$boundary$mailHeader.= 'Content-Type: multipart/mixed; boundary="' $boundary '"' CLRF;
        else 
$mailHeader.= 'Content-Type: text/html; charset="UTF-8"' CLRF;
        
        
$mailHeader.= 'Content-Transfer-Encoding: 8bit' CLRF

        return 
mail($recipient"=?utf-8?b?" base64_encode($subject) . "?="$utf8Html$mailHeader); 
  }
  
  
/**
    * Sendet eine HTML Email mit Attachment(s)
    *
    * @param mixed $to Ein Empfänger als String oder mehrere Empfänger als Array (Array = BCC Mode)
    * @param string $from Absender Email-Adresse
    * @param string $subject Email Betreff
    * @param string $utf8Html HTML Inhalt UTF8-kodiert
    * @param mixed $attachments Ein Dateipfad als String oder mehrere als Array
    * @access public
    * @return boolean
   */
  
function sendAttachments($to$from$subject$utf8Html$attachments)
  {
    
$boundary'-----=' md5(uniqid(rand()));

    
$message '--' $boundary CLRF;
    
$message .= 'Content-Type: text/html; charset=UTF-8' CLRF;
    
$message .= 'Content-Transfer-Encoding: base64' CLRF CLRF;
    
$message .= chunk_split(base64_encode($utf8Html)) . CLRF CLRF;

    if(!
is_array($attachments)) $attachments= array($attachments);
    
    foreach(
$attachments as $file)
    {
      
$filerealpath($file);
      if(
$file === false) continue;
      
      
$message .= '--' $boundary CLRF;
      
$message .= 'Content-Type: ' miniMail::_getContentType($file) . '; name="' basename($file) . '"' CLRF;
      
$message .= 'Content-Transfer-Encoding: base64' CLRF;
      
$message .= 'Content-Disposition: attachment; filename="' basename($file) . '"' CLRF CLRF;
      
$message .= chunk_split(base64_encode(file_get_contents($file))) . CLRF;
    }
    
$message .= '--' $boundary CLRF CLRF;
  
    return 
miniMail::send($to$from$subject$message''$boundary);
  }
  
  
/**
    * Sendet eine (un)wichtige HTML Email mit Priorität und/oder Lese- und/oder Empfangsbestätigung
    *
    * @param mixed $to Ein Empfänger als String oder mehrere Empfänger als Array (Array = BCC Mode)
    * @param string $from Absender Email-Adresse
    * @param string $subject Email Betreff
    * @param string $utf8Html HTML Inhalt UTF8-kodiert
    * @param integer $priority Die Email-Priorität(1-5; 1= sehr wichtig / 5 = unwichtig)
    * @param boolean $checkReadMail Fordert eine Lesebestätigung an
    * @param boolean $checkGetMail Fordert eine Empfangsbestätigung an
    * @access public
    * @return boolean
   */
  
function sendImportant($to$from$subject$utf8Html$priority3$checkReadMailtrue$checkGetMailtrue)
  {
    
$mailHeader'';
    
$priorities= array (=> '1 (Highest)'=> '2 (High)'=> '3 (Normal)'=> '4 (Low)'=> '5 (Lowest)');
    
    if(
$priority != && isset($priorities[$priority]))
      
$mailHeader.= 'X-Priority: ' $priorities[$priority] . CLRF
    
    if(
$checkReadMail$mailHeader.= 'X-Confirm-Reading-To: ' $from CLRF;
    if(
$checkGetMail$mailHeader.= 'Disposition-Notification-To: ' $from CLRF;
    
    return 
miniMail::send($to$from$subject$utf8Html$mailHeader);
  }
  
  
/**
    * Hilfsfunktion: Liefert den MIME-Typ für die Datei
    *
    * Kann der MIME-Typ nicht ermittelt werden, ist der Standard "application/unknown"
    *
    * @param string $fileName Dateiname
    * @access private
    * @return string
   */
  
function _getContentType($fileName)
  {
    
$contentType'';
    
$contentTypes= array('xls' => 'application/msexcel',
      
'ppt' => 'application/mspowerpoint',
      
'pps' => 'application/mspowerpoint',
      
'doc' => 'application/msword',
      
'exe' => 'application/octet-stream',
      
'pdf' => 'application/pdf',
      
'zip' => 'application/zip',
      
'gif' => 'image/gif',
      
'jpg' => 'image/jpeg',
      
'jpeg' => 'image/jpeg',
      
'png' => 'image/png',
      
'csv' => 'text/comma-separated-values',
      
'txt' => 'text/plain',
      
'xml' => 'text/xml',
      
'mpg' => 'video/mpeg',
      
'mpeg' => 'video/mpeg');
      
    
$fileInfopathinfo($fileName);
    
$extensionstrtolower($fileInfo['extension']);
      
    if(isset(
$contentTypes[$extension])) $contentType$contentTypes[$extension];
    else 
$contentType'application/unknown';
    
    return 
$contentType;
  }
}

?>