262 lines
5.8 KiB
PHP
262 lines
5.8 KiB
PHP
|
<?php
|
|||
|
/**
|
|||
|
*
|
|||
|
* @version 2.0.0 - September 03, 2014
|
|||
|
* @package Component Builder
|
|||
|
* @author Llewellyn van de Merwe <http://www.vdm.io>
|
|||
|
* @copyright Copyright (C) 2014. All Rights Reserved
|
|||
|
* @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
|||
|
*
|
|||
|
**/
|
|||
|
|
|||
|
// No direct access to this file
|
|||
|
defined('_JEXEC') or die('Restricted access');
|
|||
|
?>
|
|||
|
###BOM###
|
|||
|
|
|||
|
/**
|
|||
|
* ###Component### component email helper
|
|||
|
*/
|
|||
|
abstract class ###Component###Email
|
|||
|
{
|
|||
|
/**
|
|||
|
* Configuraiton object
|
|||
|
*
|
|||
|
* @var JConfig
|
|||
|
*/
|
|||
|
public static $config = null;
|
|||
|
|
|||
|
/**
|
|||
|
* Mailer object
|
|||
|
*
|
|||
|
* @var JMail
|
|||
|
*/
|
|||
|
public static $mailer = null;
|
|||
|
|
|||
|
/**
|
|||
|
* Get a configuration object
|
|||
|
*
|
|||
|
*/
|
|||
|
public static function getConfig()
|
|||
|
{
|
|||
|
if (!self::$config)
|
|||
|
{
|
|||
|
self::$config = JComponentHelper::getParams('com_###component###');
|
|||
|
}
|
|||
|
|
|||
|
return self::$config;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Get a mailer object.
|
|||
|
*
|
|||
|
* Returns the global {@link JMail} object, only creating it if it doesn't already exist.
|
|||
|
*
|
|||
|
* @return JMail object
|
|||
|
*
|
|||
|
* @see JMail
|
|||
|
*/
|
|||
|
public static function getMailer()
|
|||
|
{
|
|||
|
if (!self::$mailer)
|
|||
|
{
|
|||
|
self::$mailer = self::createMailer();
|
|||
|
}
|
|||
|
|
|||
|
$copy = clone self::$mailer;
|
|||
|
|
|||
|
return $copy;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Create a mailer object
|
|||
|
*
|
|||
|
* @return JMail object
|
|||
|
*
|
|||
|
* @see JMail
|
|||
|
*/
|
|||
|
protected static function createMailer()
|
|||
|
{
|
|||
|
// set component params
|
|||
|
$conf = self::getConfig();
|
|||
|
|
|||
|
// now load the mailer
|
|||
|
$mailer = $conf->get('mailer', 'global');
|
|||
|
|
|||
|
// Create a JMail object
|
|||
|
$mail = JMail::getInstance();
|
|||
|
|
|||
|
// check if set to global
|
|||
|
if ('global' == $mailer)
|
|||
|
{
|
|||
|
// get the global details
|
|||
|
$globalConf = JFactory::getConfig();
|
|||
|
|
|||
|
$mailer = $globalConf->get('mailer');
|
|||
|
$smtpauth = ($globalConf->get('smtpauth') == 0) ? null : 1;
|
|||
|
$smtpuser = $globalConf->get('smtpuser');
|
|||
|
$smtppass = $globalConf->get('smtppass');
|
|||
|
$smtphost = $globalConf->get('smtphost');
|
|||
|
$smtpsecure = $globalConf->get('smtpsecure');
|
|||
|
$smtpport = $globalConf->get('smtpport');
|
|||
|
$sendmail = $globalConf->get('sendmail');
|
|||
|
$mailfrom = $globalConf->get('mailfrom');
|
|||
|
$fromname = $globalConf->get('fromname');
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
$smtpauth = ($conf->get('smtpauth') == 0) ? null : 1;
|
|||
|
$smtpuser = $conf->get('smtpuser');
|
|||
|
$smtppass = $conf->get('smtppass');
|
|||
|
$smtphost = $conf->get('smtphost');
|
|||
|
$smtpsecure = $conf->get('smtpsecure');
|
|||
|
$smtpport = $conf->get('smtpport');
|
|||
|
$sendmail = $conf->get('sendmail');
|
|||
|
$mailfrom = $conf->get('mailfrom');
|
|||
|
$fromname = $conf->get('fromname');
|
|||
|
$mailreply = $conf->get('mailreply');
|
|||
|
$replyname = $conf->get('replyname');
|
|||
|
|
|||
|
// set the global reply-to
|
|||
|
if ($mailreply && $fromname)
|
|||
|
{
|
|||
|
$mail->ClearReplyTos();
|
|||
|
$mail->addReplyTo( array( $mailreply, $replyname ) );
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Set global sender
|
|||
|
$mail->setSender(array($mailfrom, $fromname));
|
|||
|
|
|||
|
// Default mailer is to use PHP's mail function
|
|||
|
switch ($mailer)
|
|||
|
{
|
|||
|
case 'smtp':
|
|||
|
// set the SMTP option
|
|||
|
$mail->useSMTP($smtpauth, $smtphost, $smtpuser, $smtppass, $smtpsecure, $smtpport);
|
|||
|
break;
|
|||
|
|
|||
|
case 'sendmail':
|
|||
|
// set the sendmail option
|
|||
|
$mail->useSendmail($sendmail);
|
|||
|
$mail->IsSendmail();
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
$mail->IsMail();
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
return $mail;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Send an email
|
|||
|
*
|
|||
|
* @return bool on success
|
|||
|
*
|
|||
|
*/
|
|||
|
public static function send($recipient, $subject, $body, $textonly, $mode = 0, $bounce_email = null, $idsession = null, $mailreply = null, $replyname = null , $mailfrom = null, $fromname = null, $cc = null, $bcc = null, $attachment = null, $embeded = null , $embeds = null)
|
|||
|
{
|
|||
|
|
|||
|
// Get a JMail instance
|
|||
|
$mail = self::getMailer();
|
|||
|
|
|||
|
// set component params
|
|||
|
$conf = self::getConfig();
|
|||
|
|
|||
|
// do some house cleaning
|
|||
|
$mail->ClearReplyTos();
|
|||
|
|
|||
|
// set if we have override
|
|||
|
if ($mailfrom && $fromname)
|
|||
|
{
|
|||
|
$mail->setSender(array($mailfrom, $fromname));
|
|||
|
}
|
|||
|
|
|||
|
// load the bounce email as sender if set
|
|||
|
if (!is_null($bounce_email))
|
|||
|
{
|
|||
|
|
|||
|
$mail->Sender = $bounce_email;
|
|||
|
}
|
|||
|
|
|||
|
// Add tag to email to identify it
|
|||
|
if (!is_null($idsession))
|
|||
|
{
|
|||
|
$mail->addCustomHeader('X-VDMmethodID:'.$idsession);
|
|||
|
}
|
|||
|
|
|||
|
// set the subject & Body
|
|||
|
$mail->setSubject($subject);
|
|||
|
$mail->setBody($body);
|
|||
|
|
|||
|
// Are we sending the email as HTML?
|
|||
|
if ($mode)
|
|||
|
{
|
|||
|
$mail->IsHTML(true);
|
|||
|
$mail->AltBody = $textonly;
|
|||
|
}
|
|||
|
|
|||
|
//embed images
|
|||
|
if ($embeded)
|
|||
|
{
|
|||
|
if(###Component###Helper::checkArray($embeds))
|
|||
|
{
|
|||
|
foreach($embeds as $embed)
|
|||
|
{
|
|||
|
$mail->AddEmbeddedImage($embed->Path,$embed->FileName);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
$mail->addRecipient($recipient);
|
|||
|
$mail->addCC($cc);
|
|||
|
$mail->addBCC($bcc);
|
|||
|
$mail->addAttachment($attachment);
|
|||
|
|
|||
|
// Take care of reply email addresses
|
|||
|
if (is_array($mailreply))
|
|||
|
{
|
|||
|
$mail->ClearReplyTos();
|
|||
|
$numReplyTo = count($mailreply);
|
|||
|
for ($i=0; $i < $numReplyTo; $i++)
|
|||
|
{
|
|||
|
$mail->addReplyTo( array($mailreply[$i], $replyname[$i]) );
|
|||
|
}
|
|||
|
}
|
|||
|
elseif (!empty($mailreply))
|
|||
|
{
|
|||
|
$mail->ClearReplyTos();
|
|||
|
$mail->addReplyTo( array( $mailreply, $replyname ) );
|
|||
|
}
|
|||
|
|
|||
|
// check if we can add the DKIM to email
|
|||
|
if ($conf->get('enable_dkim'))
|
|||
|
{
|
|||
|
if (!empty($conf->get('dkim_domain')) && !empty($conf->get('dkim_selector')) && !empty($conf->get('dkim_private')) && !empty($conf->get('dkim_public')))
|
|||
|
{
|
|||
|
$mail->DKIM_domain = $conf->get('dkim_domain');
|
|||
|
$mail->DKIM_selector = $conf->get('dkim_selector');
|
|||
|
$mail->DKIM_identity = $conf->get('dkim_identity');
|
|||
|
$mail->DKIM_passphrase = $conf->get('dkim_passphrase');
|
|||
|
|
|||
|
$tmp = tempnam(sys_get_temp_dir(), 'VDM');
|
|||
|
$h = fopen($tmp, 'w');
|
|||
|
fwrite($h, $conf->get('dkim_private'));
|
|||
|
fclose($h);
|
|||
|
$mail->DKIM_private = $tmp;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
$sendmail = $mail->Send();
|
|||
|
|
|||
|
if ($conf->get('enable_dkim') && !empty($conf->get('dkim_domain')) && !empty($conf->get('dkim_selector')) && !empty($conf->get('dkim_private')) && !empty($conf->get('dkim_public')))
|
|||
|
{
|
|||
|
@unlink($tmp);
|
|||
|
}
|
|||
|
|
|||
|
return $sendmail;
|
|||
|
}
|
|||
|
}
|