@copyright Copyright (C) 2015. All Rights Reserved @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html Builds Complex Joomla Components /-----------------------------------------------------------------------------------------------------------------------------*/ /** * Componentbuilder component email helper */ abstract class ComponentbuilderEmail { /** * 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_componentbuilder'); } 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'); $replyto = $globalConf->get('replyto'); $replytoname = $globalConf->get('replytoname'); } 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'); $replyto = $conf->get('replyto'); $replytoname = $conf->get('replytoname'); } // set the global reply-to if found if ($replyto && $replytoname) { $mail->ClearReplyTos(); $mail->addReplyTo( array( $replyto, $replytoname ) ); } // 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(ComponentbuilderHelper::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($mailreply[$i], $replyname[$i]); } } elseif (!empty($mailreply)) { $mail->ClearReplyTos(); $mail->addReplyTo($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); } if (method_exists('ComponentbuilderHelper','storeMessage')) { // store the massage if the method is set ComponentbuilderHelper::storeMessage($sendmail, $recipient, $subject, $body, $textonly, $mode, 'email'); } return $sendmail; } /** * Set html text (in a row) and subject (as title) to a email table. * do not use
instead use
* in your html that you pass to this method
* since it is a table row it does not
* work well with paragraphs
*
* @return string on success
*
*/
public static function setTableBody($html, $subject)
{
$body = array();
$body[] = "";
$body[] = "";
$body[] = "
";
$body[] = "";
$body[] = "
| ";
$body[] = "