<?php
/**
 * ****************************************************************
 * Project:      *
 * Copyright:    Copyright (c) 2007
 * Company:      Thomas Niemann
 * ****************************************************************
 * Workfile:     EmailHelper.php
 * ****************************************************************
 * Description:
 *
 * ***************************************************************/
class EmailHelper {
	private $mail = null;
	public function __construct() {
		// Zeichen fuer Zeilenumbruch
		$eol = "\n";
		$this->mail = new Mail_mime($eol);
	}
	public function sendEmail($_subject, $_content, $_recipient,$_htmlemail = false, $_from = null, $_from_name = null, $_bcc = null,$_cc = null,$_attachment = null) {
		/**
		* den HTML-Body der Mail setzen. Alternativ kann der
		* HTML-Code auch aus einer Datei kommen. Dann geben
		* Sie als ersten Parameter den Dateinamen und als zweiten
		* Parameter TRUE an.
		*/

		$_htmlemail = false;

		// Absender festlegen
		$from = empty ($_from) ? (string) Configloader :: getInstance()->getEmail('info') : $_from;
		$from_params = empty ($_from_name) ? $from : ('"'.$_from_name.'" <'.$from.'>');
		$this->mail->setFrom($from_params);
		// cc festlegen
		if(!empty($_cc)){
			$this->mail->addCc($_cc);
		}
		// Bcc festlegen
		if(!empty($_bcc)){
			$this->mail->addBcc((string)$_bcc);
		}
		// Betreff der Mail festlegen
		$this->mail->setSubject($_subject);
		// Den Inhalt der Mail definieren
		if($_htmlemail)$this->mail->setHTMLBody($_content);
		else $this->mail->setTXTBody($_content);
		//anhang
		if (!empty ($_attachment)) {
			$this->_setAttachment($_attachment);
		}

		// Koerper der Mail auslesen
        $mimeparams['text_encoding']="8bit";
        $mimeparams['text_charset']="UTF-8";
        $mimeparams['html_charset']="UTF-8";
        $mimeparams['head_charset']="UTF-8";

		$body = $this->mail->get($mimeparams);
		$headers = $this->mail->headers();
		/**
		* Mail verschicken
		*/
		if (is_array($_recipient)) {
			foreach ($_recipient as $rec) {
				if (!empty ($rec)) {
					$res = $this->_send($rec, 'mail', $headers, $body); // SMTP
					//$res=$this->_send($rec,'mail');         // Mail
					//echo !PEAR::isError($res)?"<br/> eMail gesendet!":$res->getMessage();
				}
			}
		} else {
			$res = $this->_send($_recipient, 'mail', $headers, $body); // SMTP
			//$res=$this->_send($_recipient,'mail');         // Mail
			//echo !PEAR::isError($res)?"<br/> eMail gesendet!":$res->getMessage();
		}
		return !PEAR::isError($res)? true :$res->getMessage();
	}
	/**
	* Mail senden
	* @access public
	* @param string $to G�ltige eMail-Adresse als Empf�nger
	* @param string $type Zu verwendende eMail-Engine ((default)'mail' oder 'smtp')
	* @param array $typeoptions Sendeoptionen der SMTP-Engine
	* @return boolean true oder PEAR::Error-Objekt
	* @see Validate,Mail_mime,Mail
	*/
	private function _send($to, $type = "mail", $mailheader, $mailbody) {
		$sendmail = new Mail();
		if (Validate :: email($to, true) == true) {
			$from = $mailheader['From'];
			$mailer = $sendmail->factory($type,array('Return-Path' => sprintf("-f %s", $from)));
			return $mailer->send($to, $mailheader, $mailbody) ? true : PEAR :: raiseError('Fehler beim senden der eMail');
		} else {
			//loggen der falschen email adresse
			ErrorLogLoader :: getInstance()->logInvalidEmail($to);
			return PEAR :: raiseError('eMail-Adresse ung�ltig!');
		}
	}
	/**
	* Anh�nge hinzuf�gen
	* @access private
	* @param array $attachments Array mit Pfaden zu Dateianh�ngen
	*/
	private function _setAttachment($_attachments) {
		if (is_array($_attachments)) {
			foreach ($_attachments as $attachment) {
				if (is_file(realpath($attachment))) {
					$this->mail->addAttachment($attachment);
				}
			}
		} else
			if (is_file(realpath($_attachments))) {
				$this->mail->addAttachment($_attachments);
			}
	}
}