/usr/share/php/Nette/Mail/FallbackMailer.php is in php-nette 2.4-20160731-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | <?php
/**
* This file is part of the Nette Framework (https://nette.org)
* Copyright (c) 2004 David Grudl (https://davidgrudl.com)
*/
namespace Nette\Mail;
use Nette;
class FallbackMailer implements IMailer
{
use Nette\SmartObject;
/** @var callable[] function (FallbackMailer $sender, SendException $e, IMailer $mailer, Message $mail) */
public $onFailure;
/** @var IMailer[] */
private $mailers;
/** @var int */
private $retryCount;
/** @var int in miliseconds */
private $retryWaitTime;
/**
* @param IMailer[]
* @param int
* @param int in miliseconds
*/
public function __construct(array $mailers, $retryCount = 3, $retryWaitTime = 1000)
{
$this->mailers = $mailers;
$this->retryCount = $retryCount;
$this->retryWaitTime = $retryWaitTime;
}
/**
* Sends email.
* @return void
* @throws FallbackMailerException
*/
public function send(Message $mail)
{
if (!$this->mailers) {
throw new Nette\InvalidArgumentException('At least one mailer must be provided.');
}
for ($i = 0; $i < $this->retryCount; $i++) {
if ($i > 0) {
usleep($this->retryWaitTime * 1000);
}
foreach ($this->mailers as $mailer) {
try {
$mailer->send($mail);
return;
} catch (SendException $e) {
$failures[] = $e;
$this->onFailure($this, $e, $mailer, $mail);
}
}
}
$e = new FallbackMailerException('All mailers failed to send the message.');
$e->failures = $failures;
throw $e;
}
/**
* @return self
*/
public function addMailer(IMailer $mailer)
{
$this->mailers[] = $mailer;
return $this;
}
}
|