diff options
author | Bharat Mediratta <bharat@menalto.com> | 2009-05-27 15:11:53 -0700 |
---|---|---|
committer | Bharat Mediratta <bharat@menalto.com> | 2009-05-27 15:11:53 -0700 |
commit | 12fe58d997d2066dc362fd393a18b4e5da190513 (patch) | |
tree | 3ad8e5afb77829e1541ec96d86785760d65c04ac /system/helpers/email.php | |
parent | 00f47d4ddddcd1902db817018dd79ac01bcc8e82 (diff) |
Rename 'kohana' to 'system' to conform to the Kohana filesystem layout. I'm comfortable with us not clearly drawing the distinction about the fact that it's Kohana.
Diffstat (limited to 'system/helpers/email.php')
-rw-r--r-- | system/helpers/email.php | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/system/helpers/email.php b/system/helpers/email.php new file mode 100644 index 00000000..fb222d0c --- /dev/null +++ b/system/helpers/email.php @@ -0,0 +1,181 @@ +<?php defined('SYSPATH') OR die('No direct access allowed.'); +/** + * Email helper class. + * + * $Id: email.php 3769 2008-12-15 00:48:56Z zombor $ + * + * @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 |