Your IP : 216.73.216.224


Current Path : /var/www/html/libraries/noboss/src/Util/
Upload File :
Current File : /var/www/html/libraries/noboss/src/Util/NbEmailsUtil.php

<?php
/**
 * @package			No Boss Extensions
 * @subpackage  	No Boss Library
 * @author			No Boss Technology <contact@nobosstechnology.com>
 * @copyright		Copyright (C) 2026 No Boss Technology. All rights reserved.
 * @license			GNU Lesser General Public License version 3 or later; see <https://www.gnu.org/licenses/lgpl-3.0.en.html>
 */

namespace Noboss\Library\Util;

use Joomla\CMS\Factory;
use Joomla\CMS\Mail\MailerFactoryInterface;

// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects

// Classe para envio de emails
class NbEmailsUtil {

    /**
     * Função que envia um e-mail para um lista de destinatários.
     * 
     * @param 	string 		$subject 				Assunto do e-mail.
     * @param 	string 		$message 				Menssagem do e-mail.
     * @param 	mixed 		$senderList 			Dados do remetente onde a primeira posicao do array eh o email e a segunda o nome OU eh somente uma string com email
     * @param 	mixed 		$recipients 			Lista com endereços dos destinatários do e-mail podendo ser enviada em array ou separado por ponto ou ponto e virgula
     * @param 	array 		$attachments 			Lista de arquivos para anexar ao e-mail.
     * @param 	mixed 		$recipientsHidden 		Lista com os endereços dos destinatários ocultos do e-mail podendo ser enviada em array ou separado por ponto ou ponto e virgula
     * @param 	mixed 		$reply 					Dados para email de retorno onde a primeira posicao do array eh o email e a segunda o nome OU eh somente uma string com email
     * 
     * @return bolean Retorna true se o e-mail foi enviado, caso contrário retorna false.
     */
    public static function sendEmail($subject, $message, $senderList = array(), $recipients = array(), $attachments = array(), $recipientsHidden = array(), $reply = array()){
        // Verifica se esta definido os destinatarios
        if (empty($recipients)){
            return false;
        }
        
        // Configura objeto mailer.
        $mailer = Factory::getContainer()->get(MailerFactoryInterface::class)->createMailer();
        // Objeto de configs default do joomla.
        $config = Factory::getApplication()->getConfig();
        // E-mail do remetente
        $senderList = !empty($senderList) ? $senderList : array($config->get('mailfrom'), $config->get('fromname'));

        // Configura remetente.
        $mailer->setSender($senderList);
        
        // Email de resposta
        if (!empty($reply)){
            // Configura replyto
            $mailer->addReplyTo($reply);
        }

        // Configura assunto do e-mail.
        $mailer->setSubject($subject);
        // Configura mensagem do corpo do e-mail.
        $message = empty($message) ? '.' : $message;
        $mailer->setBody($message);
        // Informa que o e-mail possui código HTML.
        $mailer->isHTML(true);

        // Percorre a lista de anexos.
        foreach ($attachments as $file) {
            $mailer->addAttachment($file['tmp_name'], $file['name'], "base64" ,$file['type']);
        }

        // Executa funcao que ira garantir que os emails estejam em formato de array
        $recipients = self::convertsMailListArray($recipients);

        // Adiciona destinatários não ocultos
        foreach($recipients as $recipient) {
            $mailer->addRecipient($recipient);
        }

        // Executa funcao que ira garantir que os emails estejam em formato de array
        $recipientsHidden = self::convertsMailListArray($recipientsHidden);

        // Adiciona destinatários ocultos.
        foreach($recipientsHidden as $recipient) {
            $mailer->addBcc($recipient);
        }

        //Realiza o envio do e-mail.
        return $mailer->Send();
    }

    /**
     * Função que envia um e-mail para um lista de destinatários.
     * 
     * @param 	mixed 		$emails 		Lista de emails que pode ser recebida como string ou array
     * 
     * @return 	array 		Lista de emails convertida para array
     */
    public static function convertsMailListArray($emails){
        // Ja esta em formato de array: retorna
        if (is_array($emails)) { 
            return $emails;
        }
        // Ha mais de um email separado por virgula
        if (strstr($emails, ',')){
            $emails = explode(',', $emails);
        }
        // Ha mais de um email separado por ponto e virgula
        else if (strstr($emails, ';')){
            $emails = explode(';', $emails);
        }
        // Ha somente um email definido
        else{
            $emails = array($emails);
        }
        return $emails;
    }

}