%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/components/mail/ |
| 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');
}
}
}