diff options
| author | Bharat Mediratta <bharat@menalto.com> | 2008-12-15 08:56:18 +0000 |
|---|---|---|
| committer | Bharat Mediratta <bharat@menalto.com> | 2008-12-15 08:56:18 +0000 |
| commit | 3b35e8b91ce94c292b46a296d034542ac5f0f6da (patch) | |
| tree | 7a1444b5e16475b66300be105b8fc39e5117c881 /kohana/helpers/email.php | |
| parent | 628058b4ed5aefb543ceb6ca9d3b87828c66bef1 (diff) | |
Refresh kohana from upstream svn trunk r3771.
During this process, remove a considerable number of files from kohana
that we will not be needing in Gallery3, including the following files
and directories:
kohana/application
kohana/example.htaccess
kohana/index.php
kohana/install.php
kohana/kohana.png
kohana/modules/archive
kohana/modules/auth
kohana/modules/flot
kohana/modules/gmaps
kohana/modules/kodoc
kohana/modules/payment
kohana/modules/smarty
kohana/modules/unit_test/i18n
kohana/modules/unit_test/tests/Example_Test.php
kohana/modules/unit_test/tests/Valid_Test.php
kohana/system/config/captcha.php
kohana/system/controllers/captcha.php
kohana/system/fonts
kohana/system/i18n
kohana/system/libraries/Calendar.php
kohana/system/libraries/Calendar_Event.php
kohana/system/libraries/Captcha.php
kohana/system/libraries/Tagcloud.php
kohana/system/vendor
kohana/system/views/pagination
kohana/system/views/kohana_calendar.php
Diffstat (limited to 'kohana/helpers/email.php')
| -rw-r--r-- | kohana/helpers/email.php | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/kohana/helpers/email.php b/kohana/helpers/email.php new file mode 100644 index 00000000..38eb47c7 --- /dev/null +++ b/kohana/helpers/email.php @@ -0,0 +1,181 @@ +<?php defined('SYSPATH') OR die('No direct access allowed.'); +/** + * Email helper class. + * + * $Id$ + * + * @package Core + * @author Kohana Team + * @copyright (c) 2007-2008 Kohana Team + * @license http://kohanaphp.com/license.html + */ +class email_Core { + + // SwiftMailer instance + protected static $mail; + + /** + * Creates a SwiftMailer instance. + * + * @param string DSN connection string + * @return object Swift object + */ + public static function connect($config = NULL) + { + if ( ! class_exists('Swift', FALSE)) + { + // Load SwiftMailer + require Kohana::find_file('vendor', 'swift/Swift'); + + // Register the Swift ClassLoader as an autoload + spl_autoload_register(array('Swift_ClassLoader', 'load')); + } + + // Load default configuration + ($config === NULL) and $config = Kohana::config('email'); + + switch ($config['driver']) + { + case 'smtp': + // Set port + $port = empty($config['options']['port']) ? NULL : (int) $config['options']['port']; + + if (empty($config['options']['encryption'])) + { + // No encryption + $encryption = Swift_Connection_SMTP::ENC_OFF; + } + else + { + // Set encryption + switch (strtolower($config['options']['encryption'])) + { + case 'tls': $encryption = Swift_Connection_SMTP::ENC_TLS; break; + case 'ssl': $encryption = Swift_Connection_SMTP::ENC_SSL; break; + } + } + + // Create a SMTP connection + $connection = new Swift_Connection_SMTP($config['options']['hostname'], $port, $encryption); + + // Do authentication, if part of the DSN + empty($config['options']['username']) or $connection->setUsername($config['options']['username']); + empty($config['options']['password']) or $connection->setPassword($config['options']['password']); + + if ( ! empty($config['options']['auth'])) + { + // Get the class name and params + list ($class, $params) = arr::callback_string($config['options']['auth']); + + if ($class === 'PopB4Smtp') + { + // Load the PopB4Smtp class manually, due to its odd filename + require Kohana::find_file('vendor', 'swift/Swift/Authenticator/$PopB4Smtp$'); + } + + // Prepare the class name for auto-loading + $class = 'Swift_Authenticator_'.$class; + + // Attach the authenticator + $connection->attachAuthenticator(($params === NULL) ? new $class : new $class($params[0])); + } + + // Set the timeout to 5 seconds + $connection->setTimeout(empty($config['options']['timeout']) ? 5 : (int) $config['options']['timeout']); + break; + case 'sendmail': + // Create a sendmail connection + $connection = new Swift_Connection_Sendmail + ( + empty($config['options']) ? Swift_Connection_Sendmail::AUTO_DETECT : $config['options'] + ); + + // Set the timeout to 5 seconds + $connection->setTimeout(5); + break; + default: + // Use the native connection + $connection = new Swift_Connection_NativeMail($config['options']); + break; + } + + // Create the SwiftMailer instance + return email::$mail = new Swift($connection); + } + + /** + * Send an email message. + * + * @param string|array recipient email (and name), or an array of To, Cc, Bcc names + * @param string|array sender email (and name) + * @param string message subject + * @param string message body + * @param boolean send email as HTML + * @return integer number of emails sent + */ + public static function send($to, $from, $subject, $message, $html = FALSE) + { + // Connect to SwiftMailer + (email::$mail === NULL) and email::connect(); + + // Determine the message type + $html = ($html === TRUE) ? 'text/html' : 'text/plain'; + + // Create the message + $message = new Swift_Message($subject, $message, $html, '8bit', 'utf-8'); + + if (is_string($to)) + { + // Single recipient + $recipients = new Swift_Address($to); + } + elseif (is_array($to)) + { + if (isset($to[0]) AND isset($to[1])) + { + // Create To: address set + $to = array('to' => $to); + } + + // Create a list of recipients + $recipients = new Swift_RecipientList; + + foreach ($to as $method => $set) + { + if ( ! in_array($method, array('to', 'cc', 'bcc'))) + { + // Use To: by default + $method = 'to'; + } + + // Create method name + $method = 'add'.ucfirst($method); + + if (is_array($set)) + { + // Add a recipient with name + $recipients->$method($set[0], $set[1]); + } + else + { + // Add a recipient without name + $recipients->$method($set); + } + } + } + + if (is_string($from)) + { + // From without a name + $from = new Swift_Address($from); + } + elseif (is_array($from)) + { + // From with a name + $from = new Swift_Address($from[0], $from[1]); + } + + return email::$mail->send($message, $recipients, $from); + } + +} // End email
\ No newline at end of file |
