2001-01-11 10:52:33 +01:00
|
|
|
<?php
|
2010-09-15 11:10:12 +02:00
|
|
|
/**
|
2014-11-25 10:06:46 +01:00
|
|
|
* EGroupware API: Sending mail via egw_mailer
|
2010-09-15 11:10:12 +02:00
|
|
|
*
|
|
|
|
* @link http://www.egroupware.org
|
|
|
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
|
|
|
* @package api
|
|
|
|
* @subpackage mail
|
|
|
|
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
|
|
|
* @version $Id$
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* New eGW send-class. It implements the old interface (msg-method) on top of PHPMailer.
|
|
|
|
*
|
2014-06-05 12:36:13 +02:00
|
|
|
* The configuration is read via emailadmin_account::get_default_acc_id(true); // true=SMTP
|
2010-09-15 11:10:12 +02:00
|
|
|
*/
|
|
|
|
class send extends egw_mailer
|
|
|
|
{
|
2004-07-05 12:11:11 +02:00
|
|
|
/**
|
2010-09-15 11:10:12 +02:00
|
|
|
* eGW specific initialisation of the PHPMailer: charset, language, smtp-host, ...
|
|
|
|
*
|
|
|
|
* To be able to call PHPMailer's Send function, we check if a subject, body or address is set and call it in that case,
|
|
|
|
* else we do our constructors work.
|
|
|
|
*/
|
2014-04-09 10:22:59 +02:00
|
|
|
function send()
|
2001-03-26 00:24:19 +02:00
|
|
|
{
|
2010-09-15 11:10:12 +02:00
|
|
|
if ($this->Subject || $this->Body || count($this->to))
|
2010-09-08 18:02:40 +02:00
|
|
|
{
|
2014-11-25 10:06:46 +01:00
|
|
|
return parent::send();
|
2010-09-08 18:02:40 +02:00
|
|
|
}
|
2010-09-15 11:10:12 +02:00
|
|
|
parent::__construct(); // calling parent constructor
|
|
|
|
}
|
2005-08-23 19:49:49 +02:00
|
|
|
|
2010-09-15 11:10:12 +02:00
|
|
|
/**
|
|
|
|
* Reset all Settings to send multiple Messages
|
|
|
|
*/
|
|
|
|
function ClearAll()
|
|
|
|
{
|
|
|
|
$this->err = array();
|
2005-08-23 19:49:49 +02:00
|
|
|
|
2010-09-15 11:10:12 +02:00
|
|
|
$this->Subject = $this->Body = $this->AltBody = '';
|
|
|
|
$this->IsHTML(False);
|
|
|
|
$this->ClearAllRecipients();
|
|
|
|
$this->ClearAttachments();
|
|
|
|
$this->ClearCustomHeaders();
|
2005-08-23 19:49:49 +02:00
|
|
|
|
2013-07-04 19:45:20 +02:00
|
|
|
$this->FromName = $GLOBALS['egw_info']['user']['account_fullname'];
|
|
|
|
$this->From = $GLOBALS['egw_info']['user']['account_email'];
|
2005-08-23 19:49:49 +02:00
|
|
|
|
2010-09-15 11:10:12 +02:00
|
|
|
$this->AddCustomHeader('X-Mailer:eGroupWare (http://www.eGroupWare.org)');
|
|
|
|
}
|
2005-08-23 19:49:49 +02:00
|
|
|
|
2010-09-15 11:10:12 +02:00
|
|
|
/**
|
|
|
|
* Emulating the old send::msg interface for compatibility with existing code
|
|
|
|
*
|
|
|
|
* You can either use that code or the PHPMailer variables and methods direct.
|
|
|
|
*/
|
|
|
|
function msg($service, $to, $subject, $body, $msgtype='', $cc='', $bcc='', $from='', $sender='', $content_type='', $boundary='Message-Boundary')
|
|
|
|
{
|
|
|
|
if ($this->debug) error_log(__METHOD__." to='$to',subject='$subject',,'$msgtype',cc='$cc',bcc='$bcc',from='$from',sender='$sender'");
|
2014-04-09 10:22:59 +02:00
|
|
|
unset($boundary); // not used, but required by function signature
|
2010-09-15 11:10:12 +02:00
|
|
|
//echo "<p>send::msg(,to='$to',subject='$subject',,'$msgtype',cc='$cc',bcc='$bcc',from='$from',sender='$sender','$content_type','$boundary')<pre>$body</pre>\n";
|
|
|
|
$this->ClearAll(); // reset everything to its default, we might be called more then once !!!
|
2005-08-23 19:49:49 +02:00
|
|
|
|
2010-09-15 11:10:12 +02:00
|
|
|
if ($service != 'email')
|
|
|
|
{
|
|
|
|
return False;
|
|
|
|
}
|
|
|
|
if ($from)
|
|
|
|
{
|
2014-04-09 10:22:59 +02:00
|
|
|
$matches = null;
|
2010-09-15 11:10:12 +02:00
|
|
|
if (preg_match('/"?(.+)"?<(.+)>/',$from,$matches))
|
2005-08-23 19:49:49 +02:00
|
|
|
{
|
2010-09-15 11:10:12 +02:00
|
|
|
list(,$this->FromName,$this->From) = $matches;
|
2005-08-23 19:49:49 +02:00
|
|
|
}
|
2010-09-15 11:10:12 +02:00
|
|
|
else
|
2001-03-26 00:24:19 +02:00
|
|
|
{
|
2010-09-15 11:10:12 +02:00
|
|
|
$this->From = $from;
|
|
|
|
$this->FromName = '';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ($sender)
|
|
|
|
{
|
|
|
|
$this->Sender = $sender;
|
|
|
|
}
|
|
|
|
foreach(array('to','cc','bcc') as $adr)
|
|
|
|
{
|
|
|
|
if ($$adr)
|
|
|
|
{
|
|
|
|
if (is_string($$adr) && preg_match_all('/"?(.+)"?<(.+)>,?/',$$adr,$matches))
|
2001-09-28 23:38:29 +02:00
|
|
|
{
|
2010-09-15 11:10:12 +02:00
|
|
|
$names = $matches[1];
|
|
|
|
$addresses = $matches[2];
|
2001-09-28 23:38:29 +02:00
|
|
|
}
|
2004-07-05 12:11:11 +02:00
|
|
|
else
|
2001-09-28 23:38:29 +02:00
|
|
|
{
|
2011-03-21 14:13:41 +01:00
|
|
|
$addresses = is_string($$adr) ? explode(',',trim($$adr)) : explode(',',trim(array_shift($$adr)));
|
2010-09-15 11:10:12 +02:00
|
|
|
$names = array();
|
2005-08-23 19:49:49 +02:00
|
|
|
}
|
2010-09-15 11:10:12 +02:00
|
|
|
$method = 'Add'.($adr == 'to' ? 'Address' : $adr);
|
2005-08-23 19:49:49 +02:00
|
|
|
|
2010-09-15 11:10:12 +02:00
|
|
|
foreach($addresses as $n => $address)
|
|
|
|
{
|
|
|
|
$this->$method($address,$names[$n]);
|
2001-03-26 00:24:19 +02:00
|
|
|
}
|
|
|
|
}
|
2001-09-28 23:38:29 +02:00
|
|
|
}
|
2010-09-15 11:10:12 +02:00
|
|
|
if (!empty($msgtype))
|
|
|
|
{
|
|
|
|
$this->AddCustomHeader('X-eGW-Type: '.$msgtype);
|
|
|
|
}
|
|
|
|
if ($content_type)
|
|
|
|
{
|
|
|
|
$this->ContentType = $content_type;
|
|
|
|
}
|
|
|
|
$this->Subject = $subject;
|
|
|
|
$this->Body = $body;
|
2005-08-23 19:49:49 +02:00
|
|
|
|
2010-09-15 11:10:12 +02:00
|
|
|
//echo "PHPMailer = <pre>".print_r($this,True)."</pre>\n";
|
|
|
|
if (!$this->Send())
|
2001-05-30 21:47:13 +02:00
|
|
|
{
|
2010-09-15 11:10:12 +02:00
|
|
|
$this->err = array(
|
|
|
|
'code' => 1, // we dont get a numerical code from PHPMailer
|
|
|
|
'msg' => $this->ErrorInfo,
|
|
|
|
'desc' => $this->ErrorInfo,
|
|
|
|
);
|
|
|
|
return False;
|
2001-05-30 21:47:13 +02:00
|
|
|
}
|
2010-09-15 11:10:12 +02:00
|
|
|
return True;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* encode 8-bit chars in subject-line
|
|
|
|
*
|
|
|
|
* @deprecated This is not needed any more, as it is done be PHPMailer, but older code depend on it.
|
|
|
|
*/
|
|
|
|
function encode_subject($subject)
|
|
|
|
{
|
|
|
|
return $subject;
|
2004-07-05 12:11:11 +02:00
|
|
|
}
|
2010-09-15 11:10:12 +02:00
|
|
|
}
|