diff --git a/core/email.class.inc.php b/core/email.class.inc.php new file mode 100644 index 0000000000..3a8a23e886 --- /dev/null +++ b/core/email.class.inc.php @@ -0,0 +1,121 @@ + + * @author Denis Flaven + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @link www.itop.com + * @since 1.0 + * @version 1.1.1.1 $ + */ +class EMail +{ + protected $m_sBody; + protected $m_sSubject; + protected $m_sTo; + protected $m_aHeaders; // array of key=>value + + public function __construct() + { + $this->m_sTo = ''; + $this->m_sSubject = ''; + $this->m_sBody = ''; + $this->m_aHeaders = array(); + } + + + // Errors management : not that simple because we need that function to be + // executed in the background, while making sure that any issue would be reported clearly + protected $m_aMailErrors; //array of strings explaining the issues + + public function mail_error_handler($errno, $errstr, $errfile, $errline) + { + $sCleanMessage= str_replace("mail() [function.mail]: ", "", $errstr); + $this->m_aMailErrors[] = $sCleanMessage; + } + + + // returns a list of issues if any + public function Send() + { + $sHeaders = 'MIME-Version: 1.0' . "\r\n"; + $sHeaders .= 'Content-type: text/html; charset=utf-8' . "\r\n"; + foreach ($this->m_aHeaders as $sKey => $sValue) + { + $sHeaders .= "$sKey: $sValue\r\n"; + } + + // Under Windows (not yet proven for Linux/PHP) mail may issue a warning + // that I could not mask (tried error_reporting(), etc.) + $this->m_aMailErrors = array(); + set_error_handler(array($this, 'mail_error_handler')); + $bRes = mail + ( + $this->m_sTo, + $this->m_sSubject, + $this->m_sBody, + $sHeaders + ); + restore_error_handler(); + if (!$bRes && empty($this->m_aMailErrors)) + { + $this->m_aMailErrors[] = 'Unknown reason'; + } + return $this->m_aMailErrors; + } + + protected function AddToHeader($sKey, $sValue) + { + if (strlen($sValue) > 0) + { + $this->m_aHeaders[$sKey] = $sValue; + } + } + + public function SetBody($sBody) + { + $this->m_sBody = $sBody; + } + + public function SetSubject($aSubject) + { + $this->m_sSubject = $aSubject; + } + + public function SetRecipientTO($sAddress) + { + $this->m_sTo = $sAddress; + } + + public function SetRecipientCC($sAddress) + { + $this->AddToHeader('Cc', $sAddress); + } + + public function SetRecipientBCC($sAddress) + { + $this->AddToHeader('Bcc', $sAddress); + } + + public function SetRecipientFrom($sAddress) + { + $this->AddToHeader('From', $sAddress); + + // This is required on Windows because otherwise I would get the error + // "sendmail_from" not set in php.ini" even if it is correctly working + // (apparently, once it worked the SMTP server won't claim anymore for it) + ini_set("sendmail_from", $sAddress); + } + + public function SetRecipientReplyTo($sAddress) + { + $this->AddToHeader('Reply-To', $sAddress); + } + +} + +?>