aboutsummaryrefslogtreecommitdiff
path: root/External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php
diff options
context:
space:
mode:
Diffstat (limited to 'External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php')
-rwxr-xr-xExternal/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php97
1 files changed, 97 insertions, 0 deletions
diff --git a/External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php b/External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php
new file mode 100755
index 0000000..e62491c
--- /dev/null
+++ b/External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php
@@ -0,0 +1,97 @@
+<?php
+
+/*
+ * This file is part of SwiftMailer.
+ * (c) 2004-2009 Chris Corbyn
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+//@require 'Swift/Transport/LoadBalancedTransport.php';
+//@require 'Swift/Mime/Message.php';
+
+/**
+ * Contains a list of redundant Transports so when one fails, the next is used.
+ * @package Swift
+ * @subpackage Transport
+ * @author Chris Corbyn
+ */
+class Swift_Transport_FailoverTransport
+ extends Swift_Transport_LoadBalancedTransport
+{
+
+ /**
+ * Registered transport curently used.
+ * @var Swift_Transport
+ * @access private
+ */
+ private $_currentTransport;
+
+ /**
+ * Creates a new FailoverTransport.
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ }
+
+ /**
+ * Send the given Message.
+ * Recipient/sender data will be retreived from the Message API.
+ * The return value is the number of recipients who were accepted for delivery.
+ * @param Swift_Mime_Message $message
+ * @param string[] &$failedRecipients to collect failures by-reference
+ * @return int
+ */
+ public function send(Swift_Mime_Message $message, &$failedRecipients = null)
+ {
+ $maxTransports = count($this->_transports);
+ $sent = 0;
+
+ for ($i = 0; $i < $maxTransports
+ && $transport = $this->_getNextTransport(); ++$i)
+ {
+ try
+ {
+ if (!$transport->isStarted())
+ {
+ $transport->start();
+ }
+
+ return $transport->send($message, $failedRecipients);
+ }
+ catch (Swift_TransportException $e)
+ {
+ $this->_killCurrentTransport();
+ }
+ }
+
+ if (count($this->_transports) == 0)
+ {
+ throw new Swift_TransportException(
+ 'All Transports in FailoverTransport failed, or no Transports available'
+ );
+ }
+
+ return $sent;
+ }
+
+ // -- Protected methods
+
+ protected function _getNextTransport()
+ {
+ if (!isset($this->_currentTransport))
+ {
+ $this->_currentTransport = parent::_getNextTransport();
+ }
+ return $this->_currentTransport;
+ }
+
+ protected function _killCurrentTransport()
+ {
+ $this->_currentTransport = null;
+ parent::_killCurrentTransport();
+ }
+
+}