Current File : /home/pacjaorg/public_html/km/libraries/src/Mail/MailerFactory.php |
<?php
/**
* Joomla! Content Management System
*
* @copyright (C) 2023 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\CMS\Mail;
use Exception;
use Joomla\CMS\Log\Log;
use Joomla\Registry\Registry;
// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
/**
* Default factory for creating mailer objects.
*
* @since 4.4.0
*/
class MailerFactory implements MailerFactoryInterface
{
/**
* The default configuration.
*
* @var Registry
* @since 4.4.0
*/
private $defaultConfiguration;
/**
* The MailerFactory constructor.
*
* @param Registry $defaultConfiguration The default configuration
*/
public function __construct(Registry $defaultConfiguration)
{
$this->defaultConfiguration = $defaultConfiguration;
}
/**
* Method to get an instance of a mailer. If the passed settings are null,
* then the mailer does use the internal configuration.
*
* @param ?Registry $settings The configuration
*
* @return MailerInterface
*
* @since 4.4.0
*/
public function createMailer(?Registry $settings = null): MailerInterface
{
$configuration = new Registry($this->defaultConfiguration);
if ($settings) {
$configuration->merge($settings);
}
$mailer = new Mail((bool) $configuration->get('throw_exceptions', true));
$smtpauth = $configuration->get('smtpauth') == 0 ? null : 1;
$smtpuser = $configuration->get('smtpuser');
$smtppass = $configuration->get('smtppass');
$smtphost = $configuration->get('smtphost');
$smtpsecure = $configuration->get('smtpsecure');
$smtpport = $configuration->get('smtpport');
$mailfrom = $configuration->get('mailfrom');
$fromname = $configuration->get('fromname');
$mailType = $configuration->get('mailer');
// Clean the email address
$mailfrom = MailHelper::cleanLine($mailfrom);
// Set default sender without Reply-to if the mailfrom is a valid address
if (MailHelper::isEmailAddress($mailfrom)) {
// Wrap in try/catch to catch Exception if it is throwing them
try {
// Check for a false return value if exception throwing is disabled
if ($mailer->setFrom($mailfrom, MailHelper::cleanLine($fromname), false) === false) {
Log::add(__METHOD__ . '() could not set the sender data.', Log::WARNING, 'mail');
}
} catch (\Exception $e) {
Log::add(__METHOD__ . '() could not set the sender data.', Log::WARNING, 'mail');
}
}
// Default mailer is to use PHP's mail function
switch ($mailType) {
case 'smtp':
$mailer->useSmtp($smtpauth, $smtphost, $smtpuser, $smtppass, $smtpsecure, $smtpport);
break;
case 'sendmail':
$mailer->isSendmail();
break;
default:
$mailer->isMail();
break;
}
return $mailer;
}
}