%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/components/mail/
Upload File :
Create Path :
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/components/mail/Mailer.php

<?php

/**
 * @link https://www.humhub.org/
 * @copyright Copyright (c) 2017 HumHub GmbH & Co. KG
 * @license https://www.humhub.com/licences
 */

namespace humhub\components\mail;

use Symfony\Component\Mime\Crypto\SMimeSigner;
use Yii;

/**
 * Mailer implements a mailer based on SymfonyMailer.
 *
 * @see \yii\symfonymailer\Mailer
 * @since 1.2
 * @author Luke
 */
class Mailer extends \yii\symfonymailer\Mailer
{
    /**
     * @inheritdoc
     */
    public $messageClass = 'humhub\components\mail\Message';

    /**
     * @var array of surpressed recipient e-mail addresses
     * @since 1.3
     */
    public $surpressedRecipients = ['david.roberts@example.com', 'sara.schuster@example.com'];

    /**
     * @var string|null Path for the sigining certificate. If provided emails will be digitally signed before sending.
     */
    public $signingCertificatePath = null;

    /**
     * @var string|null Path for the sigining certificate private key. If provided emails will be digitally signed before sending.
     */
    public $signingPrivateKeyPath = null;

    /**
     * @var string|null A passphrase of the private key (if any)
     */
    public $signingPrivateKeyPassphrase = null;

    /**
     * @var string|null Path for extra sigining certificates (i.e. intermidiate certificates).
     */
    public $signingExtraCertsPath = null;

    /**
     * @var int Bitwise operator options for openssl_pkcs7_sign()
     */
    public $signingOptions = PKCS7_DETACHED;

    /**
     * @var SMimeSigner|null
     */
    private $signer = null;

    /**
     * @inheritDoc
     */
    public function compose($view = null, array $params = [])
    {
        $message = parent::compose($view, $params);

        // Set HumHub default from values
        if (empty($message->getFrom())) {
            $message->setFrom([Yii::$app->settings->get('mailer.systemEmailAddress') => Yii::$app->settings->get('mailer.systemEmailName')]);
            if ($replyTo = Yii::$app->settings->get('mailer.systemEmailReplyTo')) {
                $message->setReplyTo($replyTo);
            }
        }

        if ($this->signingCertificatePath !== null && $this->signingPrivateKeyPath !== null) {
            if ($this->signer === null) {
                $this->signer = new SMimeSigner(
                    $this->signingCertificatePath,
                    $this->signingPrivateKeyPath,
                    $this->signingPrivateKeyPassphrase,
                    $this->signingExtraCertsPath,
                    $this->signingOptions
                );
            }
            $this->withSigner($this->signer);
        }

        return $message;
    }


    /**
     * @inheritdoc
     * @param Message $message
     */
    public function sendMessage($message): bool
    {

        // Remove example e-mails
        $address = $message->getTo();

        if (is_array($address)) {
            foreach (array_keys($address) as $email) {
                if ($this->isRecipientSurpressed($email)) {
                    unset($address[$email]);
                }
            }
            if (count($address) == 0) {
                return true;
            }
            $message->setTo($address);
        } elseif ($this->isRecipientSurpressed($address)) {
            return true;
        }

        return parent::sendMessage($message);
    }

    private function isRecipientSurpressed($email): bool
    {
        $email = strtolower($email);

        foreach ($this->surpressedRecipients as $surpressed) {
            if (strpos($email, $surpressed) !== false) {
                return true;
            }
        }

        return false;
    }

    /**
     * @inheritDoc
     */
    public function setTransport($transport): void
    {
        try {
            parent::setTransport($transport);
        } catch (\Exception $ex) {
            Yii::error('Could not set mailer transport: ' . $ex->getMessage(), 'base');
        }
    }
}

Zerion Mini Shell 1.0