Author: smukhina
Date: 2008-11-17 09:54:08 -0500 (Mon, 17 Nov 2008)
New Revision: 11843
Added:
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/images/favicon0.ico
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/EasySwift.php
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift.php
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Address.php
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/AddressContainer.php
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator.php
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/(a)PopB4Smtp.php
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/CRAMMD5.php
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/LOGIN.php
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/PLAIN.php
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/PopB4Smtp/
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/PopB4Smtp/Pop3Connection.php
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/BadResponseException.php
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/BatchMailer.php
Modified:
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/css/tools.css
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/send_mail.php
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/toggle.js
trunk/documentation/jbosstools-jdocbook-style/src/main/org/css/css/tools.css
trunk/documentation/jbosstools-jdocbook-style/src/main/org/css/script/send_mail.php
trunk/documentation/jbosstools-jdocbook-style/src/main/org/css/script/toggle.js
Log:
https://jira.jboss.org/jira/browse/RF-4644
Possibility to comment each particular page of html docs online, special form is
implemented
Modified: trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/css/tools.css
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/css/tools.css 2008-11-17
13:47:28 UTC (rev 11842)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/css/tools.css 2008-11-17
14:54:08 UTC (rev 11843)
@@ -121,8 +121,6 @@
display:block;
}
-
-
/* Feedback styles */
* html div#feedback-wrapper {position: absolute;
@@ -182,7 +180,7 @@
#feedback-state{
font-weight: bold;
height: 20px;
- width: 100%;
+ width: 508px;
line-height: 20px;
overflow: hidden;
}
@@ -217,7 +215,7 @@
color: #415973;
}
-#feedback-message{
+#message{
width: 200px;
height: 150px;
padding: 2px;
@@ -229,7 +227,7 @@
color: #415973;
}
-.feedback-textbox, #feedback-message{
+.feedback-textbox, #message{
background-color:#FFFFFF;
border:1px solid #A5ACB2;
padding:2px 1px 3px 5px;
Added: trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/images/favicon0.ico
===================================================================
(Binary files differ)
Property changes on:
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/images/favicon0.ico
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified:
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/send_mail.php
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/send_mail.php 2008-11-17
13:47:28 UTC (rev 11842)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/send_mail.php 2008-11-17
14:54:08 UTC (rev 11843)
@@ -6,58 +6,73 @@
$message_not_sent = "Error sending message!";
$message_success = "Message is sent successfully";
-//define pattern
+//get $_REQUEST Array
+$_REQUEST = array_map('trim', $_REQUEST);
+$email = $_REQUEST['email'];
+$name= $_REQUEST['name'];
+$subject = $_REQUEST['subject'];
+$message = $_REQUEST['message'];
+$path = $_REQUEST['path'];
+//define patterns
$email_pat =
"/^([A-z0-9|.|-|_]{2,256})(a)(([A-z0-9|.|-]{2,256}).([a-z]{2,4}))*$/";
$general_pat = "/^(\s)+$/";
-// clean up POST data
-$_POST = array_map('trim', $_POST);
-
+
// check if 'subject' field has been filled or not
-if(!$_POST['subject']){
- $subject="(no subject)";
+if(!$subject){
+ $subject="(no subject)";
}else{
- $subject = substr($POST['subject'], 0, 255);
- echo $subject;
+ $subject = substr(htmlentities($subject), 0, 255);
}
// check if 'name' field has been filled or not
-if(!$_POST['name']){
+if(!$name){
$name="(no name)";
}else{
- $name = substr($POST['name'], 0, 255);
+ $name = substr(htmlentities($name), 0, 255);
}
// check if 'message' field has been filled or not
-if(!$_POST['message'] || preg_match($general_pat, $_POST['message'])){
+if(!$message || preg_match($general_pat, $message)){
echo $message_error;
exit();
}else{
- $message = substr($_POST['message'], 0, 3000);
+ $message = "Feedback from ".$path."\n"."Message:
".substr(htmlentities($message), 0, 3000);
}
// check if 'email' field has been filled or not
-if(!$_POST['email']){
+if(!preg_match($email_pat, $email)){
echo $email_error;
exit();
-}elseif(!preg_match($email_pat, $_POST['email'])){
-echo $email_error;
- exit();
-}else{
- $email = substr($POST['email'], 0, 255);
}
-// get neccessary fields
-$to='smukhina(a)exadel.com';
-
// define MIME headers
$headers="MIME-Version 1.0"."\r\n"."Content-Type: text/plain;
charset=utf-8"."\r\n"."From: \"".$name."\"
"."<".$email.">"."Reply-to:
\"".$name."\" "."<".$email.">";
-// send email
-if(!@mail($to, $subject, $message, $headers)){
- echo $message_not_sent;
- exit();
-}else{
- echo $message_success;
- exit();
+ //Load in the files we'll need
+require_once "swift_lib/Swift.php";
+require_once "swift_lib/Swift/Connection/SMTP.php";
+require_once "swift_lib/Swift/Connection/Sendmail.php";
+try{
+//Start Swift
+$sendmail =& new Swift_Connection_Sendmail();
+$sendmail->setTimeout(3); //3 seconds
+
+//$swift =& new Swift(new Swift_Connection_SMTP("localhost"));
+
+$swift =& new Swift($sendmail);
+$sender =& new Swift_Address($email, $name);
+$me =& new Swift_Address("smukhina(a)exadel.com");
+$body =& new Swift_Message($subject, $message);
+ if($swift->send($body, $me, $sender)){
+ echo $message_success;
+ exit();
+ }else{
+ echo $message_not_sent;
+ exit();
+ }
+}catch (Swift_ConnectionException $e) {
+ echo "There was a problem communicating with SMTP: " . $e->getMessage();
+} catch (Swift_Message_MimeException $e) {
+ echo "There was an unexpected problem building the email:" .
$e->getMessage();
}
?>
\ No newline at end of file
Added:
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/EasySwift.php
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/EasySwift.php
(rev 0)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/EasySwift.php 2008-11-17
14:54:08 UTC (rev 11843)
@@ -0,0 +1,949 @@
+<?php
+
+/**
+ * EasySwift: Swift Mailer Facade
+ * Please read the LICENSE file
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ * @package EasySwift
+ * @version 1.0.3
+ * @license GNU Lesser General Public License
+ */
+
+require_once dirname(__FILE__) . "/Swift/ClassLoader.php";
+Swift_ClassLoader::load("Swift");
+Swift_ClassLoader::load("Swift_Connection_SMTP");
+Swift_ClassLoader::load("Swift_Connection_Sendmail");
+
+//Some constants for backwards compatibility with v2 code
+if (!defined("SWIFT_TLS")) define("SWIFT_TLS",
Swift_Connection_SMTP::ENC_TLS);
+if (!defined("SWIFT_SSL")) define("SWIFT_SSL",
Swift_Connection_SMTP::ENC_SSL);
+if (!defined("SWIFT_OPEN")) define("SWIFT_OPEN",
Swift_Connection_SMTP::ENC_OFF);
+if (!defined("SWIFT_SECURE_PORT")) define("SWIFT_SECURE_PORT",
Swift_Connection_SMTP::PORT_SECURE);
+if (!defined("SWIFT_DEFAULT_PORT")) define("SWIFT_DEFAULT_PORT",
Swift_Connection_SMTP::PORT_DEFAULT);
+
+/**
+ * EasySwift: Facade for Swift Mailer Version 3.
+ * Provides (most of) the API from older versions of Swift, wrapped around the new
version 3 API.
+ * Due to the popularity of the new API, EasySwift will not be around indefinitely.
+ * @package EasySwift
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ * @deprecated
+ */
+class EasySwift
+{
+ /**
+ * The instance of Swift this class wrappers
+ * @var Swift
+ */
+ public $swift = null;
+ /**
+ * This value becomes set to true when Swift fails
+ * @var boolean
+ */
+ public $failed = false;
+ /**
+ * The number of loaded plugins
+ * @var int
+ */
+ protected $pluginCount = 0;
+ /**
+ * An instance of Swift_Message
+ * @var Swift_Message
+ */
+ public $message = null;
+ /**
+ * An address list to send to (Cc, Bcc, To..)
+ * @var Swift_RecipientList
+ */
+ public $recipients = null;
+ /**
+ * If all recipients should get the same copy of the message, including headers
+ * This is already implied if any Cc or Bcc recipients are set
+ * @var boolean
+ */
+ protected $exactCopy = false;
+ /**
+ * If EasySwift should get rid of the message and recipients once it's done
sending
+ * @var boolean
+ */
+ protected $autoFlush = true;
+ /**
+ * A list of the IDs of all parts added to the message
+ * @var array
+ */
+ protected $partIds = array();
+ /**
+ * A list of all the IDs of the attachments add to the message
+ * @var array
+ */
+ protected $attachmentIds = array();
+ /**
+ * The last response received from the server
+ * @var string
+ */
+ public $lastResponse = "";
+ /**
+ * The 3 digit code in the last response received from the server
+ * @var int
+ */
+ public $responseCode = 0;
+ /**
+ * The list of errors handled at runtime
+ * @var array
+ */
+ public $errors = array();
+ /**
+ * The last error received
+ * @var string
+ */
+ public $lastError = null;
+
+ /**
+ * Constructor
+ * @param Swift_Connection The connection to use
+ * @param string The domain name of this server (not the SMTP server)
+ */
+ public function __construct(Swift_Connection $connection, $domain=null)
+ {
+ try {
+ $this->swift = new Swift($connection, $domain, Swift::ENABLE_LOGGING);
+ Swift_ClassLoader::load("Swift_Plugin_EasySwiftResponseTracker");
+ $this->swift->attachPlugin(new Swift_Plugin_EasySwiftResponseTracker($this),
"_ResponseTracker");
+ } catch (Swift_ConnectionException $e) {
+ $this->failed = true;
+ $this->setError("The connection failed to start. An exception was
thrown:<br />" . $e->getMessage());
+ }
+ $this->newMessage();
+ $this->newRecipientList();
+ }
+ /**
+ * Set an error message
+ * @param string Error message
+ */
+ public function setError($msg)
+ {
+ $this->errors[] = ($this->lastError = $msg);
+ }
+ /**
+ * Get the full list of errors
+ * @return array
+ */
+ public function getErrors()
+ {
+ return $this->errors;
+ }
+ /**
+ * Get the last error that occured
+ * @return string
+ */
+ public function getLastError()
+ {
+ return $this->lastError;
+ }
+ /**
+ * Clear the current list of errors
+ */
+ public function flushErrors()
+ {
+ $this->errors = null;
+ $this->errors = array();
+ }
+ /**
+ * Turn automatic flsuhing on or off.
+ * This in ON by deault. It removes the message and all parts after sending.
+ * @param boolean
+ */
+ public function autoFlush($flush=true)
+ {
+ $this->autoFlush = $flush;
+ }
+ /**
+ * Set the maximum size of the log
+ * @param int
+ */
+ public function setMaxLogSize($size)
+ {
+ $log = Swift_LogContainer::getLog();
+ $log->setMaxSize($size);
+ }
+ /**
+ * Turn logging on or off (saves memory)
+ * @param boolean
+ */
+ public function useLogging($use=true)
+ {
+ $log = Swift_LogContainer::getLog();
+ if ($use) $log->setLogLevel(Swift_Log::LOG_NETWORK);
+ else $log->setLogLevel(Swift_Log::LOG_NOTHING);
+ }
+ /**
+ * Enable line resizing (on 1000 by default)
+ * @param int The number of characters allowed on a line
+ */
+ public function useAutoLineResizing($size=1000)
+ {
+ $this->message->setLineWrap($size);
+ }
+ /**
+ * Dump the log contents
+ * @deprecated
+ */
+ public function getTransactions()
+ {
+ return $this->dumpLog();
+ }
+ /**
+ * Dump the contents of the log to the browser
+ * The log contains some < and > characters so you may need to view
source
+ * Note that this method dumps data to the browser, it does NOT return anything.
+ */
+ public function dumpLog()
+ {
+ $log = Swift_LogContainer::getLog();
+ $log->dump();
+ }
+ /**
+ * This method should be called if you do not wish to send messages in batch mode (i.e.
if all recipients should see each others' addresses)
+ * @param boolean If this mode should be used
+ */
+ public function useExactCopy($bool=true)
+ {
+ $this->exactCopy = $bool;
+ }
+ /**
+ * Reset the current message and start a fresh one
+ */
+ public function newMessage($msg=false)
+ {
+ if (!$msg) $msg = new Swift_Message();
+ $this->message = $msg;
+ $this->partIds = array();
+ $this->attachmentIds = array();
+ }
+ /**
+ * Clear out all message parts
+ * @return boolean
+ */
+ public function flushParts()
+ {
+ $success = true;
+ foreach ($this->partIds as $id)
+ {
+ try {
+ $this->message->detach($id);
+ } catch (Swift_Message_MimeException $e) {
+ $success = false;
+ $this->setError("A MIME part failed to detach due to the error:<br
/>" . $e->getMessage());
+ }
+ }
+ $this->partIds = array();
+ return $success;
+ }
+ /**
+ * Clear out all attachments
+ * @return boolean
+ */
+ public function flushAttachments()
+ {
+ $success = true;
+ foreach ($this->attachmentIds as $id)
+ {
+ try {
+ $this->message->detach($id);
+ } catch (Swift_Message_MimeException $e) {
+ $success = false;
+ $this->setError("An attachment failed to detach due to the error:<br
/>" . $e->getMessage());
+ }
+ }
+ $this->attachmentIds = array();
+ return $success;
+ }
+ /**
+ * Clear out all message headers
+ * @deprecated
+ */
+ public function flushHeaders()
+ {
+ $this->newMessage();
+ }
+ /**
+ * Reset the current list of recipients and start a new one
+ */
+ public function newRecipientList($list=false)
+ {
+ if (!$list) $list = new Swift_RecipientList();
+ $this->recipients = $list;
+ }
+ /**
+ * Check if Swift has failed or not
+ * This facade stops processing if so
+ * @return boolean
+ */
+ public function hasFailed()
+ {
+ return $this->failed;
+ }
+ /**
+ * Check if the current connection is open or not
+ * @return boolean
+ */
+ public function isConnected()
+ {
+ return (($this->swift !== null) &&
$this->swift->connection->isAlive());
+ }
+ /**
+ * Connect to the MTA if not already connected
+ */
+ public function connect()
+ {
+ if (!$this->isConnected())
+ {
+ try {
+ $this->swift->connect();
+ return true;
+ } catch (Swift_ConnectionException $e) {
+ $this->failed = true;
+ $this->setError("Swift failed to run the connection process:<br
/>" . $e->getMessage());
+ }
+ }
+ return false;
+ }
+ /**
+ * Perform the SMTP greeting process (don't do this unless you understand why
you're doing it)
+ */
+ public function handshake()
+ {
+ $this->swift->handshake();
+ }
+ /**
+ * Close the connection to the MTA
+ * @return boolean
+ */
+ public function close()
+ {
+ if ($this->isConnected())
+ {
+ try {
+ $this->swift->disconnect();
+ return true;
+ } catch (Swift_ConnectionException $e) {
+ $this->setError("Disconnect failed:<br />" .
$e->getMessage());
+ }
+ }
+ return false;
+ }
+ /**
+ * Send a command to Swift and get a response
+ * @param string The command to send (leave of CRLF)
+ * @return string
+ */
+ public function command($command)
+ {
+ if (substr($command, -2) == "\r\n") $command = substr($command, 0, -2);
+
+ try {
+ $rs = $this->swift->command($command);
+ return $rs->getString();
+ } catch (Swift_ConnectionException $e) {
+ $this->setError("Command failed:<br />" . $e->getMessage());
+ return false;
+ }
+ }
+ /**
+ * Add a new plugin to respond to events
+ * @param Swift_Events_Listener The plugin to load
+ * @param string The ID to identify the plugin by if needed
+ * @return string The ID of the plugin
+ */
+ public function loadPlugin(Swift_Events_Listener $plugin, $name=null)
+ {
+ $this->pluginCount++;
+ if (!$name) $name = "p" . $this->pluginCount;
+ $this->swift->attachPlugin($plugin, $name);
+ return $name;
+ }
+ /**
+ * Get a reference to the plugin identified by $name
+ * @param string the ID of the plugin
+ * @return Swift_Events_Listener
+ */
+ public function getPlugin($name)
+ {
+ try {
+ $plugin = $this->swift->getPlugin($name);
+ return $plugin;
+ } catch (Exception $e) {
+ return null;
+ }
+ }
+ /**
+ * Remove the plugin identified by $name
+ * @param string The ID of the plugin
+ * @return boolean
+ */
+ public function removePlugin($name)
+ {
+ try {
+ $this->swift->removePlugin($name);
+ return true;
+ } catch (Exception $e) {
+ return false;
+ }
+ }
+ /**
+ * Load in a new authentication mechanism for SMTP
+ * This needn't be called since Swift will locate any available in
Swift/Authenticator/*.php
+ * @param Swift_Authenticator The authentication mechanism to load
+ * @throws Exception If the wrong connection is used
+ */
+ public function loadAuthenticator(Swift_Authenticator $auth)
+ {
+ if (method_exists($this->swift->connection, "attachAuthenticator"))
+ {
+ $this->swift->connection->attachAuthenticator($auth);
+ }
+ else throw new Exception("SMTP authentication cannot be used with connection
class '" . get_class($this->connection) . "'. Swift_Connection_SMTP
is needed");
+ }
+ /**
+ * Authenticate with SMTP authentication
+ * @param string The SMTP username
+ * @param string The SMTP password
+ * @return boolean
+ * @throws Exception If the wrong connection is used
+ */
+ public function authenticate($username, $password)
+ {
+ if (method_exists($this->swift->connection, "runAuthenticators"))
+ {
+ try {
+ $this->swift->connection->runAuthenticators($username, $password,
$this->swift);
+ return true;
+ } catch (Swift_ConnectionException $e) {
+ $this->setError("Authentication failed:<br />" .
$e->getMessage());
+ return false;
+ }
+ }
+ else throw new Exception("SMTP authentication cannot be used with connection
class '" . get_class($this->connection) . "'. Swift_Connection_SMTP
is needed");
+ }
+ /**
+ * Turn a string representation of an email address into a Swift_Address object
+ * @paramm string The email address
+ * @return Swift_Address
+ */
+ public function stringToAddress($string)
+ {
+ $name = null;
+ $address = null;
+ // Foo Bar <foo@bar>
+ // or: "Foo Bar" <foo@bar>
+ // or: <foo@bar>
+ Swift_ClassLoader::load("Swift_Message_Encoder");
+ if (preg_match("/^\\s*(\"?)(.*?)\\1 *<(" .
Swift_Message_Encoder::CHEAP_ADDRESS_RE . ")>\\s*\$/", $string, $matches))
+ {
+ if (!empty($matches[2])) $name = $matches[2];
+ $address = $matches[3];
+ }
+ elseif (preg_match("/^\\s*" . Swift_Message_Encoder::CHEAP_ADDRESS_RE .
"\\s*\$/", $string))
+ {
+ $address = trim($string);
+ }
+ else return false;
+
+ $swift_address = new Swift_Address($address, $name);
+ return $swift_address;
+ }
+ /**
+ * Set the encoding used in the message header
+ * The encoding can be one of Q (quoted-printable) or B (base64)
+ * @param string The encoding to use
+ */
+ public function setHeaderEncoding($mode="B")
+ {
+ switch (strtoupper($mode))
+ {
+ case "Q": case "QP": case "QUOTED-PRINTABLE":
+ $this->message->headers->setEncoding("Q");
+ break;
+ default:
+ $this->message->headers->setEncoding("B");
+ }
+ }
+ /**
+ * Set the return path address (where bounces go to)
+ * @param mixed The address as a string or Swift_Address
+ */
+ public function setReturnPath($address)
+ {
+ return $this->message->setReturnPath($address);
+ }
+ /**
+ * Request for a read recipient to be sent to the reply-to address
+ * @param boolean
+ */
+ public function requestReadReceipt($request=true)
+ {
+ //$this->message->requestReadReceipt(true);
+ }
+ /**
+ * Set the message priority
+ * This is an integer between 1 (high) and 5 (low)
+ * @param int The level of priority to use
+ */
+ public function setPriority($priority)
+ {
+ $this->message->setPriority($priority);
+ }
+ /**
+ * Get the return-path address as a string
+ * @return string
+ */
+ public function getReturnPath()
+ {
+ try {
+ return $this->message->getReturnPath();
+ } catch (Swift_Message_MimeException $e) {
+ return false;
+ }
+ }
+ /**
+ * Set the reply-to header
+ * @param mixed The address replies come to. String, or Swift_Address, or an array of
either.
+ */
+ public function setReplyTo($address)
+ {
+ return $this->message->setReplyTo($address);
+ }
+ /**
+ * Get the reply-to address(es) as an array of strings
+ * @return array
+ */
+ public function getReplyTo()
+ {
+ try {
+ return $this->message->getReplyTo();
+ } catch (Swift_Message_MimeException $e) {
+ return false;
+ }
+ }
+ /**
+ * Add To: recipients to the email
+ * @param mixed To address(es)
+ * @return boolean
+ */
+ public function addTo($address)
+ {
+ return $this->addRecipients($address, "To");
+ }
+ /**
+ * Get an array of To addresses
+ * This currently returns an array of Swift_Address objects and may be simplified to an
array of strings in later versions
+ * @return array
+ */
+ public function getToAddresses()
+ {
+ return $this->recipients->getTo();
+ }
+ /**
+ * Clear out all To: recipients
+ */
+ public function flushTo()
+ {
+ $this->recipients->flushTo();
+ }
+ /**
+ * Add Cc: recipients to the email
+ * @param mixed Cc address(es)
+ * @return boolean
+ */
+ public function addCc($address)
+ {
+ return $this->addRecipients($address, "Cc");
+ }
+ /**
+ * Get an array of Cc addresses
+ * This currently returns an array of Swift_Address objects and may be simplified to an
array of strings in later versions
+ * @return array
+ */
+ public function getCcAddresses()
+ {
+ return $this->recipients->getCc();
+ }
+ /**
+ * Clear out all Cc: recipients
+ */
+ public function flushCc()
+ {
+ $this->recipients->flushCc();
+ }
+ /**
+ * Add Bcc: recipients to the email
+ * @param mixed Bcc address(es)
+ * @return boolean
+ */
+ public function addBcc($address)
+ {
+ return $this->addRecipients($address, "Bcc");
+ }
+ /**
+ * Get an array of Bcc addresses
+ * This currently returns an array of Swift_Address objects and may be simplified to an
array of strings in later versions
+ * @return array
+ */
+ public function getBccAddresses()
+ {
+ return $this->recipients->getBcc();
+ }
+ /**
+ * Clear out all Bcc: recipients
+ */
+ public function flushBcc()
+ {
+ $this->recipients->flushBcc();
+ }
+ /**
+ * Add recipients to the email
+ * @param mixed Address(es)
+ * @param string Recipient type (To, Cc, Bcc)
+ * @return boolean
+ */
+ protected function addRecipients($address, $type)
+ {
+ if (!in_array($type, array("To", "Cc", "Bcc"))) return
false;
+ $method = "add" . $type;
+
+ if ($address instanceof Swift_Address)
+ {
+ $this->recipients->$method($address);
+ return true;
+ }
+ else
+ {
+ $added = 0;
+ foreach ((array)$address as $addr)
+ {
+ if (is_array($addr))
+ {
+ $addr = array_values($addr);
+ if (count($addr) >= 2)
+ {
+ $this->recipients->$method($addr[0], $addr[1]);
+ $added++;
+ continue;
+ }
+ elseif (count($addr) == 1) $addr = $addr[0];
+ else continue;
+ }
+
+ if (is_string($addr))
+ {
+ $addr = $this->stringToAddress($addr);
+ $this->recipients->$method($addr);
+ $added++;
+ }
+ }
+ return ($added > 0);
+ }
+ }
+ /**
+ * Flush message, recipients and headers
+ */
+ public function flush()
+ {
+ $this->newMessage();
+ $this->newRecipientList();
+ }
+ /**
+ * Get a list of any addresses which have failed since instantiation
+ * @return array
+ */
+ public function getFailedRecipients()
+ {
+ $log = Swift_LogContainer::getLog();
+ return $log->getFailedRecipients();
+ }
+ /**
+ * Set the multipart MIME warning message (only seen by old clients)
+ * @param string The message to show
+ */
+ public function setMimeWarning($text)
+ {
+ $this->message->setMimeWarning($text);
+ }
+ /**
+ * Get the currently set MIME warning (seen by old clients)
+ * @return string
+ */
+ public function getMimeWarning()
+ {
+ return $this->message->getMimeWarning();
+ }
+ /**
+ * Set the charset of the charset to use in the message
+ * @param string The charset (e.g. utf-8, iso-8859-1 etc)
+ * @return boolean
+ */
+ public function setCharset($charset)
+ {
+ try {
+ $this->message->setCharset($charset);
+ return true;
+ } catch (Swift_Message_MimeException $e) {
+ $this->setError("Unable to set the message charset:<br />" .
$e->getMessage());
+ return false;
+ }
+ }
+ /**
+ * Get the charset of the charset to use in the message
+ * @return string
+ */
+ public function getCharset()
+ {
+ return $this->message->getCharset();
+ }
+ /**
+ * Add a new MIME part to the message
+ * @param mixed The part to add. If this is a string it's used as the body. If
it's an instance of Swift_Message_Part it's used as the entire part
+ * @param string Content-type, default text/plain
+ * @param string The encoding used (default is to let Swift decide)
+ * @param string The charset to use (default is to let swift decide)
+ */
+ public function addPart($body, $type="text/plain", $encoding=null,
$charset=null)
+ {
+ if ($body instanceof Swift_Message_Mime)
+ {
+ try {
+ $this->partIds[] = $this->message->attach($body);
+ } catch (Swift_Message_MimeException $e) {
+ $this->setError("A MIME part failed to attach:<br />" .
$e->getMessage());
+ return false;
+ }
+ }
+ else
+ {
+ try {
+ $this->partIds[] = $this->message->attach(new Swift_Message_Part($body,
$type, $encoding, $charset));
+ } catch (Swift_Message_MimeException $e) {
+ $this->setError("A MIME part failed to attach:<br />" .
$e->getMessage());
+ return false;
+ }
+ }
+ }
+ /**
+ * Add a new attachment to the message
+ * @param mixed The attachment to add. If this is a string it's used as the file
contents. If it's an instance of Swift_Message_Attachment it's used as the entire
part. If it's an instance of Swift_File it's used as the contents.
+ * @param string Filename, optional
+ * @param string Content-type. Default application/octet-stream
+ * @param string The encoding used (default is base64)
+ * @return boolean
+ */
+ public function addAttachment($data, $filename=null,
$type="application/octet-stream", $encoding=null)
+ {
+ if ($data instanceof Swift_Message_Mime)
+ {
+ try {
+ $this->attachmentIds[] = $this->message->attach($data);
+ } catch (Swift_Message_MimeException $e) {
+ $this->setError("An attachment failed to attach:<br />" .
$e->getMessage());
+ return false;
+ }
+ }
+ else
+ {
+ try {
+ $this->attachmentIds[] = $this->message->attach(new
Swift_Message_Attachment($data, $filename, $type, $encoding));
+ } catch (Swift_Message_MimeException $e) {
+ $this->setError("An attachment failed to attach<br />" .
$e->getMessage());
+ return false;
+ } catch (Swift_FileException $e) {
+ $this->setError("An attachment failed to attach:<br />" .
$e->getMessage());
+ return false;
+ }
+ }
+ return true;
+ }
+ /**
+ * Embed an image into the message and get the src attribute for HTML
+ * Returns FALSE on failure
+ * @param mixed The path to the image, a Swift_Message_Image object or a Swift_File
object
+ * @return string
+ */
+ public function addImage($input)
+ {
+ $ret = false;
+ if ($input instanceof Swift_Message_Image)
+ {
+ $ret = $this->message->attach($input);
+ $this->attachmentIds[] = $ret;
+ return $ret;
+ }
+ elseif ($input instanceof Swift_File)
+ {
+ try {
+ $ret = $this->message->attach(new Swift_Message_Image($input));
+ $this->attachmentIds[] = $ret;
+ return $ret;
+ } catch (Swift_Message_MimeException $e) {
+ $this->setError("An attachment failed to attach:<br />" .
$e->getMessage());
+ return false;
+ } catch (Swift_FileException $e) {
+ $this->setError("An attachment failed to attach:<br />" .
$e->getMessage());
+ return false;
+ }
+ }
+ else
+ {
+ try {
+ $ret = $this->message->attach(new Swift_Message_Image(new
Swift_File($input)));
+ $this->attachmentIds[] = $ret;
+ return $ret;
+ } catch (Swift_Message_MimeException $e) {
+ $this->setError("An attachment failed to attach:<br />" .
$e->getMessage());
+ return false;
+ } catch (Swift_FileException $e) {
+ $this->setError("An attachment failed to attach:<br />" .
$e->getMessage());
+ return false;
+ }
+ }
+ }
+ /**
+ * Embed an inline file into the message, such as a Image or MIDI file
+ * @param mixed The file contents, Swift_File object or Swift_Message_EmbeddedFile
object
+ * @param string The content-type of the file, optional
+ * @param string The filename to use, optional
+ * @param string the Content-ID to use, optional
+ * @return string
+ */
+ public function embedFile($data, $type="application/octet-stream",
$filename=null, $cid=null)
+ {
+ $ret = false;
+ if ($data instanceof Swift_Message_EmbeddedFile)
+ {
+ $ret = $this->message->attach($data);
+ $this->attachmentIds[] = $ret;
+ return $ret;
+ }
+ elseif ($data instanceof Swift_File)
+ {
+ try {
+ $ret = $this->message->attach(new Swift_Message_EmbeddedFile($data,
$filename, $type, $cid));
+ $this->attachmentIds[] = $ret;
+ return $ret;
+ } catch (Swift_Message_MimeException $e) {
+ $this->setError("An attachment failed to attach:<br />" .
$e->getMessage());
+ return false;
+ } catch (Swift_FileException $e) {
+ $this->setError("An attachment failed to attach:<br />" .
$e->getMessage());
+ return false;
+ }
+ }
+ else
+ {
+ try {
+ $ret = $this->message->attach(new Swift_Message_EmbeddedFile($data,
$filename, $type, $cid));
+ $this->attachmentIds[] = $ret;
+ return $ret;
+ } catch (Swift_Message_MimeException $e) {
+ $this->setError("An attachment failed to attach:<br />" .
$e->getMessage());
+ return false;
+ } catch (Swift_FileException $e) {
+ $this->setError("An attachment failed to attach:<br />" .
$e->getMessage());
+ return false;
+ }
+ }
+ }
+ /**
+ * Add headers to the message
+ * @param string The message headers to append, separated by CRLF
+ * @deprecated
+ */
+ public function addHeaders($string)
+ {
+ //Split at the line ending only if it's not followed by LWSP (as in, a full
header)
+ $headers = preg_split("~\r?\n(?![ \t])~", $string);
+ foreach ($headers as $header)
+ {
+ if (empty($header)) continue;
+ //Get the bit before the colon
+ $header_name = substr($header, 0, ($c_pos = strpos($header, ": ")));
+ // ... and trim it away
+ $header = substr($header, $c_pos+2);
+ //Try splitting at "; " for attributes
+ $attribute_pairs = preg_split("~\\s*;\\s+~", $header);
+ //The value would always be right after the colon
+ $header_value = $attribute_pairs[0];
+ $this->message->headers->set($header_name, $header_value);
+ unset($attribute_pairs[0]);
+ foreach ($attribute_pairs as $pair)
+ {
+ //Now try finding the attribute name, and it's value (removing quotes)
+ if (preg_match("~^(.*?)=(\"?)(.*?)\\2\\s*\$~", $pair, $matches))
+ {
+ try {
+ $this->message->headers->setAttribute($header_name, $matches[1],
$matches[3]);
+ } catch (Swift_Message_MimeException $e) {
+ $this->setError("There was a problem parsing or setting a header
attribute:<br />" . $e->getMessage());
+ //Ignored... it's EasySwift... C'mon ;)
+ }
+ }
+ }
+ }
+ }
+ /**
+ * Set a header in the message
+ * @param string The name of the header
+ * @param string The value of the header (without attributes)
+ * @see {addHeaderAttribute}
+ */
+ public function setHeader($name, $value)
+ {
+ $this->message->headers->set($name, $value);
+ }
+ /**
+ * Set an attribute in the message headers
+ * For example charset in Content-Type: text/html; charset=utf-8 set by
$swift->setHeaderAttribute("Content-Type", "charset",
"utf-8")
+ * @param string The name of the header
+ * @param string The name of the attribute
+ * @param string The value of the attribute
+ */
+ public function setHeaderAttribute($name, $attribute, $value)
+ {
+ if ($this->message->headers->has($name))
+ $this->message->headers->setAttribute($name, $attribute, $value);
+ }
+ /**
+ * Send an email to a number of recipients
+ * Returns the number of successful recipients, or FALSE on failure
+ * @param mixed The recipients to send to. One of string, array, 2-dimensional array
or Swift_Address
+ * @param mixed The address to send from. string or Swift_Address
+ * @param string The message subject
+ * @param string The message body, optional
+ * @return int
+ */
+ public function send($recipients, $from, $subject, $body=null)
+ {
+ $this->addTo($recipients);
+
+ $sender = false;
+ if (is_string($from)) $sender = $this->stringToAddress($from);
+ elseif ($from instanceof Swift_Address) $sender = $from;
+ if (!$sender) return false;
+
+ $this->message->setSubject($subject);
+ if ($body) $this->message->setBody($body);
+ try {
+ if (!$this->exactCopy && !$this->recipients->getCc() &&
!$this->recipients->getBcc())
+ {
+ $sent = $this->swift->batchSend($this->message, $this->recipients,
$sender);
+ }
+ else
+ {
+ $sent = $this->swift->send($this->message, $this->recipients,
$sender);
+ }
+ if ($this->autoFlush) $this->flush();
+ return $sent;
+ } catch (Swift_ConnectionException $e) {
+ $this->setError("Sending failed:<br />" . $e->getMessage());
+ return false;
+ }
+ }
+}
Added:
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Address.php
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Address.php
(rev 0)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Address.php 2008-11-17
14:54:08 UTC (rev 11843)
@@ -0,0 +1,104 @@
+<?php
+
+/**
+ * Swift Mailer Address Container (purely for rigid RFC conformance)
+ * Please read the LICENSE file
+ * @copyright Chris Corbyn <chris(a)w3style.co.uk>
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ * @package Swift
+ * @license GNU Lesser General Public License
+ */
+
+require_once dirname(__FILE__) . "/ClassLoader.php";
+Swift_ClassLoader::load("Swift_AddressContainer");
+
+/**
+ * Swift_Address is just a lone e-mail address reprsented as an object
+ * @package Swift
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ */
+class Swift_Address extends Swift_AddressContainer
+{
+ /**
+ * The e-mail address portion
+ * @var string
+ */
+ protected $address = null;
+ /**
+ * The personal name part
+ * @var string
+ */
+ protected $name = null;
+
+ /**
+ * Constructor
+ * @param string The address portion
+ * @param string The personal name, optional
+ */
+ public function __construct($address, $name=null)
+ {
+ $this->setAddress($address);
+ if ($name !== null) $this->setName($name);
+ }
+ /**
+ * Set the email address
+ * @param string
+ */
+ public function setAddress($address)
+ {
+ $this->address = trim((string)$address);
+ }
+ /**
+ * Get the address portion
+ * @return string
+ */
+ public function getAddress()
+ {
+ return $this->address;
+ }
+ /**
+ * Set the personal name
+ * @param string
+ */
+ public function setName($name)
+ {
+ if ($name !== null) $this->name = (string) $name;
+ else $this->name = null;
+ }
+ /**
+ * Get personal name portion
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+ /**
+ * Build the address the way it should be structured
+ * @param boolean If the string will be sent to a SMTP server as an envelope
+ * @return string
+ */
+ public function build($smtp=false)
+ {
+ if ($smtp)
+ {
+ return "<" . $this->address . ">";
+ }
+ else
+ {
+ if (($this->name !== null))
+ {
+ return $this->name . " <" . $this->address .
">";
+ }
+ else return $this->address;
+ }
+ }
+ /**
+ * PHP's casting conversion
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->build(true);
+ }
+}
Added:
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/AddressContainer.php
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/AddressContainer.php
(rev 0)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/AddressContainer.php 2008-11-17
14:54:08 UTC (rev 11843)
@@ -0,0 +1,8 @@
+<?php
+
+/**
+ * This is purely here for identify reasons on some subclasses
+ * @package Swift
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ */
+abstract class Swift_AddressContainer {}
Added:
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/(a)PopB4Smtp.php
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/(a)PopB4Smtp.php
(rev 0)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/(a)PopB4Smtp.php 2008-11-17
14:54:08 UTC (rev 11843)
@@ -0,0 +1,86 @@
+<?php
+
+/**
+ * Swift Mailer PopB4Smtp Authenticator Mechanism
+ * Please read the LICENSE file
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ * @package Swift_Authenticator
+ * @license GNU Lesser General Public License
+ */
+
+require_once dirname(__FILE__) . "/../ClassLoader.php";
+Swift_ClassLoader::load("Swift_Authenticator");
+Swift_ClassLoader::load("Swift_LogContainer");
+
+/**
+ * Swift PopB4Smtp Authenticator
+ * This form of authentication requires a quick connection to be made with a POP3 server
before finally connecting to SMTP
+ * @package Swift_Authenticator
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ */
+class Swift_Authenticator_PopB4Smtp implements Swift_Authenticator
+{
+ protected $connection = null;
+ /**
+ * Constructor
+ * @param mixed Swift_Authenticator_PopB4Smtp_Pop3Connection or string FQDN of POP3
server
+ * @param int The remote port number
+ * @param int The level of encryption to use
+ */
+ public function __construct($conn=null, $port=110, $encryption=0)
+ {
+ if (is_object($conn)) $this->connection = $conn;
+ else
+ {
+ Swift_ClassLoader::load("Swift_Authenticator_PopB4Smtp_Pop3Connection");
+ $this->connection = new Swift_Authenticator_PopB4Smtp_Pop3Connection($conn,
$port, $encryption);
+ }
+ }
+ /**
+ * Try to authenticate using the username and password
+ * Returns false on failure
+ * @param string The username
+ * @param string The password
+ * @param Swift The instance of Swift this authenticator is used in
+ * @return boolean
+ */
+ public function isAuthenticated($user, $pass, Swift $swift)
+ {
+ $log = Swift_LogContainer::getLog();
+ if ($log->hasLevel(Swift_Log::LOG_EVERYTHING))
+ {
+ $log->add("Trying POP3 Before SMTP authentication. Disconnecting from SMTP
first.");
+ }
+ $swift->disconnect();
+ try {
+ $this->connection->start();
+ $this->connection->assertOk($this->connection->read());
+ $this->connection->write("USER " . $user);
+ $this->connection->assertOk($this->connection->read());
+ $this->connection->write("PASS " . $pass);
+ $this->connection->assertOk($this->connection->read());
+ $this->connection->write("QUIT");
+ $this->connection->assertOk($this->connection->read());
+ $this->connection->stop();
+ } catch (Swift_ConnectionException $e) {
+ if ($log->hasLevel(Swift_Log::LOG_ERRORS))
+ {
+ $log->add("POP3 authentication failed.");
+ }
+ return false;
+ }
+ $options = $swift->getOptions();
+ $swift->setOptions($options | Swift::NO_POST_CONNECT);
+ $swift->connect();
+ $swift->setOptions($options);
+ return true;
+ }
+ /**
+ * Return the name of the AUTH extension this is for
+ * @return string
+ */
+ public function getAuthExtensionName()
+ {
+ return "*PopB4Smtp";
+ }
+}
Added:
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/CRAMMD5.php
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/CRAMMD5.php
(rev 0)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/CRAMMD5.php 2008-11-17
14:54:08 UTC (rev 11843)
@@ -0,0 +1,73 @@
+<?php
+
+/**
+ * Swift Mailer CRAM-MD5 Authenticator Mechanism
+ * Please read the LICENSE file
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ * @package Swift_Authenticator
+ * @license GNU Lesser General Public License
+ */
+
+require_once dirname(__FILE__) . "/../ClassLoader.php";
+Swift_ClassLoader::load("Swift_Authenticator");
+
+/**
+ * Swift CRAM-MD5 Authenticator
+ * This form of authentication is a secure challenge-response method
+ * @package Swift_Authenticator
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ */
+class Swift_Authenticator_CRAMMD5 implements Swift_Authenticator
+{
+ /**
+ * Try to authenticate using the username and password
+ * Returns false on failure
+ * @param string The username
+ * @param string The password
+ * @param Swift The instance of Swift this authenticator is used in
+ * @return boolean
+ */
+ public function isAuthenticated($user, $pass, Swift $swift)
+ {
+ try {
+ $encoded_challenge = substr($swift->command("AUTH CRAM-MD5",
334)->getString(), 4);
+ $challenge = base64_decode($encoded_challenge);
+ $response = base64_encode($user . " " . self::generateCRAMMD5Hash($pass,
$challenge));
+ $swift->command($response, 235);
+ } catch (Swift_ConnectionException $e) {
+ $swift->reset();
+ return false;
+ }
+ return true;
+ }
+ /**
+ * Return the name of the AUTH extension this is for
+ * @return string
+ */
+ public function getAuthExtensionName()
+ {
+ return "CRAM-MD5";
+ }
+ /**
+ * Generate a CRAM-MD5 hash from a challenge
+ * @param string The string to get a hash from
+ * @param string The challenge to use to make the hash
+ * @return string
+ */
+ public static function generateCRAMMD5Hash($password, $challenge)
+ {
+ if (strlen($password) > 64)
+ $password = pack('H32', md5($password));
+
+ if (strlen($password) < 64)
+ $password = str_pad($password, 64, chr(0));
+
+ $k_ipad = substr($password, 0, 64) ^ str_repeat(chr(0x36), 64);
+ $k_opad = substr($password, 0, 64) ^ str_repeat(chr(0x5C), 64);
+
+ $inner = pack('H32', md5($k_ipad.$challenge));
+ $digest = md5($k_opad.$inner);
+
+ return $digest;
+ }
+}
Added:
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/LOGIN.php
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/LOGIN.php
(rev 0)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/LOGIN.php 2008-11-17
14:54:08 UTC (rev 11843)
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Swift Mailer LOGIN Authenticator Mechanism
+ * Please read the LICENSE file
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ * @package Swift_Authenticator
+ * @license GNU Lesser General Public License
+ */
+
+require_once dirname(__FILE__) . "/../ClassLoader.php";
+Swift_ClassLoader::load("Swift_Authenticator");
+
+/**
+ * Swift LOGIN Authenticator
+ * @package Swift_Authenticator
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ */
+class Swift_Authenticator_LOGIN implements Swift_Authenticator
+{
+ /**
+ * Try to authenticate using the username and password
+ * Returns false on failure
+ * @param string The username
+ * @param string The password
+ * @param Swift The instance of Swift this authenticator is used in
+ * @return boolean
+ */
+ public function isAuthenticated($user, $pass, Swift $swift)
+ {
+ try {
+ $swift->command("AUTH LOGIN", 334);
+ $swift->command(base64_encode($user), 334);
+ $swift->command(base64_encode($pass), 235);
+ } catch (Swift_ConnectionException $e) {
+ $swift->reset();
+ return false;
+ }
+ return true;
+ }
+ /**
+ * Return the name of the AUTH extension this is for
+ * @return string
+ */
+ public function getAuthExtensionName()
+ {
+ return "LOGIN";
+ }
+}
Added:
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/PLAIN.php
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/PLAIN.php
(rev 0)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/PLAIN.php 2008-11-17
14:54:08 UTC (rev 11843)
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * Swift Mailer PLAIN Authenticator Mechanism
+ * Please read the LICENSE file
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ * @package Swift_Authenticator
+ * @license GNU Lesser General Public License
+ */
+
+require_once dirname(__FILE__) . "/../ClassLoader.php";
+Swift_ClassLoader::load("Swift_Authenticator");
+
+/**
+ * Swift PLAIN Authenticator
+ * This form of authentication is unbelievably insecure since everything is done
plain-text
+ * @package Swift_Authenticator
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ */
+class Swift_Authenticator_PLAIN implements Swift_Authenticator
+{
+ /**
+ * Try to authenticate using the username and password
+ * Returns false on failure
+ * @param string The username
+ * @param string The password
+ * @param Swift The instance of Swift this authenticator is used in
+ * @return boolean
+ */
+ public function isAuthenticated($user, $pass, Swift $swift)
+ {
+ try {
+ //The authorization string uses ascii null as a separator (See RFC 2554)
+ $credentials = base64_encode($user . chr(0) . $user . chr(0) . $pass);
+ $swift->command("AUTH PLAIN " . $credentials, 235);
+ } catch (Swift_ConnectionException $e) {
+ $swift->reset();
+ return false;
+ }
+ return true;
+ }
+ /**
+ * Return the name of the AUTH extension this is for
+ * @return string
+ */
+ public function getAuthExtensionName()
+ {
+ return "PLAIN";
+ }
+}
Added:
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/PopB4Smtp/Pop3Connection.php
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/PopB4Smtp/Pop3Connection.php
(rev 0)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator/PopB4Smtp/Pop3Connection.php 2008-11-17
14:54:08 UTC (rev 11843)
@@ -0,0 +1,176 @@
+<?php
+
+/**
+ * Swift Mailer PopB4Smtp Pop3 Connection component
+ * Please read the LICENSE file
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ * @package Swift_Authenticator
+ * @license GNU Lesser General Public License
+ */
+
+require_once dirname(__FILE__) . "/../../ClassLoader.php";
+
+/**
+ * Swift PopB4Smtp Authenticator Connection Component for the POP3 server
+ * Provides a I/O wrapper for the POP3 connection
+ * @package Swift_Authenticator
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ */
+class Swift_Authenticator_PopB4Smtp_Pop3Connection
+{
+ /**
+ * Constant for no encyption
+ */
+ const ENC_OFF = 0;
+ /**
+ * Constant for SSL encryption
+ */
+ const ENC_SSL = 1;
+ /**
+ * The server to connect to (IP or FQDN)
+ * @var string
+ */
+ protected $server = null;
+ /**
+ * The port to connect to
+ * @var int
+ */
+ protected $port = null;
+ /**
+ * The open connection resource from fsockopen()
+ * @var resource
+ */
+ protected $handle = null;
+
+ /**
+ * Constructor
+ * @param string The name of the POP3 server
+ * @param int The port for the POP3 service
+ * @param int The level of encryption to use
+ */
+ public function __construct($server="localhost", $port=110, $encryption=0)
+ {
+ $this->setServer($server);
+ $this->setPort($port);
+ $this->setEncryption($encryption);
+ }
+ /**
+ * Set the server name
+ * @param string The IP or FQDN of the POP3 server
+ */
+ public function setServer($server)
+ {
+ $this->server = (string) $server;
+ }
+ /**
+ * Set the port number for the POP3 server
+ * @param int
+ */
+ public function setPort($port)
+ {
+ $this->port = (int) $port;
+ }
+ /**
+ * Get the server name
+ * @return string
+ */
+ public function getServer()
+ {
+ return $this->server;
+ }
+ /**
+ * Get the remote port number
+ * @return int
+ */
+ public function getPort()
+ {
+ return $this->port;
+ }
+ /**
+ * Set the level of enryption to use (see ENC_OFF or ENC_SSL)
+ * @param int The constant for the encryption level
+ */
+ public function setEncryption($enc)
+ {
+ $this->encryption = (int) $enc;
+ }
+ /**
+ * Get the current encryption level set (corresponds to ENC_SSL or ENC_OFF)
+ * @return int
+ */
+ public function getEncryption()
+ {
+ return $this->encryption;
+ }
+ /**
+ * Check if the response is a +OK response
+ * @throws Swift_ConnectionException Upon bad response
+ */
+ public function assertOk($line)
+ {
+ if (substr($line, 0, 3) != "+OK")
+ {
+ Swift_ClassLoader::load("Swift_ConnectionException");
+ throw new Swift_ConnectionException("The POP3 server did not suitably respond
with a +OK response. " .
+ "[" . $line . "]");
+ }
+ }
+ /**
+ * Try to open the connection
+ * @throws Swift_ConnectionException If the connection will not start
+ */
+ public function start()
+ {
+ $url = $this->getServer();
+ if ($this->getEncryption() == self::ENC_SSL) $url = "ssl://" . $url;
+
+ if ((false === $this->handle = fsockopen($url, $this->getPort(), $errno,
$errstr, $timeout)))
+ {
+ Swift_ClassLoader::load("Swift_ConnectionException");
+ throw new Swift_ConnectionException("The POP3 connection failed to start. The
error string returned from fsockopen() is [" . $errstr . "] #" . $errno);
+ }
+ }
+ /**
+ * Try to close the connection
+ * @throws Swift_ConnectionException If the connection won't close
+ */
+ public function stop()
+ {
+ if ($this->handle !== null)
+ {
+ if (false === fclose($this->handle))
+ {
+ Swift_ClassLoader::load("Swift_ConnectionException");
+ throw new Swift_ConnectionException("The POP3 connection did not close
successfully.");
+ }
+ }
+ $this->handle = null;
+ }
+ /**
+ * Return the unread buffer contents
+ * @return string
+ * @throws Swift_ConnectionException If the connection will not allow data to be read
+ */
+ public function read()
+ {
+ if (false === $response = fgets($this->handle))
+ {
+ Swift_ClassLoader::load("Swift_ConnectionException");
+ throw new Swift_ConnectionException("Data could not be read from the POP3
connection.");
+ }
+ return trim($response);
+ }
+ /**
+ * Write a command to the remote socket
+ * @param string the command to send (without CRLF)
+ * @throws Swift_ConnectionException If the command cannot be written
+ */
+ public function write($command)
+ {
+ if (false !== fwrite($this->handle, $command . "\r\n"))
+ {
+ Swift_ClassLoader::load("Swift_ConnectionException");
+ throw new Swift_ConnectionException("Data could not be written to the POP3
connection.");
+ }
+ }
+}
Added:
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator.php
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator.php
(rev 0)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/Authenticator.php 2008-11-17
14:54:08 UTC (rev 11843)
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * Swift Mailer Authenticator Interface
+ * Please read the LICENSE file
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ * @package Swift_Authenticator
+ * @license GNU Lesser General Public License
+ */
+
+/**
+ * Swift Authenticator Interface
+ * Lists the methods all authenticators must implement
+ * @package Swift_Authenticator
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ */
+interface Swift_Authenticator
+{
+ /**
+ * Try to authenticate using the username and password
+ * Returns false on failure
+ * @param string The username
+ * @param string The password
+ * @param Swift The instance of Swift this authenticator is used in
+ * @return boolean
+ */
+ public function isAuthenticated($username, $password, Swift $instance);
+ /**
+ * Return the name of the AUTH extension this is for
+ * @return string
+ */
+ public function getAuthExtensionName();
+}
Added:
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/BadResponseException.php
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/BadResponseException.php
(rev 0)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/BadResponseException.php 2008-11-17
14:54:08 UTC (rev 11843)
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * Swift Bad Response Code Exception
+ * Please read the LICENSE file
+ * @copyright Chris Corbyn <chris(a)w3style.co.uk>
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ * @package Swift_Connection
+ * @license GNU Lesser General Public License
+ */
+
+require_once dirname(__FILE__) . "/ClassLoader.php";
+Swift_ClassLoader::load("Swift_ConnectionException");
+
+/**
+ * Swift Bad Response Exception
+ * @package Swift_Connection
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ */
+class Swift_BadResponseException extends Swift_ConnectionException
+{
+}
Added:
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/BatchMailer.php
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/BatchMailer.php
(rev 0)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift/BatchMailer.php 2008-11-17
14:54:08 UTC (rev 11843)
@@ -0,0 +1,229 @@
+<?php
+
+/**
+ * Handles batch mailing with Swift Mailer with fail-safe support.
+ * Restarts the connection if it dies and then continues where it left off.
+ * Please read the LICENSE file
+ * @copyright Chris Corbyn <chris(a)w3style.co.uk>
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ * @package Swift
+ * @license GNU Lesser General Public License
+ */
+class Swift_BatchMailer
+{
+ /**
+ * The current instance of Swift.
+ * @var Swift
+ */
+ protected $swift;
+ /**
+ * The maximum number of times a single recipient can be attempted before giving up.
+ * @var int
+ */
+ protected $maxTries = 2;
+ /**
+ * The number of seconds to sleep for if an error occurs.
+ * @var int
+ */
+ protected $sleepTime = 0;
+ /**
+ * Failed recipients (undeliverable)
+ * @var array
+ */
+ protected $failed = array();
+ /**
+ * The maximum number of successive failures before giving up.
+ * @var int
+ */
+ protected $maxFails = 0;
+ /**
+ * A temporary copy of some message headers.
+ * @var array
+ */
+ protected $headers = array();
+
+ /**
+ * Constructor.
+ * @param Swift The current instance of Swift
+ */
+ public function __construct(Swift $swift)
+ {
+ $this->setSwift($swift);
+ }
+ /**
+ * Set the current Swift instance.
+ * @param Swift The instance
+ */
+ public function setSwift(Swift $swift)
+ {
+ $this->swift = $swift;
+ }
+ /**
+ * Get the Swift instance which is running.
+ * @return Swift
+ */
+ public function getSwift()
+ {
+ return $this->swift;
+ }
+ /**
+ * Set the maximum number of times a single address is allowed to be retried.
+ * @param int The maximum number of tries.
+ */
+ public function setMaxTries($max)
+ {
+ $this->maxTries = abs($max);
+ }
+ /**
+ * Get the number of times a single address will be attempted in a batch.
+ * @return int
+ */
+ public function getMaxTries()
+ {
+ return $this->maxTries;
+ }
+ /**
+ * Set the amount of time to sleep for if an error occurs.
+ * @param int Number of seconds
+ */
+ public function setSleepTime($secs)
+ {
+ $this->sleepTime = abs($secs);
+ }
+ /**
+ * Get the amount of time to sleep for on errors.
+ * @return int
+ */
+ public function getSleepTime()
+ {
+ return $this->sleepTime;
+ }
+ /**
+ * Log a failed recipient.
+ * @param string The email address.
+ */
+ public function addFailedRecipient($address)
+ {
+ $this->failed[] = $address;
+ $this->failed = array_unique($this->failed);
+ }
+ /**
+ * Get all recipients which failed in this batch.
+ * @return array
+ */
+ public function getFailedRecipients()
+ {
+ return $this->failed;
+ }
+ /**
+ * Clear out the list of failed recipients.
+ */
+ public function flushFailedRecipients()
+ {
+ $this->failed = null;
+ $this->failed = array();
+ }
+ /**
+ * Set the maximum number of times an error can be thrown in succession and still be
hidden.
+ * @param int
+ */
+ public function setMaxSuccessiveFailures($fails)
+ {
+ $this->maxFails = abs($fails);
+ }
+ /**
+ * Get the maximum number of times an error can be thrown and still be hidden.
+ * @return int
+ */
+ public function getMaxSuccessiveFailures()
+ {
+ return $this->maxFails;
+ }
+ /**
+ * Restarts Swift forcibly.
+ */
+ protected function forceRestartSwift()
+ {
+ //Pre-empting problems trying to issue "QUIT" to a dead connection
+ $this->swift->connection->stop();
+ $this->swift->connection->start();
+ $this->swift->disconnect();
+ //Restart swift
+ $this->swift->connect();
+ }
+ /**
+ * Takes a temporary copy of original message headers in case an error occurs and they
need restoring.
+ * @param Swift_Message The message object
+ */
+ protected function copyMessageHeaders(&$message)
+ {
+ $this->headers["To"] = $message->headers->has("To") ?
+ $message->headers->get("To") : null;
+ $this->headers["Reply-To"] =
$message->headers->has("Reply-To") ?
+ $message->headers->get("Reply-To") : null;
+ $this->headers["Return-Path"] =
$message->headers->has("Return-Path") ?
+ $message->headers->get("Return-Path") : null;
+ $this->headers["From"] = $message->headers->has("From")
?
+ $message->headers->get("From") : null;
+ }
+ /**
+ * Restore message headers to original values in the event of a failure.
+ * @param Swift_Message The message
+ */
+ protected function restoreMessageHeaders(&$message)
+ {
+ foreach ($this->headers as $name => $value)
+ {
+ $message->headers->set($name, $value);
+ }
+ }
+ /**
+ * Run a batch send in a fail-safe manner.
+ * This operates as Swift::batchSend() except it deals with errors itself.
+ * @param Swift_Message To send
+ * @param Swift_RecipientList Recipients (To: only)
+ * @param Swift_Address The sender's address
+ * @return int The number sent to
+ */
+ public function send(Swift_Message $message, Swift_RecipientList $recipients, $sender)
+ {
+ $sent = 0;
+ $successive_fails = 0;
+
+ $it = $recipients->getIterator("to");
+ while ($it->hasNext())
+ {
+ $it->next();
+ $recipient = $it->getValue();
+ $tried = 0;
+ $loop = true;
+ while ($loop && $tried < $this->getMaxTries())
+ {
+ try {
+ $tried++;
+ $loop = false;
+ $this->copyMessageHeaders($message);
+ $sent += ($n = $this->swift->send($message, $recipient, $sender));
+ if (!$n) $this->addFailedRecipient($recipient->getAddress());
+ $successive_fails = 0;
+ } catch (Exception $e) {
+ $successive_fails++;
+ $this->restoreMessageHeaders($message);
+ if (($max = $this->getMaxSuccessiveFailures())
+ && $successive_fails > $max)
+ {
+ throw new Exception(
+ "Too many successive failures. BatchMailer is configured to allow no
more than " . $max .
+ " successive failures.");
+ }
+ //If an exception was thrown, give it one more go
+ if ($t = $this->getSleepTime()) sleep($t);
+ $this->forceRestartSwift();
+ $loop = true;
+ }
+ }
+ }
+
+ return $sent;
+ }
+}
Added:
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift.php
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift.php
(rev 0)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/swift_lib/Swift.php 2008-11-17
14:54:08 UTC (rev 11843)
@@ -0,0 +1,489 @@
+<?php
+
+/**
+ * Swift Mailer Core Component.
+ * Please read the LICENSE file
+ * @copyright Chris Corbyn <chris(a)w3style.co.uk>
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ * @package Swift
+ * @version 3.3.2
+ * @license GNU Lesser General Public License
+ */
+
+require_once dirname(__FILE__) . "/Swift/ClassLoader.php";
+Swift_ClassLoader::load("Swift_LogContainer");
+Swift_ClassLoader::load("Swift_ConnectionBase");
+Swift_ClassLoader::load("Swift_BadResponseException");
+Swift_ClassLoader::load("Swift_Cache");
+Swift_ClassLoader::load("Swift_CacheFactory");
+Swift_ClassLoader::load("Swift_Message");
+Swift_ClassLoader::load("Swift_RecipientList");
+Swift_ClassLoader::load("Swift_BatchMailer");
+Swift_ClassLoader::load("Swift_Events");
+Swift_ClassLoader::load("Swift_Events_Listener");
+
+/**
+ * Swift is the central component in the Swift library.
+ * @package Swift
+ * @author Chris Corbyn <chris(a)w3style.co.uk>
+ * @version 3.3.2
+ */
+class Swift
+{
+ /**
+ * The version number.
+ */
+ const VERSION = "3.3.2";
+ /**
+ * Constant to flag Swift not to try and connect upon instantiation
+ */
+ const NO_START = 2;
+ /**
+ * Constant to tell Swift not to perform the standard SMTP handshake upon connect
+ */
+ const NO_HANDSHAKE = 4;
+ /**
+ * Constant to ask Swift to start logging
+ */
+ const ENABLE_LOGGING = 8;
+ /**
+ * Constant to prevent postConnect() being run in the connection
+ */
+ const NO_POST_CONNECT = 16;
+ /**
+ * The connection object currently active
+ * @var Swift_Connection
+ */
+ public $connection = null;
+ /**
+ * The domain name of this server (should technically be a FQDN)
+ * @var string
+ */
+ protected $domain = null;
+ /**
+ * Flags to change the behaviour of Swift
+ * @var int
+ */
+ protected $options;
+ /**
+ * Loaded plugins, separated into containers according to roles
+ * @var array
+ */
+ protected $listeners = array();
+
+ /**
+ * Constructor
+ * @param Swift_Connection The connection object to deal with I/O
+ * @param string The domain name of this server (the client) as a FQDN
+ * @param int Optional flags
+ * @throws Swift_ConnectionException If a connection cannot be established or the
connection is behaving incorrectly
+ */
+ public function __construct(Swift_Connection $conn, $domain=false, $options=null)
+ {
+ $this->initializeEventListenerContainer();
+ $this->setOptions($options);
+
+ $log = Swift_LogContainer::getLog();
+
+ if ($this->hasOption(self::ENABLE_LOGGING) && !$log->isEnabled())
+ {
+ $log->setLogLevel(Swift_Log::LOG_NETWORK);
+ }
+
+ if (!$domain) $domain = !empty($_SERVER["SERVER_ADDR"]) ? "[" .
$_SERVER["SERVER_ADDR"] . "]" : "localhost.localdomain";
+
+ $this->setDomain($domain);
+ $this->connection = $conn;
+
+ if ($conn && !$this->hasOption(self::NO_START))
+ {
+ if ($log->hasLevel(Swift_Log::LOG_EVERYTHING)) $log->add("Trying to
connect...", Swift_Log::NORMAL);
+ $this->connect();
+ }
+ }
+ /**
+ * Populate the listeners array with the defined listeners ready for plugins
+ */
+ protected function initializeEventListenerContainer()
+ {
+ Swift_ClassLoader::load("Swift_Events_ListenerMapper");
+ foreach (Swift_Events_ListenerMapper::getMap() as $interface => $method)
+ {
+ if (!isset($this->listeners[$interface]))
+ $this->listeners[$interface] = array();
+ }
+ }
+ /**
+ * Add a new plugin to Swift
+ * Plugins must implement one or more event listeners
+ * @param Swift_Events_Listener The plugin to load
+ */
+ public function attachPlugin(Swift_Events_Listener $plugin, $id)
+ {
+ foreach (array_keys($this->listeners) as $key)
+ {
+ $listener = "Swift_Events_" . $key;
+ Swift_ClassLoader::load($listener);
+ if ($plugin instanceof $listener) $this->listeners[$key][$id] = $plugin;
+ }
+ }
+ /**
+ * Get an attached plugin if it exists
+ * @param string The id of the plugin
+ * @return Swift_Event_Listener
+ */
+ public function getPlugin($id)
+ {
+ foreach ($this->listeners as $type => $arr)
+ {
+ if (isset($arr[$id])) return $this->listeners[$type][$id];
+ }
+ return null; //If none found
+ }
+ /**
+ * Remove a plugin attached under the ID of $id
+ * @param string The ID of the plugin
+ */
+ public function removePlugin($id)
+ {
+ foreach ($this->listeners as $type => $arr)
+ {
+ if (isset($arr[$id]))
+ {
+ $this->listeners[$type][$id] = null;
+ unset($this->listeners[$type][$id]);
+ }
+ }
+ }
+ /**
+ * Send a new type of event to all objects which are listening for it
+ * @param Swift_Events The event to send
+ * @param string The type of event
+ */
+ public function notifyListeners($e, $type)
+ {
+ Swift_ClassLoader::load("Swift_Events_ListenerMapper");
+ if (!empty($this->listeners[$type]) && $notifyMethod =
Swift_Events_ListenerMapper::getNotifyMethod($type))
+ {
+ $e->setSwift($this);
+ foreach ($this->listeners[$type] as $k => $listener)
+ {
+ $listener->$notifyMethod($e);
+ }
+ }
+ else $e = null;
+ }
+ /**
+ * Check if an option flag has been set
+ * @param string Option name
+ * @return boolean
+ */
+ public function hasOption($option)
+ {
+ return ($this->options & $option);
+ }
+ /**
+ * Adjust the options flags
+ * E.g. $obj->setOptions(Swift::NO_START | Swift::NO_HANDSHAKE)
+ * @param int The bits to set
+ */
+ public function setOptions($options)
+ {
+ $this->options = (int) $options;
+ }
+ /**
+ * Get the current options set (as bits)
+ * @return int
+ */
+ public function getOptions()
+ {
+ return (int) $this->options;
+ }
+ /**
+ * Set the FQDN of this server as it will identify itself
+ * @param string The FQDN of the server
+ */
+ public function setDomain($name)
+ {
+ $this->domain = (string) $name;
+ }
+ /**
+ * Attempt to establish a connection with the service
+ * @throws Swift_ConnectionException If the connection cannot be established or behaves
oddly
+ */
+ public function connect()
+ {
+ $this->connection->start();
+ $greeting = $this->command("", 220);
+ if (!$this->hasOption(self::NO_HANDSHAKE))
+ {
+ $this->handshake($greeting);
+ }
+ Swift_ClassLoader::load("Swift_Events_ConnectEvent");
+ $this->notifyListeners(new Swift_Events_ConnectEvent($this->connection),
"ConnectListener");
+ }
+ /**
+ * Disconnect from the MTA
+ * @throws Swift_ConnectionException If the connection will not stop
+ */
+ public function disconnect()
+ {
+ $this->command("QUIT");
+ $this->connection->stop();
+ Swift_ClassLoader::load("Swift_Events_DisconnectEvent");
+ $this->notifyListeners(new Swift_Events_DisconnectEvent($this->connection),
"DisconnectListener");
+ }
+ /**
+ * Throws an exception if the response code wanted does not match the one returned
+ * @param Swift_Event_ResponseEvent The full response from the service
+ * @param int The 3 digit response code wanted
+ * @throws Swift_BadResponseException If the code does not match
+ */
+ protected function assertCorrectResponse(Swift_Events_ResponseEvent $response, $codes)
+ {
+ $codes = (array)$codes;
+ if (!in_array($response->getCode(), $codes))
+ {
+ $log = Swift_LogContainer::getLog();
+ $error = "Expected response code(s) [" . implode(", ", $codes)
. "] but got response [" . $response->getString() . "]";
+ if ($log->hasLevel(Swift_Log::LOG_ERRORS)) $log->add($error,
Swift_Log::ERROR);
+ throw new Swift_BadResponseException($error);
+ }
+ }
+ /**
+ * Have a polite greeting with the server and work out what it's capable of
+ * @param Swift_Events_ResponseEvent The initial service line respoonse
+ * @throws Swift_ConnectionException If conversation is not going very well
+ */
+ protected function handshake(Swift_Events_ResponseEvent $greeting)
+ {
+ if ($this->connection->getRequiresEHLO() || strpos($greeting->getString(),
"ESMTP"))
+ $this->setConnectionExtensions($this->command("EHLO " .
$this->domain, 250));
+ else $this->command("HELO " . $this->domain, 250);
+ //Connection might want to do something like authenticate now
+ if (!$this->hasOption(self::NO_POST_CONNECT))
$this->connection->postConnect($this);
+ }
+ /**
+ * Set the extensions which the service reports in the connection object
+ * @param Swift_Events_ResponseEvent The list of extensions as reported by the service
+ */
+ protected function setConnectionExtensions(Swift_Events_ResponseEvent $list)
+ {
+ $le = (strpos($list->getString(), "\r\n") !== false) ? "\r\n"
: "\n";
+ $list = explode($le, $list->getString());
+ for ($i = 1, $len = count($list); $i < $len; $i++)
+ {
+ $extension = substr($list[$i], 4);
+ $attributes = split("[ =]", $extension);
+ $this->connection->setExtension($attributes[0], (isset($attributes[1]) ?
array_slice($attributes, 1) : array()));
+ }
+ }
+ /**
+ * Execute a command against the service and get the response
+ * @param string The command to execute (leave off any CRLF!!!)
+ * @param int The code to check for in the response, if any. -1 indicates that no
response is wanted.
+ * @return Swift_Events_ResponseEvent The server's response (could be multiple
lines)
+ * @throws Swift_ConnectionException If a code was expected but does not match the one
returned
+ */
+ public function command($command, $code=null)
+ {
+ $log = Swift_LogContainer::getLog();
+ Swift_ClassLoader::load("Swift_Events_CommandEvent");
+ if ($command !== "")
+ {
+ $command_event = new Swift_Events_CommandEvent($command, $code);
+ $command = null; //For memory reasons
+ $this->notifyListeners($command_event, "BeforeCommandListener");
+ if ($log->hasLevel(Swift_Log::LOG_NETWORK) && $code != -1)
$log->add($command_event->getString(), Swift_Log::COMMAND);
+ $end = ($code != -1) ? "\r\n" : null;
+ $this->connection->write($command_event->getString(), $end);
+ $this->notifyListeners($command_event, "CommandListener");
+ }
+
+ if ($code == -1) return null;
+
+ Swift_ClassLoader::load("Swift_Events_ResponseEvent");
+ $response_event = new Swift_Events_ResponseEvent($this->connection->read());
+ $this->notifyListeners($response_event, "ResponseListener");
+ if ($log->hasLevel(Swift_Log::LOG_NETWORK))
$log->add($response_event->getString(), Swift_Log::RESPONSE);
+ if ($command !== "" && $command_event->getCode() !== null)
+ $this->assertCorrectResponse($response_event, $command_event->getCode());
+ return $response_event;
+ }
+ /**
+ * Reset a conversation which has gone badly
+ * @throws Swift_ConnectionException If the service refuses to reset
+ */
+ public function reset()
+ {
+ $this->command("RSET", 250);
+ }
+ /**
+ * Send a message to any number of recipients
+ * @param Swift_Message The message to send. This does not need to (and shouldn't
really) have any of the recipient headers set.
+ * @param mixed The recipients to send to. Can be a string, Swift_Address or
Swift_RecipientList. Note that all addresses apart from Bcc recipients will appear in the
message headers
+ * @param mixed The address to send the message from. Can either be a string or an
instance of Swift_Address.
+ * @return int The number of successful recipients
+ * @throws Swift_ConnectionException If sending fails for any reason.
+ */
+ public function send(Swift_Message $message, $recipients, $from)
+ {
+ Swift_ClassLoader::load("Swift_Message_Encoder");
+ if (is_string($recipients) && preg_match("/^" .
Swift_Message_Encoder::CHEAP_ADDRESS_RE . "\$/", $recipients))
+ {
+ $recipients = new Swift_Address($recipients);
+ }
+ elseif (!($recipients instanceof Swift_AddressContainer))
+ throw new Exception("The recipients parameter must either be a valid string
email address, ".
+ "an instance of Swift_RecipientList or an instance of Swift_Address.");
+
+ if (is_string($from) && preg_match("/^" .
Swift_Message_Encoder::CHEAP_ADDRESS_RE . "\$/", $from))
+ {
+ $from = new Swift_Address($from);
+ }
+ elseif (!($from instanceof Swift_Address))
+ throw new Exception("The sender parameter must either be a valid string email
address or ".
+ "an instance of Swift_Address.");
+
+ $log = Swift_LogContainer::getLog();
+
+ if (!$message->getEncoding() &&
!$this->connection->hasExtension("8BITMIME"))
+ {
+ $message->setEncoding("QP", true, true);
+ }
+
+ $list = $recipients;
+ if ($recipients instanceof Swift_Address)
+ {
+ $list = new Swift_RecipientList();
+ $list->addTo($recipients);
+ }
+
+ Swift_ClassLoader::load("Swift_Events_SendEvent");
+ $send_event = new Swift_Events_SendEvent($message, $list, $from, 0);
+
+ $this->notifyListeners($send_event, "BeforeSendListener");
+
+ $to = $cc = array();
+ if (!($has_from = $message->getFrom())) $message->setFrom($from);
+ if (!($has_return_path = $message->getReturnPath()))
$message->setReturnPath($from->build(true));
+ if (!($has_reply_to = $message->getReplyTo())) $message->setReplyTo($from);
+ if (!($has_message_id = $message->getId())) $message->generateId();
+
+ $this->command("MAIL FROM: " . $message->getReturnPath(true), 250);
+
+ $failed = 0;
+ $sent = 0;
+ $tmp_sent = 0;
+
+ $it = $list->getIterator("to");
+ while ($it->hasNext())
+ {
+ $it->next();
+ $address = $it->getValue();
+ $to[] = $address->build();
+ try {
+ $this->command("RCPT TO: " . $address->build(true), 250);
+ $tmp_sent++;
+ } catch (Swift_BadResponseException $e) {
+ $failed++;
+ $send_event->addFailedRecipient($address->getAddress());
+ if ($log->hasLevel(Swift_Log::LOG_FAILURES))
$log->addfailedRecipient($address->getAddress());
+ }
+ }
+ $it = $list->getIterator("cc");
+ while ($it->hasNext())
+ {
+ $it->next();
+ $address = $it->getValue();
+ $cc[] = $address->build();
+ try {
+ $this->command("RCPT TO: " . $address->build(true), 250);
+ $tmp_sent++;
+ } catch (Swift_BadResponseException $e) {
+ $failed++;
+ $send_event->addFailedRecipient($address->getAddress());
+ if ($log->hasLevel(Swift_Log::LOG_FAILURES))
$log->addfailedRecipient($address->getAddress());
+ }
+ }
+
+ if ($failed == (count($to) + count($cc)))
+ {
+ $this->reset();
+ $this->notifyListeners($send_event, "SendListener");
+ return 0;
+ }
+
+ if (!($has_to = $message->getTo()) && !empty($to))
$message->setTo($to);
+ if (!($has_cc = $message->getCc()) && !empty($cc))
$message->setCc($cc);
+
+ $this->command("DATA", 354);
+ $data = $message->build();
+
+ while (false !== $bytes = $data->read())
+ $this->command($bytes, -1);
+ if ($log->hasLevel(Swift_Log::LOG_NETWORK)) $log->add("<MESSAGE
DATA>", Swift_Log::COMMAND);
+ try {
+ $this->command("\r\n.", 250);
+ $sent += $tmp_sent;
+ } catch (Swift_BadResponseException $e) {
+ $failed += $tmp_sent;
+ }
+
+ $tmp_sent = 0;
+ $has_bcc = $message->getBcc();
+ $it = $list->getIterator("bcc");
+ while ($it->hasNext())
+ {
+ $it->next();
+ $address = $it->getValue();
+ if (!$has_bcc) $message->setBcc($address->build());
+ try {
+ $this->command("MAIL FROM: " . $message->getReturnPath(true),
250);
+ $this->command("RCPT TO: " . $address->build(true), 250);
+ $this->command("DATA", 354);
+ $data = $message->build();
+ while (false !== $bytes = $data->read())
+ $this->command($bytes, -1);
+ if ($log->hasLevel(Swift_Log::LOG_NETWORK)) $log->add("<MESSAGE
DATA>", Swift_Log::COMMAND);
+ $this->command("\r\n.", 250);
+ $sent++;
+ } catch (Swift_BadResponseException $e) {
+ $failed++;
+ $send_event->addFailedRecipient($address->getAddress());
+ if ($log->hasLevel(Swift_Log::LOG_FAILURES))
$log->addfailedRecipient($address->getAddress());
+ $this->reset();
+ }
+ }
+
+ $total = count($to) + count($cc) + count($list->getBcc());
+
+ $send_event->setNumSent($sent);
+ $this->notifyListeners($send_event, "SendListener");
+
+ if (!$has_return_path) $message->setReturnPath("");
+ if (!$has_from) $message->setFrom("");
+ if (!$has_to) $message->setTo("");
+ if (!$has_reply_to) $message->setReplyTo(null);
+ if (!$has_cc) $message->setCc(null);
+ if (!$has_bcc) $message->setBcc(null);
+ if (!$has_message_id) $message->setId(null);
+
+ if ($log->hasLevel(Swift_Log::LOG_NETWORK)) $log->add("Message sent to
" . $sent . "/" . $total . " recipients", Swift_Log::NORMAL);
+
+ return $sent;
+ }
+ /**
+ * Send a message to a batch of recipients.
+ * Unlike send() this method ignores Cc and Bcc recipients and does not reveal every
recipients' address in the headers
+ * @param Swift_Message The message to send (leave out the recipient headers unless you
are deliberately overriding them)
+ * @param Swift_RecipientList The addresses to send to
+ * @param Swift_Address The address the mail is from (sender)
+ * @return int The number of successful recipients
+ */
+ public function batchSend(Swift_Message $message, Swift_RecipientList $to, $from)
+ {
+ $batch = new Swift_BatchMailer($this);
+ return $batch->send($message, $to, $from);
+ }
+}
Modified: trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/toggle.js
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/toggle.js 2008-11-17
13:47:28 UTC (rev 11842)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/com/css/script/toggle.js 2008-11-17
14:54:08 UTC (rev 11843)
@@ -8,53 +8,10 @@
// send http request
function sendEmail(e){
- var
params='subject='+$F('subject')+'&message='+escape($F('message'))+'&name='+$F('name')+'&email='+$F('email');
- var xmlobj=new
Ajax.Updater('feedback-state','script/send_mail.php',{method:'post',parameters:
params});
// prevent form from submitting
Event.stop(e);
+ var
params='subject='+$F('subject')+'&message='+escape($F('message'))+'&name='+$F('name')+'&email='+$F('email')+'&path='+window.location;
+ var xmlobj=new
Ajax.Updater('feedback-state','script/send_mail.php',{method:'get',parameters:
params});
}
-function dbToggle(node, expandText, collapseText) {
- var dt = node.parentNode;
- if (dt.nodeName.toLowerCase() == 'dt') {
- var dd = dt.nextSibling;
-
- if (dd && dd.nodeName.toLowerCase() == 'dd') {
-
- if (dd.style && dd.style.display == 'none') {
- dd.style.display = '';
- node.innerHTML = collapseText;
- } else {
- dd.style.display = 'none';
- node.innerHTML = expandText;
- }
-
- }
-
- }
-
-}
-
-var toc = {
- expand: function(node) {
- toc.show(toc.findDD(node))
- toc.hide(node);
- toc.show(node.nextSibling);
- },
- collapse : function(node) {
- toc.hide(toc.findDD(node))
- toc.hide(node);
- toc.show(node.previousSibling);
- },
- findDD : function(node) {
- return node.parentNode.nextSibling;
- },
-
- hide: function(node) {
- node.style.display = "none";
- },
- show: function(node) {
- node.style.display = "";
- }
-};
\ No newline at end of file
Modified: trunk/documentation/jbosstools-jdocbook-style/src/main/org/css/css/tools.css
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/org/css/css/tools.css 2008-11-17
13:47:28 UTC (rev 11842)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/org/css/css/tools.css 2008-11-17
14:54:08 UTC (rev 11843)
@@ -172,7 +172,7 @@
#feedback-state{
font-weight: bold;
height: 20px;
- width: 100%;
+ width: 508px;
line-height: 20px;
overflow: hidden;
}
@@ -207,7 +207,7 @@
color: #415973;
}
-#feedback-message{
+#message{
width: 200px;
height: 150px;
padding: 2px;
@@ -219,7 +219,7 @@
color: #415973;
}
-.feedback-textbox, #feedback-message{
+.feedback-textbox, #message{
background-color:#FFFFFF;
border:1px solid #A5ACB2;
padding:2px 1px 3px 5px;
Modified:
trunk/documentation/jbosstools-jdocbook-style/src/main/org/css/script/send_mail.php
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/org/css/script/send_mail.php 2008-11-17
13:47:28 UTC (rev 11842)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/org/css/script/send_mail.php 2008-11-17
14:54:08 UTC (rev 11843)
@@ -6,58 +6,73 @@
$message_not_sent = "Error sending message!";
$message_success = "Message is sent successfully";
-//define pattern
+//get $_REQUEST Array
+$_REQUEST = array_map('trim', $_REQUEST);
+$email = $_REQUEST['email'];
+$name= $_REQUEST['name'];
+$subject = $_REQUEST['subject'];
+$message = $_REQUEST['message'];
+$path = $_REQUEST['path'];
+//define patterns
$email_pat =
"/^([A-z0-9|.|-|_]{2,256})(a)(([A-z0-9|.|-]{2,256}).([a-z]{2,4}))*$/";
$general_pat = "/^(\s)+$/";
-// clean up POST data
-$_POST = array_map('trim', $_POST);
-
+
// check if 'subject' field has been filled or not
-if(!$_POST['subject']){
- $subject="(no subject)";
+if(!$subject){
+ $subject="(no subject)";
}else{
- $subject = substr($POST['subject'], 0, 255);
- echo $subject;
+ $subject = substr(htmlentities($subject), 0, 255);
}
// check if 'name' field has been filled or not
-if(!$_POST['name']){
+if(!$name){
$name="(no name)";
}else{
- $name = substr($POST['name'], 0, 255);
+ $name = substr(htmlentities($name), 0, 255);
}
// check if 'message' field has been filled or not
-if(!$_POST['message'] || preg_match($general_pat, $_POST['message'])){
+if(!$message || preg_match($general_pat, $message)){
echo $message_error;
exit();
}else{
- $message = substr($_POST['message'], 0, 3000);
+ $message = "Feedback from ".$path."\n"."Message:
".substr(htmlentities($message), 0, 3000);
}
// check if 'email' field has been filled or not
-if(!$_POST['email']){
+if(!preg_match($email_pat, $email)){
echo $email_error;
exit();
-}elseif(!preg_match($email_pat, $_POST['email'])){
-echo $email_error;
- exit();
-}else{
- $email = substr($POST['email'], 0, 255);
}
-// get neccessary fields
-$to='smukhina(a)exadel.com';
-
// define MIME headers
$headers="MIME-Version 1.0"."\r\n"."Content-Type: text/plain;
charset=utf-8"."\r\n"."From: \"".$name."\"
"."<".$email.">"."Reply-to:
\"".$name."\" "."<".$email.">";
-// send email
-if(!@mail($to, $subject, $message, $headers)){
- echo $message_not_sent;
- exit();
-}else{
- echo $message_success;
- exit();
+ //Load in the files we'll need
+require_once "swift_lib/Swift.php";
+require_once "swift_lib/Swift/Connection/SMTP.php";
+require_once "swift_lib/Swift/Connection/Sendmail.php";
+try{
+//Start Swift
+$sendmail =& new Swift_Connection_Sendmail();
+$sendmail->setTimeout(3); //3 seconds
+
+//$swift =& new Swift(new Swift_Connection_SMTP("localhost"));
+
+$swift =& new Swift($sendmail);
+$sender =& new Swift_Address($email, $name);
+$me =& new Swift_Address("ggalkin(a)exadel.com");
+$body =& new Swift_Message($subject, $message);
+ if($swift->send($body, $me, $sender)){
+ echo $message_success;
+ exit();
+ }else{
+ echo $message_not_sent;
+ exit();
+ }
+}catch (Swift_ConnectionException $e) {
+ echo "There was a problem communicating with SMTP: " . $e->getMessage();
+} catch (Swift_Message_MimeException $e) {
+ echo "There was an unexpected problem building the email:" .
$e->getMessage();
}
?>
\ No newline at end of file
Modified: trunk/documentation/jbosstools-jdocbook-style/src/main/org/css/script/toggle.js
===================================================================
---
trunk/documentation/jbosstools-jdocbook-style/src/main/org/css/script/toggle.js 2008-11-17
13:47:28 UTC (rev 11842)
+++
trunk/documentation/jbosstools-jdocbook-style/src/main/org/css/script/toggle.js 2008-11-17
14:54:08 UTC (rev 11843)
@@ -8,11 +8,11 @@
// send http request
function sendEmail(e){
- var
params='subject='+$F('subject')+'&message='+escape($F('message'))+'&name='+$F('name')+'&email='+$F('email');
- var xmlobj=new
Ajax.Updater('feedback-state','script/send_mail.php',{method:'post',parameters:
params});
// prevent form from submitting
Event.stop(e);
+ var
params='subject='+$F('subject')+'&message='+escape($F('message'))+'&name='+$F('name')+'&email='+$F('email')+'&path='+window.location;
+ var xmlobj=new
Ajax.Updater('feedback-state','script/send_mail.php',{method:'get',parameters:
params});
}
function dbToggle(node, expandText, collapseText) {