eol-style set #3
authorRoland Häder <roland@mxchange.org>
Wed, 20 Apr 2011 04:22:48 +0000 (04:22 +0000)
committerRoland Häder <roland@mxchange.org>
Wed, 20 Apr 2011 04:22:48 +0000 (04:22 +0000)
.gitattributes
inc/classes/third_party/php_mailer/ChangeLog.txt
inc/classes/third_party/php_mailer/LICENSE
inc/classes/third_party/php_mailer/README
inc/classes/third_party/php_mailer/docs/extending.html
inc/classes/third_party/php_mailer/docs/faq.html
inc/classes/third_party/php_mailer/examples/contents.html
inc/classes/third_party/php_mailer/examples/index.html
inc/classes/third_party/php_mailer/test/phpmailer_test.php
inc/classes/third_party/php_mailer/test/phpunit.php
prop-set.sh

index 14d4ecc..f9dbe0d 100644 (file)
@@ -1,46 +1,40 @@
 * text=auto !eol
 /application-external.txt svneol=native#text/plain
-docs/COPYING -text
-docs/COPYING.documents -text
-docs/COPYING.software -text
-docs/NEWS -text
-docs/README -text
-docs/THANKS -text
 docs/TODOs.txt svneol=native#text/plain
-inc/.htaccess -text svneol=unset#text/plain
+inc/.htaccess svneol=native#text/plain
 inc/classes.php svneol=native#text/plain
-inc/classes/.htaccess -text svneol=unset#text/plain
-inc/classes/exceptions/.htaccess -text svneol=unset#text/plain
-inc/classes/exceptions/actions/.htaccess -text svneol=unset#text/plain
+inc/classes/.htaccess svneol=native#text/plain
+inc/classes/exceptions/.htaccess svneol=native#text/plain
+inc/classes/exceptions/actions/.htaccess svneol=native#text/plain
 inc/classes/exceptions/actions/class_InvalidActionException.php svneol=native#text/plain
-inc/classes/exceptions/auth/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/auth/.htaccess svneol=native#text/plain
 inc/classes/exceptions/auth/class_UserAuthorizationException.php svneol=native#text/plain
 inc/classes/exceptions/class_ svneol=native#text/plain
 inc/classes/exceptions/class_FrameworkException.php svneol=native#text/plain
-inc/classes/exceptions/compressor/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/compressor/.htaccess svneol=native#text/plain
 inc/classes/exceptions/compressor/class_MismatchingCompressorsException.php svneol=native#text/plain
-inc/classes/exceptions/controller/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/controller/.htaccess svneol=native#text/plain
 inc/classes/exceptions/controller/class_DefaultControllerException.php svneol=native#text/plain
 inc/classes/exceptions/controller/class_InvalidControllerException.php svneol=native#text/plain
-inc/classes/exceptions/criteria/.htaccess -text svneol=unset#text/plain
-inc/classes/exceptions/crypto/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/criteria/.htaccess svneol=native#text/plain
+inc/classes/exceptions/crypto/.htaccess svneol=native#text/plain
 inc/classes/exceptions/crypto/class_EncryptInvalidLengthException.php svneol=native#text/plain
 inc/classes/exceptions/crypto/class_EncryptMissingException.php svneol=native#text/plain
-inc/classes/exceptions/database/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/database/.htaccess svneol=native#text/plain
 inc/classes/exceptions/database/class_ svneol=native#text/plain
 inc/classes/exceptions/database/class_DatabaseException.php svneol=native#text/plain
-inc/classes/exceptions/database/general/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/database/general/.htaccess svneol=native#text/plain
 inc/classes/exceptions/database/general/class_SqlException.php svneol=native#text/plain
-inc/classes/exceptions/database/local_file/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/database/local_file/.htaccess svneol=native#text/plain
 inc/classes/exceptions/database/local_file/class_SavePathIsEmptyException.php svneol=native#text/plain
 inc/classes/exceptions/database/local_file/class_SavePathIsNoDirectoryException.php svneol=native#text/plain
 inc/classes/exceptions/database/local_file/class_SavePathReadProtectedException.php svneol=native#text/plain
 inc/classes/exceptions/database/local_file/class_SavePathWriteProtectedException.php svneol=native#text/plain
-inc/classes/exceptions/database/wrapper/.htaccess -text svneol=unset#text/plain
-inc/classes/exceptions/filter/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/database/wrapper/.htaccess svneol=native#text/plain
+inc/classes/exceptions/filter/.htaccess svneol=native#text/plain
 inc/classes/exceptions/filter/class_FilterChainException.php svneol=native#text/plain
 inc/classes/exceptions/filter/class_InvalidFilterChainException.php svneol=native#text/plain
-inc/classes/exceptions/helper/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/helper/.htaccess svneol=native#text/plain
 inc/classes/exceptions/helper/class_FormClosedException.php svneol=native#text/plain
 inc/classes/exceptions/helper/class_FormGroupClosedException.php svneol=native#text/plain
 inc/classes/exceptions/helper/class_FormOpenedException.php svneol=native#text/plain
@@ -50,7 +44,7 @@ inc/classes/exceptions/helper/class_HelperSubGroupAlreadyCreatedException.php sv
 inc/classes/exceptions/helper/class_InvalidFormNameException.php svneol=native#text/plain
 inc/classes/exceptions/helper/class_NoGroupOpenedException.php svneol=native#text/plain
 inc/classes/exceptions/helper/class_UserInstanceMissingException.php svneol=native#text/plain
-inc/classes/exceptions/io/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/io/.htaccess svneol=native#text/plain
 inc/classes/exceptions/io/class_DirPointerNotOpenedException.php svneol=native#text/plain
 inc/classes/exceptions/io/class_FileIoException.php svneol=native#text/plain
 inc/classes/exceptions/io/class_FileNotFoundException.php svneol=native#text/plain
@@ -63,14 +57,14 @@ inc/classes/exceptions/io/class_InvalidResourceException.php svneol=native#text/
 inc/classes/exceptions/io/class_PathIsEmptyException.php svneol=native#text/plain
 inc/classes/exceptions/io/class_PathIsNoDirectoryException.php svneol=native#text/plain
 inc/classes/exceptions/io/class_PathReadProtectedException.php svneol=native#text/plain
-inc/classes/exceptions/language/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/language/.htaccess svneol=native#text/plain
 inc/classes/exceptions/language/class_InvalidLanguagePathStringException.php svneol=native#text/plain
 inc/classes/exceptions/language/class_LanguagePathIsEmptyException.php svneol=native#text/plain
 inc/classes/exceptions/language/class_LanguagePathIsNoDirectoryException.php svneol=native#text/plain
 inc/classes/exceptions/language/class_LanguagePathReadProtectedException.php svneol=native#text/plain
 inc/classes/exceptions/language/class_MissingFileIoHandlerException.php svneol=native#text/plain
 inc/classes/exceptions/language/class_MissingLanguageHandlerException.php svneol=native#text/plain
-inc/classes/exceptions/main/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/main/.htaccess svneol=native#text/plain
 inc/classes/exceptions/main/class_AssertionException.php svneol=native#text/plain
 inc/classes/exceptions/main/class_ClassMismatchException.php svneol=native#text/plain
 inc/classes/exceptions/main/class_ClassNotFoundException.php svneol=native#text/plain
@@ -94,23 +88,23 @@ inc/classes/exceptions/main/class_NullPointerException.php svneol=native#text/pl
 inc/classes/exceptions/main/class_ResponseHeadersAlreadySentException.php svneol=native#text/plain
 inc/classes/exceptions/main/class_UnsupportedOperationException.php svneol=native#text/plain
 inc/classes/exceptions/main/class_VariableIsNotSetException.php svneol=native#text/plain
-inc/classes/exceptions/result/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/result/.htaccess svneol=native#text/plain
 inc/classes/exceptions/result/class_InvalidDatabaseResultException.php svneol=native#text/plain
 inc/classes/exceptions/result/class_ResultUpdateException.php svneol=native#text/plain
-inc/classes/exceptions/socket/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/socket/.htaccess svneol=native#text/plain
 inc/classes/exceptions/socket/class_InvalidServerSocketException.php svneol=native#text/plain
 inc/classes/exceptions/socket/class_InvalidSocketException.php svneol=native#text/plain
 inc/classes/exceptions/socket/class_NoSocketRegisteredException.php svneol=native#text/plain
 inc/classes/exceptions/socket/class_SocketShutdownException.php svneol=native#text/plain
-inc/classes/exceptions/stacker/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/stacker/.htaccess svneol=native#text/plain
 inc/classes/exceptions/stacker/class_AlreadyInitializedStackerException.php svneol=native#text/plain
 inc/classes/exceptions/stacker/class_EmptyStackerException.php svneol=native#text/plain
 inc/classes/exceptions/stacker/class_FullStackerException.php svneol=native#text/plain
 inc/classes/exceptions/stacker/class_NoStackerException.php svneol=native#text/plain
-inc/classes/exceptions/state/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/state/.htaccess svneol=native#text/plain
 inc/classes/exceptions/state/class_InvalidStateException.php svneol=native#text/plain
 inc/classes/exceptions/state/class_InvalidStateInstanceException.php svneol=native#text/plain
-inc/classes/exceptions/template/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/template/.htaccess svneol=native#text/plain
 inc/classes/exceptions/template/class_BasePathIsEmptyException.php svneol=native#text/plain
 inc/classes/exceptions/template/class_BasePathIsNoDirectoryException.php svneol=native#text/plain
 inc/classes/exceptions/template/class_BasePathReadProtectedException.php svneol=native#text/plain
@@ -118,59 +112,59 @@ inc/classes/exceptions/template/class_InvalidBasePathStringException.php svneol=
 inc/classes/exceptions/template/class_NoVariableException.php svneol=native#text/plain
 inc/classes/exceptions/template/class_UnexpectedTemplateTypeException.php svneol=native#text/plain
 inc/classes/exceptions/template/class_UnsupportedTemplateEngineException.php svneol=native#text/plain
-inc/classes/exceptions/user/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/user/.htaccess svneol=native#text/plain
 inc/classes/exceptions/user/class_AccountPasswordMismatchException.php svneol=native#text/plain
 inc/classes/exceptions/user/class_UserEmailMissingException.php svneol=native#text/plain
 inc/classes/exceptions/user/class_UserPasswordMismatchException.php svneol=native#text/plain
 inc/classes/exceptions/user/class_UsernameMissingException.php svneol=native#text/plain
-inc/classes/exceptions/xml/.htaccess -text svneol=unset#text/plain
+inc/classes/exceptions/xml/.htaccess svneol=native#text/plain
 inc/classes/exceptions/xml/class_InvalidXmlNodeException.php svneol=native#text/plain
 inc/classes/exceptions/xml/class_XmlNodeMismatchException.php svneol=native#text/plain
 inc/classes/exceptions/xml/class_XmlParserException.php svneol=native#text/plain
-inc/classes/interfaces/.htaccess -text svneol=unset#text/plain
-inc/classes/interfaces/actions/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/.htaccess svneol=native#text/plain
+inc/classes/interfaces/actions/.htaccess svneol=native#text/plain
 inc/classes/interfaces/actions/class_PerformableAction.php svneol=native#text/plain
-inc/classes/interfaces/actions/commands/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/actions/commands/.htaccess svneol=native#text/plain
 inc/classes/interfaces/actions/commands/class_Commandable.php svneol=native#text/plain
-inc/classes/interfaces/application/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/application/.htaccess svneol=native#text/plain
 inc/classes/interfaces/application/class_ManageableApplication.php svneol=native#text/plain
-inc/classes/interfaces/auth/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/auth/.htaccess svneol=native#text/plain
 inc/classes/interfaces/auth/class_Authorizeable.php svneol=native#text/plain
-inc/classes/interfaces/cache/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/cache/.htaccess svneol=native#text/plain
 inc/classes/interfaces/cache/class_Cacheable.php svneol=native#text/plain
-inc/classes/interfaces/captcha/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/captcha/.htaccess svneol=native#text/plain
 inc/classes/interfaces/captcha/class_SolveableCaptcha.php svneol=native#text/plain
 inc/classes/interfaces/class_ svneol=native#text/plain
 inc/classes/interfaces/class_FrameworkInterface.php svneol=native#text/plain
-inc/classes/interfaces/compressor/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/compressor/.htaccess svneol=native#text/plain
 inc/classes/interfaces/compressor/class_Compressor.php svneol=native#text/plain
-inc/classes/interfaces/controller/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/controller/.htaccess svneol=native#text/plain
 inc/classes/interfaces/controller/class_Controller.php svneol=native#text/plain
-inc/classes/interfaces/criteria/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/criteria/.htaccess svneol=native#text/plain
 inc/classes/interfaces/criteria/class_Criteria.php svneol=native#text/plain
-inc/classes/interfaces/criteria/extended/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/criteria/extended/.htaccess svneol=native#text/plain
 inc/classes/interfaces/criteria/extended/class_LocalSearchCriteria.php svneol=native#text/plain
 inc/classes/interfaces/criteria/extended/class_LocalUpdateCriteria.php svneol=native#text/plain
 inc/classes/interfaces/criteria/extended/class_StoreableCriteria.php svneol=native#text/plain
-inc/classes/interfaces/crypto/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/crypto/.htaccess svneol=native#text/plain
 inc/classes/interfaces/crypto/class_Cryptable.php svneol=native#text/plain
-inc/classes/interfaces/database/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/database/.htaccess svneol=native#text/plain
 inc/classes/interfaces/database/class_FrameworkDatabaseInterface.php svneol=native#text/plain
 inc/classes/interfaces/database/class_Updateable.php svneol=native#text/plain
-inc/classes/interfaces/database/frontend/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/database/frontend/.htaccess svneol=native#text/plain
 inc/classes/interfaces/database/frontend/class_DatabaseFrontendInterface.php svneol=native#text/plain
-inc/classes/interfaces/database/middleware/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/database/middleware/.htaccess svneol=native#text/plain
 inc/classes/interfaces/database/middleware/class_DatabaseConnector.php svneol=native#text/plain
-inc/classes/interfaces/database/wrapper/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/database/wrapper/.htaccess svneol=native#text/plain
 inc/classes/interfaces/database/wrapper/class_BookablePointsWrapper.php svneol=native#text/plain
 inc/classes/interfaces/database/wrapper/class_ManageableAccountWrapper.php svneol=native#text/plain
-inc/classes/interfaces/debug/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/debug/.htaccess svneol=native#text/plain
 inc/classes/interfaces/debug/class_Debugger.php svneol=native#text/plain
-inc/classes/interfaces/discovery/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/discovery/.htaccess svneol=native#text/plain
 inc/classes/interfaces/discovery/class_Discoverable.php svneol=native#text/plain
-inc/classes/interfaces/filter/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/filter/.htaccess svneol=native#text/plain
 inc/classes/interfaces/filter/class_Filterable.php svneol=native#text/plain
-inc/classes/interfaces/helper/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/helper/.htaccess svneol=native#text/plain
 inc/classes/interfaces/helper/class_HelpableLogin.php svneol=native#text/plain
 inc/classes/interfaces/helper/class_HelpableTemplate.php svneol=native#text/plain
 inc/classes/interfaces/helper/class_Helper.php svneol=native#text/plain
@@ -178,94 +172,94 @@ inc/classes/interfaces/helper/login/.htaccess svneol=native#text/plain
 inc/classes/interfaces/helper/login/class_HelpableLogin.php svneol=native#text/plain
 inc/classes/interfaces/helper/template/.htaccess svneol=native#text/plain
 inc/classes/interfaces/helper/template/class_HelpableTemplate.php svneol=native#text/plain
-inc/classes/interfaces/io/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/io/.htaccess svneol=native#text/plain
 inc/classes/interfaces/io/class_Streamable.php svneol=native#text/plain
-inc/classes/interfaces/io/file/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/io/file/.htaccess svneol=native#text/plain
 inc/classes/interfaces/io/file/class_FileInputStreamer.php svneol=native#text/plain
 inc/classes/interfaces/io/file/class_FileOutputStreamer.php svneol=native#text/plain
-inc/classes/interfaces/io/output/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/io/output/.htaccess svneol=native#text/plain
 inc/classes/interfaces/io/output/class_OutputStreamer.php svneol=native#text/plain
-inc/classes/interfaces/language/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/language/.htaccess svneol=native#text/plain
 inc/classes/interfaces/language/class_ManageableLanguage.php svneol=native#text/plain
-inc/classes/interfaces/login/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/login/.htaccess svneol=native#text/plain
 inc/classes/interfaces/login/class_LoginableUser.php svneol=native#text/plain
-inc/classes/interfaces/mailer/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/mailer/.htaccess svneol=native#text/plain
 inc/classes/interfaces/mailer/class_DeliverableMail.php svneol=native#text/plain
-inc/classes/interfaces/menu/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/menu/.htaccess svneol=native#text/plain
 inc/classes/interfaces/menu/class_RenderableMenu.php svneol=native#text/plain
-inc/classes/interfaces/parser/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/parser/.htaccess svneol=native#text/plain
 inc/classes/interfaces/parser/class_Parseable.php svneol=native#text/plain
-inc/classes/interfaces/points/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/points/.htaccess svneol=native#text/plain
 inc/classes/interfaces/points/class_BookablePoints.php svneol=native#text/plain
-inc/classes/interfaces/reader/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/reader/.htaccess svneol=native#text/plain
 inc/classes/interfaces/reader/class_ReadableNews.php svneol=native#text/plain
-inc/classes/interfaces/registration/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/registration/.htaccess svneol=native#text/plain
 inc/classes/interfaces/registration/class_UserRegister.php svneol=native#text/plain
-inc/classes/interfaces/registry/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/registry/.htaccess svneol=native#text/plain
 inc/classes/interfaces/registry/class_Register.php svneol=native#text/plain
 inc/classes/interfaces/registry/class_Registerable.php svneol=native#text/plain
-inc/classes/interfaces/registry/socket/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/registry/socket/.htaccess svneol=native#text/plain
 inc/classes/interfaces/registry/socket/class_RegisterableSocket.php svneol=native#text/plain
-inc/classes/interfaces/request/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/request/.htaccess svneol=native#text/plain
 inc/classes/interfaces/request/class_Requestable.php svneol=native#text/plain
-inc/classes/interfaces/resolver/.htaccess -text svneol=unset#text/plain
-inc/classes/interfaces/resolver/actions/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/resolver/.htaccess svneol=native#text/plain
+inc/classes/interfaces/resolver/actions/.htaccess svneol=native#text/plain
 inc/classes/interfaces/resolver/actions/class_ActionResolver.php svneol=native#text/plain
 inc/classes/interfaces/resolver/class_Resolver.php svneol=native#text/plain
-inc/classes/interfaces/resolver/commands/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/resolver/commands/.htaccess svneol=native#text/plain
 inc/classes/interfaces/resolver/commands/class_CommandResolver.php svneol=native#text/plain
-inc/classes/interfaces/resolver/controller/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/resolver/controller/.htaccess svneol=native#text/plain
 inc/classes/interfaces/resolver/controller/class_ControllerResolver.php svneol=native#text/plain
-inc/classes/interfaces/resolver/state/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/resolver/state/.htaccess svneol=native#text/plain
 inc/classes/interfaces/resolver/state/class_StateResolver.php svneol=native#text/plain
-inc/classes/interfaces/response/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/response/.htaccess svneol=native#text/plain
 inc/classes/interfaces/response/class_Responseable.php svneol=native#text/plain
-inc/classes/interfaces/result/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/result/.htaccess svneol=native#text/plain
 inc/classes/interfaces/result/class_SearchableResult.php svneol=native#text/plain
 inc/classes/interfaces/result/class_UpdateableResult.php svneol=native#text/plain
-inc/classes/interfaces/stacker/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/stacker/.htaccess svneol=native#text/plain
 inc/classes/interfaces/stacker/class_Stackable.php svneol=native#text/plain
-inc/classes/interfaces/state/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/state/.htaccess svneol=native#text/plain
 inc/classes/interfaces/state/class_Stateable.php svneol=native#text/plain
-inc/classes/interfaces/streams/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/streams/.htaccess svneol=native#text/plain
 inc/classes/interfaces/streams/class_Streamable.php svneol=native#text/plain
-inc/classes/interfaces/streams/crypto/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/streams/crypto/.htaccess svneol=native#text/plain
 inc/classes/interfaces/streams/crypto/class_EncryptableStream.php svneol=native#text/plain
 inc/classes/interfaces/streams/input/.htaccess svneol=native#text/plain
 inc/classes/interfaces/streams/input/class_InputStreamable.php svneol=native#text/plain
 inc/classes/interfaces/streams/output/.htaccess svneol=native#text/plain
 inc/classes/interfaces/streams/output/class_OutputStreamable.php svneol=native#text/plain
-inc/classes/interfaces/template/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/template/.htaccess svneol=native#text/plain
 inc/classes/interfaces/template/class_CompileableTemplate.php svneol=native#text/plain
 inc/classes/interfaces/template/view/class_ViewHelper.php svneol=native#text/plain
-inc/classes/interfaces/user/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/user/.htaccess svneol=native#text/plain
 inc/classes/interfaces/user/class_ManageableAccount.php svneol=native#text/plain
-inc/classes/interfaces/user/extended/.htaccess -text svneol=unset#text/plain
+inc/classes/interfaces/user/extended/.htaccess svneol=native#text/plain
 inc/classes/interfaces/user/extended/class_ManageableGuest.php svneol=native#text/plain
 inc/classes/interfaces/user/extended/class_ManageableMember.php svneol=native#text/plain
-inc/classes/main/.htaccess -text svneol=unset#text/plain
-inc/classes/main/actions/.htaccess -text svneol=unset#text/plain
+inc/classes/main/.htaccess svneol=native#text/plain
+inc/classes/main/actions/.htaccess svneol=native#text/plain
 inc/classes/main/actions/class_ svneol=native#text/plain
 inc/classes/main/actions/class_BaseAction.php svneol=native#text/plain
-inc/classes/main/actions/post_registration/.htaccess -text svneol=unset#text/plain
+inc/classes/main/actions/post_registration/.htaccess svneol=native#text/plain
 inc/classes/main/actions/post_registration/class_LoginAfterRegistrationAction.php svneol=native#text/plain
-inc/classes/main/actions/web/.htaccess -text svneol=unset#text/plain
+inc/classes/main/actions/web/.htaccess svneol=native#text/plain
 inc/classes/main/actions/web/class_WebLoginProfileAction.php svneol=native#text/plain
-inc/classes/main/application/.htaccess -text svneol=unset#text/plain
+inc/classes/main/application/.htaccess svneol=native#text/plain
 inc/classes/main/application/class_BaseApplication.php svneol=native#text/plain
-inc/classes/main/auth/.htaccess -text svneol=unset#text/plain
+inc/classes/main/auth/.htaccess svneol=native#text/plain
 inc/classes/main/auth/class_CookieAuth.php svneol=native#text/plain
-inc/classes/main/cache/.htaccess -text svneol=unset#text/plain
+inc/classes/main/cache/.htaccess svneol=native#text/plain
 inc/classes/main/cache/class_MemoryCache.php svneol=native#text/plain
 inc/classes/main/class_ svneol=native#text/plain
 inc/classes/main/class_BaseFrameworkSystem.php svneol=native#text/plain
 inc/classes/main/class_FrameworkArrayObject.php svneol=native#text/plain
-inc/classes/main/commands/.htaccess -text svneol=unset#text/plain
+inc/classes/main/commands/.htaccess svneol=native#text/plain
 inc/classes/main/commands/class_ svneol=native#text/plain
 inc/classes/main/commands/class_BaseCommand.php svneol=native#text/plain
-inc/classes/main/commands/image/.htaccess -text svneol=unset#text/plain
+inc/classes/main/commands/image/.htaccess svneol=native#text/plain
 inc/classes/main/commands/image/class_ImageCodeCaptchaCommand.php svneol=native#text/plain
-inc/classes/main/commands/web/.htaccess -text svneol=unset#text/plain
+inc/classes/main/commands/web/.htaccess svneol=native#text/plain
 inc/classes/main/commands/web/class_ svneol=native#text/plain
 inc/classes/main/commands/web/class_WebConfirmCommand.php svneol=native#text/plain
 inc/classes/main/commands/web/class_WebDoFormCommand.php svneol=native#text/plain
@@ -279,32 +273,32 @@ inc/classes/main/commands/web/class_WebProblemCommand.php svneol=native#text/pla
 inc/classes/main/commands/web/class_WebRegisterCommand.php svneol=native#text/plain
 inc/classes/main/commands/web/class_WebResendLinkCommand.php svneol=native#text/plain
 inc/classes/main/commands/web/class_WebStatusCommand.php svneol=native#text/plain
-inc/classes/main/compressor/.htaccess -text svneol=unset#text/plain
+inc/classes/main/compressor/.htaccess svneol=native#text/plain
 inc/classes/main/compressor/class_Bzip2Compressor.php svneol=native#text/plain
 inc/classes/main/compressor/class_GzipCompressor.php svneol=native#text/plain
 inc/classes/main/compressor/class_NullCompressor.php svneol=native#text/plain
-inc/classes/main/console/.htaccess -text svneol=unset#text/plain
+inc/classes/main/console/.htaccess svneol=native#text/plain
 inc/classes/main/console/class_ConsoleTools.php svneol=native#text/plain
-inc/classes/main/container/.htaccess -text svneol=unset#text/plain
+inc/classes/main/container/.htaccess svneol=native#text/plain
 inc/classes/main/container/class_ svneol=native#text/plain
 inc/classes/main/container/class_BaseContainer.php svneol=native#text/plain
-inc/classes/main/container/socket/.htaccess -text svneol=unset#text/plain
+inc/classes/main/container/socket/.htaccess svneol=native#text/plain
 inc/classes/main/container/socket/class_SocketContainer.php svneol=native#text/plain
-inc/classes/main/controller/.htaccess -text svneol=unset#text/plain
-inc/classes/main/controller/captcha/.htaccess -text svneol=unset#text/plain
+inc/classes/main/controller/.htaccess svneol=native#text/plain
+inc/classes/main/controller/captcha/.htaccess svneol=native#text/plain
 inc/classes/main/controller/captcha/class_ImageCodeCaptchaController.php svneol=native#text/plain
 inc/classes/main/controller/class_ svneol=native#text/plain
 inc/classes/main/controller/class_BaseController.php svneol=native#text/plain
-inc/classes/main/controller/console/.htaccess -text svneol=unset#text/plain
+inc/classes/main/controller/console/.htaccess svneol=native#text/plain
 inc/classes/main/controller/console/class_ConsoleDefaultController.php svneol=native#text/plain
 inc/classes/main/controller/console/class_ConsoleDefaultNewsController.php svneol=native#text/plain
-inc/classes/main/controller/form/.htaccess -text svneol=unset#text/plain
+inc/classes/main/controller/form/.htaccess svneol=native#text/plain
 inc/classes/main/controller/form/class_WebDoFormController.php svneol=native#text/plain
-inc/classes/main/controller/image/.htaccess -text svneol=unset#text/plain
+inc/classes/main/controller/image/.htaccess svneol=native#text/plain
 inc/classes/main/controller/image/class_ImageDefaultController.php svneol=native#text/plain
-inc/classes/main/controller/login/.htaccess -text svneol=unset#text/plain
+inc/classes/main/controller/login/.htaccess svneol=native#text/plain
 inc/classes/main/controller/login/class_WebLoginAreaController.php svneol=native#text/plain
-inc/classes/main/controller/web/.htaccess -text svneol=unset#text/plain
+inc/classes/main/controller/web/.htaccess svneol=native#text/plain
 inc/classes/main/controller/web/class_ svneol=native#text/plain
 inc/classes/main/controller/web/class_WebConfirmController.php svneol=native#text/plain
 inc/classes/main/controller/web/class_WebDefaultController.php svneol=native#text/plain
@@ -316,88 +310,88 @@ inc/classes/main/controller/web/class_WebLogoutDoneController.php svneol=native#
 inc/classes/main/controller/web/class_WebProblemController.php svneol=native#text/plain
 inc/classes/main/controller/web/class_WebRegisterController.php svneol=native#text/plain
 inc/classes/main/controller/web/class_WebStatusController.php svneol=native#text/plain
-inc/classes/main/criteria/.htaccess -text svneol=unset#text/plain
+inc/classes/main/criteria/.htaccess svneol=native#text/plain
 inc/classes/main/criteria/class_BaseCriteria.php svneol=native#text/plain
-inc/classes/main/criteria/dataset/.htaccess -text svneol=unset#text/plain
+inc/classes/main/criteria/dataset/.htaccess svneol=native#text/plain
 inc/classes/main/criteria/dataset/class_DataSetCriteria.php svneol=native#text/plain
-inc/classes/main/criteria/search/.htaccess -text svneol=unset#text/plain
+inc/classes/main/criteria/search/.htaccess svneol=native#text/plain
 inc/classes/main/criteria/search/class_SearchCriteria.php svneol=native#text/plain
-inc/classes/main/criteria/update/.htaccess -text svneol=unset#text/plain
+inc/classes/main/criteria/update/.htaccess svneol=native#text/plain
 inc/classes/main/criteria/update/class_UpdateCriteria.php svneol=native#text/plain
-inc/classes/main/crypto/.htaccess -text svneol=unset#text/plain
+inc/classes/main/crypto/.htaccess svneol=native#text/plain
 inc/classes/main/crypto/class_CryptoHelper.php svneol=native#text/plain
-inc/classes/main/database/.htaccess -text svneol=unset#text/plain
+inc/classes/main/database/.htaccess svneol=native#text/plain
 inc/classes/main/database/class_ svneol=native#text/plain
 inc/classes/main/database/class_BaseDatabaseFrontend.php svneol=native#text/plain
 inc/classes/main/database/class_BaseDatabaseWrapper.php svneol=native#text/plain
-inc/classes/main/database/databases/.htaccess -text svneol=unset#text/plain
+inc/classes/main/database/databases/.htaccess svneol=native#text/plain
 inc/classes/main/database/databases/class_LocalFileDatabase.php svneol=native#text/plain
-inc/classes/main/database/wrapper/.htaccess -text svneol=unset#text/plain
+inc/classes/main/database/wrapper/.htaccess svneol=native#text/plain
 inc/classes/main/database/wrapper/class_NewsDatabaseWrapper.php svneol=native#text/plain
 inc/classes/main/database/wrapper/class_PaymentsDatabaseWrapper.php svneol=native#text/plain
 inc/classes/main/database/wrapper/class_UserDatabaseWrapper.php svneol=native#text/plain
 inc/classes/main/database/wrapper/class_UserPointsDatabaseWrapper.php svneol=native#text/plain
-inc/classes/main/debug/.htaccess -text svneol=unset#text/plain
+inc/classes/main/debug/.htaccess svneol=native#text/plain
 inc/classes/main/debug/class_DebugConsoleOutput.php svneol=native#text/plain
 inc/classes/main/debug/class_DebugErrorLogOutput.php svneol=native#text/plain
 inc/classes/main/debug/class_DebugWebOutput.php svneol=native#text/plain
-inc/classes/main/decorator/.htaccess -text svneol=unset#text/plain
+inc/classes/main/decorator/.htaccess svneol=native#text/plain
 inc/classes/main/decorator/class_BaseDecorator.php svneol=native#text/plain
-inc/classes/main/decorator/template/.htaccess -text svneol=unset#text/plain
+inc/classes/main/decorator/template/.htaccess svneol=native#text/plain
 inc/classes/main/decorator/template/class_XmlRewriterTemplateDecorator.php svneol=native#text/plain
-inc/classes/main/decorator/xml/.htaccess -text svneol=unset#text/plain
+inc/classes/main/decorator/xml/.htaccess svneol=native#text/plain
 inc/classes/main/decorator/xml/class_XmlCompactorDecorator.php svneol=native#text/plain
-inc/classes/main/discovery/.htaccess -text svneol=unset#text/plain
+inc/classes/main/discovery/.htaccess svneol=native#text/plain
 inc/classes/main/discovery/class_ svneol=native#text/plain
 inc/classes/main/discovery/class_BaseDiscovery.php svneol=native#text/plain
-inc/classes/main/discovery/payment/.htaccess -text svneol=unset#text/plain
+inc/classes/main/discovery/payment/.htaccess svneol=native#text/plain
 inc/classes/main/discovery/payment/class_LocalPaymentDiscovery.php svneol=native#text/plain
-inc/classes/main/factories/.htaccess -text svneol=unset#text/plain
-inc/classes/main/factories/cache/.htaccess -text svneol=unset#text/plain
+inc/classes/main/factories/.htaccess svneol=native#text/plain
+inc/classes/main/factories/cache/.htaccess svneol=native#text/plain
 inc/classes/main/factories/cache/class_CacheFactory.php svneol=native#text/plain
 inc/classes/main/factories/class_BaseFactory.php svneol=native#text/plain
-inc/classes/main/factories/database/.htaccess -text svneol=unset#text/plain
+inc/classes/main/factories/database/.htaccess svneol=native#text/plain
 inc/classes/main/factories/database/class_DatabaseWrapperFactory.php svneol=native#text/plain
-inc/classes/main/factories/objects/.htaccess -text svneol=unset#text/plain
+inc/classes/main/factories/objects/.htaccess svneol=native#text/plain
 inc/classes/main/factories/objects/class_ObjectFactory.php svneol=native#text/plain
-inc/classes/main/factories/registry/.htaccess -text svneol=unset#text/plain
+inc/classes/main/factories/registry/.htaccess svneol=native#text/plain
 inc/classes/main/factories/registry/class_SocketRegistryFactory.php svneol=native#text/plain
-inc/classes/main/factories/web/.htaccess -text svneol=unset#text/plain
+inc/classes/main/factories/web/.htaccess svneol=native#text/plain
 inc/classes/main/factories/web/class_WebNewsFactory.php svneol=native#text/plain
 inc/classes/main/factories/xml/.htaccess svneol=native#text/plain
 inc/classes/main/factories/xml/class_XmlTemplateEngineFactory.php svneol=native#text/plain
-inc/classes/main/filter/.htaccess -text svneol=unset#text/plain
-inc/classes/main/filter/auth/.htaccess -text svneol=unset#text/plain
+inc/classes/main/filter/.htaccess svneol=native#text/plain
+inc/classes/main/filter/auth/.htaccess svneol=native#text/plain
 inc/classes/main/filter/auth/class_UserAuthFilter.php svneol=native#text/plain
-inc/classes/main/filter/change/.htaccess -text svneol=unset#text/plain
+inc/classes/main/filter/change/.htaccess svneol=native#text/plain
 inc/classes/main/filter/change/class_EmailChangeFilter.php svneol=native#text/plain
 inc/classes/main/filter/change/class_PasswordChangeFilter.php svneol=native#text/plain
-inc/classes/main/filter/checkboxes/.htaccess -text svneol=unset#text/plain
+inc/classes/main/filter/checkboxes/.htaccess svneol=native#text/plain
 inc/classes/main/filter/checkboxes/class_RulesAcceptedFilter.php svneol=native#text/plain
 inc/classes/main/filter/class_ svneol=native#text/plain
 inc/classes/main/filter/class_BaseFilter.php svneol=native#text/plain
 inc/classes/main/filter/class_BaseFilterDecorator.php svneol=native#text/plain
 inc/classes/main/filter/class_FilterChain.php svneol=native#text/plain
-inc/classes/main/filter/crypto/.htaccess -text svneol=unset#text/plain
+inc/classes/main/filter/crypto/.htaccess svneol=native#text/plain
 inc/classes/main/filter/crypto/class_CaptchaEncryptFilter.php svneol=native#text/plain
-inc/classes/main/filter/decorator/.htaccess -text svneol=unset#text/plain
-inc/classes/main/filter/guest/.htaccess -text svneol=unset#text/plain
+inc/classes/main/filter/decorator/.htaccess svneol=native#text/plain
+inc/classes/main/filter/guest/.htaccess svneol=native#text/plain
 inc/classes/main/filter/guest/class_UserNameIsGuestFilter.php svneol=native#text/plain
-inc/classes/main/filter/news/.htaccess -text svneol=unset#text/plain
+inc/classes/main/filter/news/.htaccess svneol=native#text/plain
 inc/classes/main/filter/news/class_NewsDownloadFilter.php svneol=native#text/plain
 inc/classes/main/filter/news/class_NewsProcessFilter.php svneol=native#text/plain
-inc/classes/main/filter/null/.htaccess -text svneol=unset#text/plain
+inc/classes/main/filter/null/.htaccess svneol=native#text/plain
 inc/classes/main/filter/null/class_NullFilter.php svneol=native#text/plain
-inc/classes/main/filter/payment/.htaccess -text svneol=unset#text/plain
+inc/classes/main/filter/payment/.htaccess svneol=native#text/plain
 inc/classes/main/filter/payment/class_PaymentDiscoveryFilter.php svneol=native#text/plain
-inc/classes/main/filter/update/.htaccess -text svneol=unset#text/plain
+inc/classes/main/filter/update/.htaccess svneol=native#text/plain
 inc/classes/main/filter/update/class_UserStatusConfimedUpdateFilter.php svneol=native#text/plain
 inc/classes/main/filter/update/class_UserUpdateFilter.php svneol=native#text/plain
-inc/classes/main/filter/validator/.htaccess -text svneol=unset#text/plain
+inc/classes/main/filter/validator/.htaccess svneol=native#text/plain
 inc/classes/main/filter/validator/class_EmailValidatorFilter.php svneol=native#text/plain
 inc/classes/main/filter/validator/class_PasswordValidatorFilter.php svneol=native#text/plain
 inc/classes/main/filter/validator/class_UserNameValidatorFilter.php svneol=native#text/plain
-inc/classes/main/filter/verifier/.htaccess -text svneol=unset#text/plain
+inc/classes/main/filter/verifier/.htaccess svneol=native#text/plain
 inc/classes/main/filter/verifier/class_AccountPasswordVerifierFilter.php svneol=native#text/plain
 inc/classes/main/filter/verifier/class_ConfirmCodeVerifierFilter.php svneol=native#text/plain
 inc/classes/main/filter/verifier/class_GraphicalCodeCaptchaVerifierFilter.php svneol=native#text/plain
@@ -407,182 +401,176 @@ inc/classes/main/filter/verifier/class_UserGuestVerifierFilter.php svneol=native
 inc/classes/main/filter/verifier/class_UserNameVerifierFilter.php svneol=native#text/plain
 inc/classes/main/filter/verifier/class_UserStatusVerifierFilter.php svneol=native#text/plain
 inc/classes/main/filter/verifier/class_UserUnconfirmedVerifierFilter.php svneol=native#text/plain
-inc/classes/main/helper/.htaccess -text svneol=unset#text/plain
-inc/classes/main/helper/captcha/.htaccess -text svneol=unset#text/plain
+inc/classes/main/helper/.htaccess svneol=native#text/plain
+inc/classes/main/helper/captcha/.htaccess svneol=native#text/plain
 inc/classes/main/helper/captcha/class_ svneol=native#text/plain
 inc/classes/main/helper/captcha/class_BaseCaptcha.php svneol=native#text/plain
-inc/classes/main/helper/captcha/images/.htaccess -text svneol=unset#text/plain
+inc/classes/main/helper/captcha/images/.htaccess svneol=native#text/plain
 inc/classes/main/helper/captcha/images/class_ImageHelper.php svneol=native#text/plain
-inc/classes/main/helper/captcha/web/.htaccess -text svneol=unset#text/plain
+inc/classes/main/helper/captcha/web/.htaccess svneol=native#text/plain
 inc/classes/main/helper/captcha/web/class_GraphicalCodeCaptcha.php svneol=native#text/plain
 inc/classes/main/helper/class_ svneol=native#text/plain
 inc/classes/main/helper/class_BaseHelper.php svneol=native#text/plain
-inc/classes/main/helper/login/.htaccess -text svneol=unset#text/plain
+inc/classes/main/helper/login/.htaccess svneol=native#text/plain
 inc/classes/main/helper/login/class_BaseLoginHelper.php svneol=native#text/plain
-inc/classes/main/helper/web/.htaccess -text svneol=unset#text/plain
-inc/classes/main/helper/web/blocks/.htaccess -text svneol=unset#text/plain
+inc/classes/main/helper/web/.htaccess svneol=native#text/plain
+inc/classes/main/helper/web/blocks/.htaccess svneol=native#text/plain
 inc/classes/main/helper/web/blocks/class_WebBlockHelper.php svneol=native#text/plain
 inc/classes/main/helper/web/class_ svneol=native#text/plain
 inc/classes/main/helper/web/class_BaseWebHelper.php svneol=native#text/plain
-inc/classes/main/helper/web/forms/.htaccess -text svneol=unset#text/plain
+inc/classes/main/helper/web/forms/.htaccess svneol=native#text/plain
 inc/classes/main/helper/web/forms/class_WebFormHelper.php svneol=native#text/plain
-inc/classes/main/helper/web/links/.htaccess -text svneol=unset#text/plain
+inc/classes/main/helper/web/links/.htaccess svneol=native#text/plain
 inc/classes/main/helper/web/links/class_WebLinkHelper.php svneol=native#text/plain
-inc/classes/main/images/.htaccess -text svneol=unset#text/plain
+inc/classes/main/images/.htaccess svneol=native#text/plain
 inc/classes/main/images/class_ svneol=native#text/plain
 inc/classes/main/images/class_BaseImage.php svneol=native#text/plain
-inc/classes/main/images/extended/.htaccess -text svneol=unset#text/plain
+inc/classes/main/images/extended/.htaccess svneol=native#text/plain
 inc/classes/main/images/extended/class_PngImage.php svneol=native#text/plain
-inc/classes/main/io/.htaccess -text svneol=unset#text/plain
+inc/classes/main/io/.htaccess svneol=native#text/plain
 inc/classes/main/io/class_FileIoStream.php svneol=native#text/plain
 inc/classes/main/io/class_FrameworkDirectoryPointer.php svneol=native#text/plain
 inc/classes/main/io/class_FrameworkFileInputPointer.php svneol=native#text/plain
 inc/classes/main/io/class_FrameworkFileOutputPointer.php svneol=native#text/plain
-inc/classes/main/language/.htaccess -text svneol=unset#text/plain
+inc/classes/main/language/.htaccess svneol=native#text/plain
 inc/classes/main/language/class_LanguageSystem.php svneol=native#text/plain
-inc/classes/main/mailer/.htaccess -text svneol=unset#text/plain
+inc/classes/main/mailer/.htaccess svneol=native#text/plain
 inc/classes/main/mailer/class_ svneol=native#text/plain
 inc/classes/main/mailer/class_BaseMailer.php svneol=native#text/plain
-inc/classes/main/mailer/debug/.htaccess -text svneol=unset#text/plain
+inc/classes/main/mailer/debug/.htaccess svneol=native#text/plain
 inc/classes/main/mailer/debug/class_DebugMailer.php svneol=native#text/plain
-inc/classes/main/menu/.htaccess -text svneol=unset#text/plain
+inc/classes/main/menu/.htaccess svneol=native#text/plain
 inc/classes/main/menu/class_BaseMenu.php svneol=native#text/plain
-inc/classes/main/output/.htaccess -text svneol=unset#text/plain
+inc/classes/main/output/.htaccess svneol=native#text/plain
 inc/classes/main/output/class_ConsoleOutput.php svneol=native#text/plain
 inc/classes/main/output/class_WebOutput.php svneol=native#text/plain
-inc/classes/main/parser/.htaccess -text svneol=unset#text/plain
+inc/classes/main/parser/.htaccess svneol=native#text/plain
 inc/classes/main/parser/class_ svneol=native#text/plain
 inc/classes/main/parser/class_BaseParser.php svneol=native#text/plain
-inc/classes/main/parser/xml/.htaccess -text svneol=unset#text/plain
+inc/classes/main/parser/xml/.htaccess svneol=native#text/plain
 inc/classes/main/parser/xml/class_XmlParser.php svneol=native#text/plain
-inc/classes/main/points/.htaccess -text svneol=unset#text/plain
+inc/classes/main/points/.htaccess svneol=native#text/plain
 inc/classes/main/points/class_UserPoints.php svneol=native#text/plain
-inc/classes/main/reader/.htaccess -text svneol=unset#text/plain
+inc/classes/main/reader/.htaccess svneol=native#text/plain
 inc/classes/main/reader/class_ConsoleNewsReader.php svneol=native#text/plain
 inc/classes/main/reader/class_DefaultNewsReader.php svneol=native#text/plain
-inc/classes/main/registration/.htaccess -text svneol=unset#text/plain
+inc/classes/main/registration/.htaccess svneol=native#text/plain
 inc/classes/main/registration/class_BaseRegistration.php svneol=native#text/plain
-inc/classes/main/registry/.htaccess -text svneol=unset#text/plain
+inc/classes/main/registry/.htaccess svneol=native#text/plain
 inc/classes/main/registry/class_ svneol=native#text/plain
 inc/classes/main/registry/class_BaseRegistry.php svneol=native#text/plain
-inc/classes/main/registry/generic/.htaccess -text svneol=unset#text/plain
+inc/classes/main/registry/generic/.htaccess svneol=native#text/plain
 inc/classes/main/registry/generic/class_Registry.php svneol=native#text/plain
-inc/classes/main/registry/sub/.htaccess -text svneol=unset#text/plain
+inc/classes/main/registry/sub/.htaccess svneol=native#text/plain
 inc/classes/main/registry/sub/class_SubRegistry.php svneol=native#text/plain
-inc/classes/main/request/.htaccess -text svneol=unset#text/plain
+inc/classes/main/request/.htaccess svneol=native#text/plain
 inc/classes/main/request/class_ svneol=native#text/plain
 inc/classes/main/request/class_BaseRequest.php svneol=native#text/plain
-inc/classes/main/request/console/.htaccess -text svneol=unset#text/plain
+inc/classes/main/request/console/.htaccess svneol=native#text/plain
 inc/classes/main/request/console/class_ConsoleRequest.php svneol=native#text/plain
-inc/classes/main/request/web/.htaccess -text svneol=unset#text/plain
+inc/classes/main/request/web/.htaccess svneol=native#text/plain
 inc/classes/main/request/web/class_HttpRequest.php svneol=native#text/plain
-inc/classes/main/resolver/.htaccess -text svneol=unset#text/plain
-inc/classes/main/resolver/action/.htaccess -text svneol=unset#text/plain
+inc/classes/main/resolver/.htaccess svneol=native#text/plain
+inc/classes/main/resolver/action/.htaccess svneol=native#text/plain
 inc/classes/main/resolver/action/class_BaseActionResolver.php svneol=native#text/plain
-inc/classes/main/resolver/action/web/.htaccess -text svneol=unset#text/plain
+inc/classes/main/resolver/action/web/.htaccess svneol=native#text/plain
 inc/classes/main/resolver/action/web/class_WebActionResolver.php svneol=native#text/plain
 inc/classes/main/resolver/class_BaseResolver.php svneol=native#text/plain
-inc/classes/main/resolver/command/.htaccess -text svneol=unset#text/plain
+inc/classes/main/resolver/command/.htaccess svneol=native#text/plain
 inc/classes/main/resolver/command/class_BaseCommandResolver.php svneol=native#text/plain
-inc/classes/main/resolver/command/console/.htaccess -text svneol=unset#text/plain
+inc/classes/main/resolver/command/console/.htaccess svneol=native#text/plain
 inc/classes/main/resolver/command/console/class_ConsoleCommandResolver.php svneol=native#text/plain
-inc/classes/main/resolver/command/image/.htaccess -text svneol=unset#text/plain
+inc/classes/main/resolver/command/image/.htaccess svneol=native#text/plain
 inc/classes/main/resolver/command/image/class_ImageCommandResolver.php svneol=native#text/plain
-inc/classes/main/resolver/command/web/.htaccess -text svneol=unset#text/plain
+inc/classes/main/resolver/command/web/.htaccess svneol=native#text/plain
 inc/classes/main/resolver/command/web/class_ svneol=native#text/plain
 inc/classes/main/resolver/command/web/class_WebCommandResolver.php svneol=native#text/plain
-inc/classes/main/resolver/controller/.htaccess -text svneol=unset#text/plain
+inc/classes/main/resolver/controller/.htaccess svneol=native#text/plain
 inc/classes/main/resolver/controller/class_BaseControllerResolver.php svneol=native#text/plain
-inc/classes/main/resolver/controller/console/.htaccess -text svneol=unset#text/plain
+inc/classes/main/resolver/controller/console/.htaccess svneol=native#text/plain
 inc/classes/main/resolver/controller/console/class_ConsoleControllerResolver.php svneol=native#text/plain
-inc/classes/main/resolver/controller/image/.htaccess -text svneol=unset#text/plain
+inc/classes/main/resolver/controller/image/.htaccess svneol=native#text/plain
 inc/classes/main/resolver/controller/image/class_ImageControllerResolver.php svneol=native#text/plain
-inc/classes/main/resolver/controller/web/.htaccess -text svneol=unset#text/plain
+inc/classes/main/resolver/controller/web/.htaccess svneol=native#text/plain
 inc/classes/main/resolver/controller/web/class_WebControllerResolver.php svneol=native#text/plain
 inc/classes/main/resolver/request/.htaccess svneol=native#text/plain
-inc/classes/main/response/.htaccess -text svneol=unset#text/plain
+inc/classes/main/response/.htaccess svneol=native#text/plain
 inc/classes/main/response/class_BaseResponse.php svneol=native#text/plain
-inc/classes/main/response/console/.htaccess -text svneol=unset#text/plain
+inc/classes/main/response/console/.htaccess svneol=native#text/plain
 inc/classes/main/response/console/class_ConsoleResponse.php svneol=native#text/plain
-inc/classes/main/response/http/.htaccess -text svneol=unset#text/plain
+inc/classes/main/response/http/.htaccess svneol=native#text/plain
 inc/classes/main/response/http/class_HttpResponse.php svneol=native#text/plain
-inc/classes/main/response/image/.htaccess -text svneol=unset#text/plain
+inc/classes/main/response/image/.htaccess svneol=native#text/plain
 inc/classes/main/response/image/class_ImageResponse.php svneol=native#text/plain
-inc/classes/main/result/.htaccess -text svneol=unset#text/plain
+inc/classes/main/result/.htaccess svneol=native#text/plain
 inc/classes/main/result/class_DatabaseResult.php svneol=native#text/plain
-inc/classes/main/rng/.htaccess -text svneol=unset#text/plain
+inc/classes/main/rng/.htaccess svneol=native#text/plain
 inc/classes/main/rng/class_RandomNumberGenerator.php svneol=native#text/plain
-inc/classes/main/stacker/.htaccess -text svneol=unset#text/plain
+inc/classes/main/stacker/.htaccess svneol=native#text/plain
 inc/classes/main/stacker/class_ svneol=native#text/plain
 inc/classes/main/stacker/class_BaseStacker.php svneol=native#text/plain
-inc/classes/main/stacker/fifo/.htaccess -text svneol=unset#text/plain
+inc/classes/main/stacker/fifo/.htaccess svneol=native#text/plain
 inc/classes/main/stacker/fifo/class_FiFoStacker.php svneol=native#text/plain
-inc/classes/main/stacker/filo/.htaccess -text svneol=unset#text/plain
+inc/classes/main/stacker/filo/.htaccess svneol=native#text/plain
 inc/classes/main/stacker/filo/class_FiLoStacker.php svneol=native#text/plain
-inc/classes/main/streams/.htaccess -text svneol=unset#text/plain
+inc/classes/main/streams/.htaccess svneol=native#text/plain
 inc/classes/main/streams/class_ svneol=native#text/plain
 inc/classes/main/streams/class_BaseStream.php svneol=native#text/plain
-inc/classes/main/streams/crypto/.htaccess -text svneol=unset#text/plain
+inc/classes/main/streams/crypto/.htaccess svneol=native#text/plain
 inc/classes/main/streams/crypto/class_McryptStream.php svneol=native#text/plain
 inc/classes/main/streams/crypto/class_NullCryptoStream.php svneol=native#text/plain
 inc/classes/main/streams/input/.htaccess svneol=native#text/plain
 inc/classes/main/streams/input/class_BaseInputStream.php svneol=native#text/plain
 inc/classes/main/streams/output/.htaccess svneol=native#text/plain
 inc/classes/main/streams/output/class_BaseOutputStream.php svneol=native#text/plain
-inc/classes/main/template/.htaccess -text svneol=unset#text/plain
+inc/classes/main/template/.htaccess svneol=native#text/plain
 inc/classes/main/template/class_ svneol=native#text/plain
 inc/classes/main/template/class_BaseTemplateEngine.php svneol=native#text/plain
-inc/classes/main/template/console/.htaccess -text svneol=unset#text/plain
+inc/classes/main/template/console/.htaccess svneol=native#text/plain
 inc/classes/main/template/console/class_ConsoleTemplateEngine.php svneol=native#text/plain
-inc/classes/main/template/image/.htaccess -text svneol=unset#text/plain
+inc/classes/main/template/image/.htaccess svneol=native#text/plain
 inc/classes/main/template/image/class_ImageTemplateEngine.php svneol=native#text/plain
-inc/classes/main/template/mail/.htaccess -text svneol=unset#text/plain
+inc/classes/main/template/mail/.htaccess svneol=native#text/plain
 inc/classes/main/template/mail/class_MailTemplateEngine.php svneol=native#text/plain
-inc/classes/main/template/menu/.htaccess -text svneol=unset#text/plain
+inc/classes/main/template/menu/.htaccess svneol=native#text/plain
 inc/classes/main/template/menu/class_MenuTemplateEngine.php svneol=native#text/plain
-inc/classes/main/template/web/.htaccess -text svneol=unset#text/plain
+inc/classes/main/template/web/.htaccess svneol=native#text/plain
 inc/classes/main/template/web/class_WebTemplateEngine.php svneol=native#text/plain
-inc/classes/main/user/.htaccess -text svneol=unset#text/plain
+inc/classes/main/user/.htaccess svneol=native#text/plain
 inc/classes/main/user/class_BaseUser.php svneol=native#text/plain
-inc/classes/main/user/guest/.htaccess -text svneol=unset#text/plain
+inc/classes/main/user/guest/.htaccess svneol=native#text/plain
 inc/classes/main/user/guest/class_Guest.php svneol=native#text/plain
-inc/classes/main/user/member/.htaccess -text svneol=unset#text/plain
+inc/classes/main/user/member/.htaccess svneol=native#text/plain
 inc/classes/main/user/member/class_Member.php svneol=native#text/plain
-inc/classes/middleware/.htaccess -text svneol=unset#text/plain
+inc/classes/middleware/.htaccess svneol=native#text/plain
 inc/classes/middleware/class_BaseMiddleware.php svneol=native#text/plain
-inc/classes/middleware/compressor/.htaccess -text svneol=unset#text/plain
+inc/classes/middleware/compressor/.htaccess svneol=native#text/plain
 inc/classes/middleware/compressor/class_CompressorChannel.php svneol=native#text/plain
-inc/classes/middleware/database/.htaccess -text svneol=unset#text/plain
+inc/classes/middleware/database/.htaccess svneol=native#text/plain
 inc/classes/middleware/database/class_DatabaseConnection.php svneol=native#text/plain
-inc/classes/middleware/debug/.htaccess -text svneol=unset#text/plain
+inc/classes/middleware/debug/.htaccess svneol=native#text/plain
 inc/classes/middleware/debug/class_DebugMiddleware.php svneol=native#text/plain
-inc/classes/middleware/io/.htaccess -text svneol=unset#text/plain
+inc/classes/middleware/io/.htaccess svneol=native#text/plain
 inc/classes/middleware/io/class_FileIoHandler.php svneol=native#text/plain
-inc/classes/third_party/.htaccess -text svneol=unset#text/plain
-inc/classes/third_party/akismet/.htaccess -text svneol=unset#text/plain
-inc/classes/third_party/akismet/akismet.class.php -text svneol=unset#text/plain
-inc/classes/third_party/api/.htaccess -text svneol=unset#text/plain
-inc/classes/third_party/api/primusportal/.htaccess -text svneol=unset#text/plain
-inc/classes/third_party/api/primusportal/class_PrimeraApi.php -text svneol=unset#text/plain
-inc/classes/third_party/api/wernisportal/.htaccess -text svneol=unset#text/plain
-inc/classes/third_party/api/wernisportal/class_WernisApi.php -text svneol=unset#text/plain
-inc/classes/third_party/php_mailer/.htaccess -text svneol=unset#text/plain
-inc/classes/third_party/php_mailer/ChangeLog.txt -text svneol=unset#text/plain
-inc/classes/third_party/php_mailer/LICENSE -text
-inc/classes/third_party/php_mailer/README -text
-inc/classes/third_party/php_mailer/class.phpmailer.php -text svneol=unset#text/plain
-inc/classes/third_party/php_mailer/class.pop3.php -text svneol=unset#text/plain
-inc/classes/third_party/php_mailer/class.smtp.php -text svneol=unset#text/plain
-inc/classes/third_party/php_mailer/docs/extending.html -text
-inc/classes/third_party/php_mailer/docs/faq.html -text
+inc/classes/third_party/.htaccess svneol=native#text/plain
+inc/classes/third_party/akismet/.htaccess svneol=native#text/plain
+inc/classes/third_party/akismet/akismet.class.php svneol=native#text/plain
+inc/classes/third_party/api/.htaccess svneol=native#text/plain
+inc/classes/third_party/api/primusportal/.htaccess svneol=native#text/plain
+inc/classes/third_party/api/primusportal/class_PrimeraApi.php svneol=native#text/plain
+inc/classes/third_party/api/wernisportal/.htaccess svneol=native#text/plain
+inc/classes/third_party/api/wernisportal/class_WernisApi.php svneol=native#text/plain
+inc/classes/third_party/php_mailer/.htaccess svneol=native#text/plain
+inc/classes/third_party/php_mailer/ChangeLog.txt svneol=native#text/plain
+inc/classes/third_party/php_mailer/class.phpmailer.php svneol=native#text/plain
+inc/classes/third_party/php_mailer/class.pop3.php svneol=native#text/plain
+inc/classes/third_party/php_mailer/class.smtp.php svneol=native#text/plain
 inc/classes/third_party/php_mailer/docs/pop3_article.txt svneol=native#text/plain
 inc/classes/third_party/php_mailer/docs/use_gmail.txt svneol=native#text/plain
-inc/classes/third_party/php_mailer/examples/contents.html -text
 inc/classes/third_party/php_mailer/examples/images/bkgrnd.gif -text svneol=unset#image/gif
 inc/classes/third_party/php_mailer/examples/images/phpmailer.gif -text svneol=unset#image/gif
 inc/classes/third_party/php_mailer/examples/images/phpmailer.png -text svneol=unset#image/png
 inc/classes/third_party/php_mailer/examples/images/phpmailer_mini.gif -text svneol=unset#image/gif
-inc/classes/third_party/php_mailer/examples/index.html -text
 inc/classes/third_party/php_mailer/examples/pop3_before_smtp_test.php svneol=native#text/plain
 inc/classes/third_party/php_mailer/examples/test_gmail.php svneol=native#text/plain
 inc/classes/third_party/php_mailer/examples/test_mail.php svneol=native#text/plain
@@ -602,49 +590,44 @@ inc/classes/third_party/php_mailer/language/phpmailer.lang-fo.php svneol=native#
 inc/classes/third_party/php_mailer/language/phpmailer.lang-fr.php svneol=native#text/plain
 inc/classes/third_party/php_mailer/language/phpmailer.lang-hu.php svneol=native#text/plain
 inc/classes/third_party/php_mailer/language/phpmailer.lang-it.php svneol=native#text/plain
-inc/classes/third_party/php_mailer/language/phpmailer.lang-ja.php -text svneol=unset#text/plain
-inc/classes/third_party/php_mailer/language/phpmailer.lang-nl.php -text svneol=unset#text/plain
-inc/classes/third_party/php_mailer/language/phpmailer.lang-no.php -text svneol=unset#text/plain
-inc/classes/third_party/php_mailer/language/phpmailer.lang-pl.php -text svneol=unset#text/plain
-inc/classes/third_party/php_mailer/language/phpmailer.lang-ro.php -text svneol=unset#text/plain
-inc/classes/third_party/php_mailer/language/phpmailer.lang-ru.php -text svneol=unset#text/plain
-inc/classes/third_party/php_mailer/language/phpmailer.lang-se.php -text svneol=unset#text/plain
-inc/classes/third_party/php_mailer/language/phpmailer.lang-tr.php -text svneol=unset#text/plain
-inc/classes/third_party/php_mailer/test/phpmailer_test.php -text svneol=unset#text/plain
-inc/classes/third_party/php_mailer/test/phpunit.php -text svneol=unset#text/plain
+inc/classes/third_party/php_mailer/language/phpmailer.lang-ja.php svneol=native#text/plain
+inc/classes/third_party/php_mailer/language/phpmailer.lang-nl.php svneol=native#text/plain
+inc/classes/third_party/php_mailer/language/phpmailer.lang-no.php svneol=native#text/plain
+inc/classes/third_party/php_mailer/language/phpmailer.lang-pl.php svneol=native#text/plain
+inc/classes/third_party/php_mailer/language/phpmailer.lang-ro.php svneol=native#text/plain
+inc/classes/third_party/php_mailer/language/phpmailer.lang-ru.php svneol=native#text/plain
+inc/classes/third_party/php_mailer/language/phpmailer.lang-se.php svneol=native#text/plain
+inc/classes/third_party/php_mailer/language/phpmailer.lang-tr.php svneol=native#text/plain
+inc/classes/third_party/php_mailer/test/phpmailer_test.php svneol=native#text/plain
+inc/classes/third_party/php_mailer/test/phpunit.php svneol=native#text/plain
 inc/classes/third_party/php_mailer/test/test.png -text svneol=unset#image/png
 inc/config.php svneol=native#text/plain
-inc/config/.htaccess -text svneol=unset#text/plain
+inc/config/.htaccess svneol=native#text/plain
 inc/config/class_FrameworkConfiguration.php svneol=native#text/plain
 inc/config/config-hubmaster.php svneol=native#text/plain
 inc/database.php svneol=native#text/plain
-inc/database/.htaccess -text svneol=unset#text/plain
+inc/database/.htaccess svneol=native#text/plain
 inc/database/lib-local.php svneol=native#text/plain
 inc/file_io.php svneol=native#text/plain
 inc/hooks.php svneol=native#text/plain
 inc/includes.php svneol=native#text/plain
 inc/language.php svneol=native#text/plain
-inc/language/.htaccess -text svneol=unset#text/plain
-inc/loader/.htaccess -text svneol=unset#text/plain
+inc/language/.htaccess svneol=native#text/plain
+inc/loader/.htaccess svneol=native#text/plain
 inc/loader/class_ClassLoader.php svneol=native#text/plain
 inc/output.php svneol=native#text/plain
 inc/selector.php svneol=native#text/plain
-/setup-repos.sh -text
 /svn-externals.txt svneol=native#text/plain
-templates/.htaccess -text svneol=unset#text/plain
-templates/README.1st -text
-templates/_compiled/.htaccess -text svneol=unset#text/plain
-templates/images/.htaccess -text svneol=unset#text/plain
-templates/images/_cache/.htaccess -text svneol=unset#text/plain
-templates/menus/.htaccess -text svneol=unset#text/plain
-templates/menus/_cache/.htaccess -text svneol=unset#text/plain
+templates/.htaccess svneol=native#text/plain
+templates/_compiled/.htaccess svneol=native#text/plain
+templates/images/.htaccess svneol=native#text/plain
+templates/images/_cache/.htaccess svneol=native#text/plain
+templates/menus/.htaccess svneol=native#text/plain
+templates/menus/_cache/.htaccess svneol=native#text/plain
 tests/ConfigTest.php svneol=native#text/plain
 tests/RegistryTest.php svneol=native#text/plain
 tests/RequestTest.php svneol=native#text/plain
 tests/Test.php svneol=native#text/plain
-tests/all-tests.sh -text
 tests/old/contract-test.php svneol=native#text/plain
 tests/old/loader-test.php svneol=native#text/plain
 tests/old/personell-test.php svneol=native#text/plain
-tests/unittest.sh -text
-/todo-builder.sh -text
index 9533ccd..5de251e 100644 (file)
-ChangeLog\r
-\r
-NOTE: THIS VERSION OF PHPMAILER IS DESIGNED FOR PHP5/PHP6. IT WILL NOT WORK WITH PHP4.\r
-\r
-Version 2.3 (November 06, 2008)\r
-\r
-* added Arabic language (many thanks to Bahjat Al Mostafa)\r
-* removed English language from language files and made it a default within\r
-  class.phpmailer.php - if no language is found, it will default to use\r
-  the english language translation\r
-* fixed public/private declarations\r
-* corrected line 1728, $basedir to $directory\r
-* added $sign_cert_file to avoid improper duplicate use of $sign_key_file\r
-* corrected $this->Hello on line 612 to $this->Helo\r
-* changed default of $LE to "\r\n" to comply with RFC 2822. Can be set by the user\r
-  if default is not acceptable\r
-* removed trim() from return results in EncodeQP\r
-* /test and three files it contained are removed from version 2.3\r
-* fixed phpunit.php for compliance with PHP5\r
-* changed $this->AltBody = $textMsg; to $this->AltBody = html_entity_decode($textMsg);\r
-* We have removed the /phpdoc from the downloads. All documentation is now on\r
-  the http://phpmailer.codeworxtech.com website.\r
-\r
-Version 2.2.1 () July 19 2008\r
-\r
-* fixed line 1092 in class.smtp.php (my apologies, error on my part)\r
-\r
-Version 2.2 () July 15 2008\r
-\r
-* Fixed redirect issue (display of UTF-8 in thank you redirect)\r
-* fixed error in getResponse function declaration (class.pop3.php)\r
-* PHPMailer now PHP6 compliant\r
-* fixed line 1092 in class.smtp.php (endless loop from missing = sign)\r
-\r
-Version 2.1 (Wed, June 04 2008)\r
-\r
-** NOTE: WE HAVE A NEW LANGUAGE VARIABLE FOR DIGITALLY SIGNED S/MIME EMAILS.\r
-   IF YOU CAN HELP WITH LANGUAGES OTHER THAN ENGLISH AND SPANISH, IT WOULD BE\r
-   APPRECIATED.\r
-\r
-* added S/MIME functionality (ability to digitally sign emails)\r
-  BIG THANKS TO "sergiocambra" for posting this patch back in November 2007.\r
-  The "Signed Emails" functionality adds the Sign method to pass the private key\r
-  filename and the password to read it, and then email will be sent with\r
-  content-type multipart/signed and with the digital signature attached.\r
-* fully compatible with E_STRICT error level\r
-  - Please note:\r
-    In about half the test environments this development version was subjected\r
-    to, an error was thrown for the date() functions used (line 1565 and 1569).\r
-    This is NOT a PHPMailer error, it is the result of an incorrectly configured\r
-    PHP5 installation. The fix is to modify your 'php.ini' file and include the\r
-    date.timezone = America/New York\r
-    directive, to your own server timezone\r
-  - If you do get this error, and are unable to access your php.ini file:\r
-    In your PHP script, add\r
-    date_default_timezone_set('America/Toronto');\r
-    - do not try to use\r
-    $myVar = date_default_timezone_get();\r
-    as a test, it will throw an error.\r
-* added ability to define path (mainly for embedded images)\r
-  function MsgHTML($message,$basedir='') ... where:\r
-  $basedir is the fully qualified path\r
-* fixed MsgHTML() function:\r
-  - Embedded Images where images are specified by <protocol>:// will not be altered or embedded\r
-* fixed the return value of SMTP exit code ( pclose )\r
-* addressed issue of multibyte characters in subject line and truncating\r
-* added ability to have user specified Message ID\r
-  (default is still that PHPMailer create a unique Message ID)\r
-* corrected unidentified message type to 'application/octet-stream'\r
-* fixed chunk_split() multibyte issue (thanks to Colin Brown, et al).\r
-* added check for added attachments\r
-* enhanced conversion of HTML to text in MsgHTML (thanks to "brunny")\r
-\r
-Version 2.1.0beta2 (Sun, Dec 02 2007)\r
-* implemented updated EncodeQP (thanks to coolbru, aka Marcus Bointon)\r
-* finished all testing, all known bugs corrected, enhancements tested\r
-- note: will NOT work with PHP4.\r
-\r
-please note, this is BETA software\r
-** DO NOT USE THIS IN PRODUCTION OR LIVE PROJECTS\r
-INTENDED STRICTLY FOR TESTING\r
-\r
-Version 2.1.0beta1\r
-please note, this is BETA software\r
-** DO NOT USE THIS IN PRODUCTION OR LIVE PROJECTS\r
-INTENDED STRICTLY FOR TESTING\r
-\r
-Version 2.0.0 rc2 (Fri, Nov 16 2007), interim release\r
-* implements new property to control VERP in class.smtp.php\r
-  example (requires instantiating class.smtp.php):\r
-  $mail->do_verp = true;\r
-* POP-before-SMTP functionality included, thanks to Richard Davey\r
-  (see class.pop3.php & pop3_before_smtp_test.php for examples)\r
-* included example showing how to use PHPMailer with GMAIL\r
-* fixed the missing Cc in SendMail() and Mail()\r
-\r
-******************\r
-A note on sending bulk emails:\r
-\r
-If the email you are sending is not personalized, consider using the\r
-"undisclosed-recipient:;" strategy. That is, put all of your recipients\r
-in the Bcc field and set the To field to "undisclosed-recipients:;".\r
-It's a lot faster (only one send) and saves quite a bit on resources.\r
-Contrary to some opinions, this will not get you listed in spam engines -\r
-it's a legitimate way for you to send emails.\r
-\r
-A partial example for use with PHPMailer:\r
-\r
-$mail->AddAddress("undisclosed-recipients:;");\r
-$mail->AddBCC("email1@anydomain.com,email2@anyotherdomain.com,email3@anyalternatedomain.com");\r
-\r
-Many email service providers restrict the number of emails that can be sent\r
-in any given time period. Often that is between 50 - 60 emails maximum\r
-per hour or per send session.\r
-\r
-If that's the case, then break up your Bcc lists into chunks that are one\r
-less than your limit, and put a pause in your script.\r
-*******************\r
-\r
-Version 2.0.0 rc1 (Thu, Nov 08 2007), interim release\r
-* dramatically simplified using inline graphics ... it's fully automated and requires no user input\r
-* added automatic document type detection for attachments and pictures\r
-* added MsgHTML() function to replace Body tag for HTML emails\r
-* fixed the SendMail security issues (input validation vulnerability)\r
-* enhanced the AddAddresses functionality so that the "Name" portion is used in the email address\r
-* removed the need to use the AltBody method (set from the HTML, or default text used)\r
-* set the PHP Mail() function as the default (still support SendMail, SMTP Mail)\r
-* removed the need to set the IsHTML property (set automatically)\r
-* added Estonian language file by Indrek P&auml;ri\r
-* added header injection patch\r
-* added "set" method to permit users to create their own pseudo-properties like 'X-Headers', etc.\r
-  example of use:\r
-  $mail->set('X-Priority', '3');\r
-  $mail->set('X-MSMail-Priority', 'Normal');\r
-* fixed warning message in SMTP get_lines method\r
-* added TLS/SSL SMTP support\r
-  example of use:\r
-  $mail = new PHPMailer();\r
-  $mail->Mailer = "smtp";\r
-  $mail->Host = "smtp.example.com";\r
-  $mail->SMTPSecure   = "tls"; // option\r
-  //$mail->SMTPSecure   = "ssl";  // option\r
-  ...\r
-  $mail->Send();\r
-* PHPMailer has been tested with PHP4 (4.4.7) and PHP5 (5.2.7)\r
-* Works with PHP installed as a module or as CGI-PHP\r
-- NOTE: will NOT work with PHP5 in E_STRICT error mode\r
-\r
-Version 1.73 (Sun, Jun 10 2005)\r
-* Fixed denial of service bug: http://www.cybsec.com/vuln/PHPMailer-DOS.pdf\r
-* Now has a total of 20 translations\r
-* Fixed alt attachments bug: http://tinyurl.com/98u9k\r
-\r
-Version 1.72 (Wed, May 25 2004)\r
-* Added Dutch, Swedish, Czech, Norwegian, and Turkish translations.\r
-* Received: Removed this method because spam filter programs like\r
-SpamAssassin reject this header.\r
-* Fixed error count bug.\r
-* SetLanguage default is now "language/".\r
-* Fixed magic_quotes_runtime bug.\r
-\r
-Version 1.71 (Tue, Jul 28 2003)\r
-* Made several speed enhancements\r
-* Added German and Italian translation files\r
-* Fixed HELO/AUTH bugs on keep-alive connects\r
-* Now provides an error message if language file does not load\r
-* Fixed attachment EOL bug\r
-* Updated some unclear documentation\r
-* Added additional tests and improved others\r
-\r
-Version 1.70 (Mon, Jun 20 2003)\r
-* Added SMTP keep-alive support\r
-* Added IsError method for error detection\r
-* Added error message translation support (SetLanguage)\r
-* Refactored many methods to increase library performance\r
-* Hello now sends the newer EHLO message before HELO as per RFC 2821\r
-* Removed the boundary class and replaced it with GetBoundary\r
-* Removed queue support methods\r
-* New $Hostname variable\r
-* New Message-ID header\r
-* Received header reformat\r
-* Helo variable default changed to $Hostname\r
-* Removed extra spaces in Content-Type definition (#667182)\r
-* Return-Path should be set to Sender when set\r
-* Adds Q or B encoding to headers when necessary\r
-* quoted-encoding should now encode NULs \000\r
-* Fixed encoding of body/AltBody (#553370)\r
-* Adds "To: undisclosed-recipients:;" when all recipients are hidden (BCC)\r
-* Multiple bug fixes\r
-\r
-Version 1.65 (Fri, Aug 09 2002)\r
-* Fixed non-visible attachment bug (#585097) for Outlook\r
-* SMTP connections are now closed after each transaction\r
-* Fixed SMTP::Expand return value\r
-* Converted SMTP class documentation to phpDocumentor format\r
-\r
-Version 1.62 (Wed, Jun 26 2002)\r
-* Fixed multi-attach bug\r
-* Set proper word wrapping\r
-* Reduced memory use with attachments\r
-* Added more debugging\r
-* Changed documentation to phpDocumentor format\r
-\r
-Version 1.60 (Sat, Mar 30 2002)\r
-* Sendmail pipe and address patch (Christian Holtje)\r
-* Added embedded image and read confirmation support (A. Ognio)\r
-* Added unit tests\r
-* Added SMTP timeout support (*nix only)\r
-* Added possibly temporary PluginDir variable for SMTP class\r
-* Added LE message line ending variable\r
-* Refactored boundary and attachment code\r
-* Eliminated SMTP class warnings\r
-* Added SendToQueue method for future queuing support\r
-\r
-Version 1.54 (Wed, Dec 19 2001)\r
-* Add some queuing support code\r
-* Fixed a pesky multi/alt bug\r
-* Messages are no longer forced to have "To" addresses\r
-\r
-Version 1.50 (Thu, Nov 08 2001)\r
-* Fix extra lines when not using SMTP mailer\r
-* Set WordWrap variable to int with a zero default\r
-\r
-Version 1.47 (Tue, Oct 16 2001)\r
-* Fixed Received header code format\r
-* Fixed AltBody order error\r
-* Fixed alternate port warning\r
-\r
-Version 1.45 (Tue, Sep 25 2001)\r
-* Added enhanced SMTP debug support\r
-* Added support for multiple ports on SMTP\r
-* Added Received header for tracing\r
-* Fixed AddStringAttachment encoding\r
-* Fixed possible header name quote bug\r
-* Fixed wordwrap() trim bug\r
-* Couple other small bug fixes\r
-\r
-Version 1.41 (Wed, Aug 22 2001)\r
-* Fixed AltBody bug w/o attachments\r
-* Fixed rfc_date() for certain mail servers\r
-\r
-Version 1.40 (Sun, Aug 12 2001)\r
-* Added multipart/alternative support (AltBody)\r
-* Documentation update\r
-* Fixed bug in Mercury MTA\r
-\r
-Version 1.29 (Fri, Aug 03 2001)\r
-* Added AddStringAttachment() method\r
-* Added SMTP authentication support\r
-\r
-Version 1.28 (Mon, Jul 30 2001)\r
-* Fixed a typo in SMTP class\r
-* Fixed header issue with Imail (win32) SMTP server\r
-* Made fopen() calls for attachments use "rb" to fix win32 error\r
-\r
-Version 1.25 (Mon, Jul 02 2001)\r
-* Added RFC 822 date fix (Patrice)\r
-* Added improved error handling by adding a $ErrorInfo variable\r
-* Removed MailerDebug variable (obsolete with new error handler)\r
-\r
-Version 1.20 (Mon, Jun 25 2001)\r
-* Added quoted-printable encoding (Patrice)\r
-* Set Version as public and removed PrintVersion()\r
-* Changed phpdoc to only display public variables and methods\r
-\r
-Version 1.19 (Thu, Jun 21 2001)\r
-* Fixed MS Mail header bug\r
-* Added fix for Bcc problem with mail(). *Does not work on Win32*\r
-  (See PHP bug report: http://www.php.net/bugs.php?id=11616)\r
-* mail() no longer passes a fifth parameter when not needed\r
-\r
-Version 1.15 (Fri, Jun 15 2001)\r
-[Note: these changes contributed by Patrice Fournier]\r
-* Changed all remaining \n to \r\n\r
-* Bcc: header no longer writen to message except\r
-when sent directly to sendmail\r
-* Added a small message to non-MIME compliant mail reader\r
-* Added Sender variable to change the Sender email\r
-used in -f for sendmail/mail and in 'MAIL FROM' for smtp mode\r
-* Changed boundary setting to a place it will be set only once\r
-* Removed transfer encoding for whole message when using multipart\r
-* Message body now uses Encoding in multipart messages\r
-* Can set encoding and type to attachments 7bit, 8bit\r
-and binary attachment are sent as is, base64 are encoded\r
-* Can set Encoding to base64 to send 8 bits body\r
-through 7 bits servers\r
-\r
-Version 1.10 (Tue, Jun 12 2001)\r
-* Fixed win32 mail header bug (printed out headers in message body)\r
-\r
-Version 1.09 (Fri, Jun 08 2001)\r
-* Changed date header to work with Netscape mail programs\r
-* Altered phpdoc documentation\r
-\r
-Version 1.08 (Tue, Jun 05 2001)\r
-* Added enhanced error-checking\r
-* Added phpdoc documentation to source\r
-\r
-Version 1.06 (Fri, Jun 01 2001)\r
-* Added optional name for file attachments\r
-\r
-Version 1.05 (Tue, May 29 2001)\r
-* Code cleanup\r
-* Eliminated sendmail header warning message\r
-* Fixed possible SMTP error\r
-\r
-Version 1.03 (Thu, May 24 2001)\r
-* Fixed problem where qmail sends out duplicate messages\r
-\r
-Version 1.02 (Wed, May 23 2001)\r
-* Added multiple recipient and attachment Clear* methods\r
-* Added Sendmail public variable\r
-* Fixed problem with loading SMTP library multiple times\r
-\r
-Version 0.98 (Tue, May 22 2001)\r
-* Fixed problem with redundant mail hosts sending out multiple messages\r
-* Added additional error handler code\r
-* Added AddCustomHeader() function\r
-* Added support for Microsoft mail client headers (affects priority)\r
-* Fixed small bug with Mailer variable\r
-* Added PrintVersion() function\r
-\r
-Version 0.92 (Tue, May 15 2001)\r
-* Changed file names to class.phpmailer.php and class.smtp.php to match\r
-  current PHP class trend.\r
-* Fixed problem where body not being printed when a message is attached\r
-* Several small bug fixes\r
-\r
-Version 0.90 (Tue, April 17 2001)\r
-* Intial public release\r
+ChangeLog
+
+NOTE: THIS VERSION OF PHPMAILER IS DESIGNED FOR PHP5/PHP6. IT WILL NOT WORK WITH PHP4.
+
+Version 2.3 (November 06, 2008)
+
+* added Arabic language (many thanks to Bahjat Al Mostafa)
+* removed English language from language files and made it a default within
+  class.phpmailer.php - if no language is found, it will default to use
+  the english language translation
+* fixed public/private declarations
+* corrected line 1728, $basedir to $directory
+* added $sign_cert_file to avoid improper duplicate use of $sign_key_file
+* corrected $this->Hello on line 612 to $this->Helo
+* changed default of $LE to "\r\n" to comply with RFC 2822. Can be set by the user
+  if default is not acceptable
+* removed trim() from return results in EncodeQP
+* /test and three files it contained are removed from version 2.3
+* fixed phpunit.php for compliance with PHP5
+* changed $this->AltBody = $textMsg; to $this->AltBody = html_entity_decode($textMsg);
+* We have removed the /phpdoc from the downloads. All documentation is now on
+  the http://phpmailer.codeworxtech.com website.
+
+Version 2.2.1 () July 19 2008
+
+* fixed line 1092 in class.smtp.php (my apologies, error on my part)
+
+Version 2.2 () July 15 2008
+
+* Fixed redirect issue (display of UTF-8 in thank you redirect)
+* fixed error in getResponse function declaration (class.pop3.php)
+* PHPMailer now PHP6 compliant
+* fixed line 1092 in class.smtp.php (endless loop from missing = sign)
+
+Version 2.1 (Wed, June 04 2008)
+
+** NOTE: WE HAVE A NEW LANGUAGE VARIABLE FOR DIGITALLY SIGNED S/MIME EMAILS.
+   IF YOU CAN HELP WITH LANGUAGES OTHER THAN ENGLISH AND SPANISH, IT WOULD BE
+   APPRECIATED.
+
+* added S/MIME functionality (ability to digitally sign emails)
+  BIG THANKS TO "sergiocambra" for posting this patch back in November 2007.
+  The "Signed Emails" functionality adds the Sign method to pass the private key
+  filename and the password to read it, and then email will be sent with
+  content-type multipart/signed and with the digital signature attached.
+* fully compatible with E_STRICT error level
+  - Please note:
+    In about half the test environments this development version was subjected
+    to, an error was thrown for the date() functions used (line 1565 and 1569).
+    This is NOT a PHPMailer error, it is the result of an incorrectly configured
+    PHP5 installation. The fix is to modify your 'php.ini' file and include the
+    date.timezone = America/New York
+    directive, to your own server timezone
+  - If you do get this error, and are unable to access your php.ini file:
+    In your PHP script, add
+    date_default_timezone_set('America/Toronto');
+    - do not try to use
+    $myVar = date_default_timezone_get();
+    as a test, it will throw an error.
+* added ability to define path (mainly for embedded images)
+  function MsgHTML($message,$basedir='') ... where:
+  $basedir is the fully qualified path
+* fixed MsgHTML() function:
+  - Embedded Images where images are specified by <protocol>:// will not be altered or embedded
+* fixed the return value of SMTP exit code ( pclose )
+* addressed issue of multibyte characters in subject line and truncating
+* added ability to have user specified Message ID
+  (default is still that PHPMailer create a unique Message ID)
+* corrected unidentified message type to 'application/octet-stream'
+* fixed chunk_split() multibyte issue (thanks to Colin Brown, et al).
+* added check for added attachments
+* enhanced conversion of HTML to text in MsgHTML (thanks to "brunny")
+
+Version 2.1.0beta2 (Sun, Dec 02 2007)
+* implemented updated EncodeQP (thanks to coolbru, aka Marcus Bointon)
+* finished all testing, all known bugs corrected, enhancements tested
+- note: will NOT work with PHP4.
+
+please note, this is BETA software
+** DO NOT USE THIS IN PRODUCTION OR LIVE PROJECTS
+INTENDED STRICTLY FOR TESTING
+
+Version 2.1.0beta1
+please note, this is BETA software
+** DO NOT USE THIS IN PRODUCTION OR LIVE PROJECTS
+INTENDED STRICTLY FOR TESTING
+
+Version 2.0.0 rc2 (Fri, Nov 16 2007), interim release
+* implements new property to control VERP in class.smtp.php
+  example (requires instantiating class.smtp.php):
+  $mail->do_verp = true;
+* POP-before-SMTP functionality included, thanks to Richard Davey
+  (see class.pop3.php & pop3_before_smtp_test.php for examples)
+* included example showing how to use PHPMailer with GMAIL
+* fixed the missing Cc in SendMail() and Mail()
+
+******************
+A note on sending bulk emails:
+
+If the email you are sending is not personalized, consider using the
+"undisclosed-recipient:;" strategy. That is, put all of your recipients
+in the Bcc field and set the To field to "undisclosed-recipients:;".
+It's a lot faster (only one send) and saves quite a bit on resources.
+Contrary to some opinions, this will not get you listed in spam engines -
+it's a legitimate way for you to send emails.
+
+A partial example for use with PHPMailer:
+
+$mail->AddAddress("undisclosed-recipients:;");
+$mail->AddBCC("email1@anydomain.com,email2@anyotherdomain.com,email3@anyalternatedomain.com");
+
+Many email service providers restrict the number of emails that can be sent
+in any given time period. Often that is between 50 - 60 emails maximum
+per hour or per send session.
+
+If that's the case, then break up your Bcc lists into chunks that are one
+less than your limit, and put a pause in your script.
+*******************
+
+Version 2.0.0 rc1 (Thu, Nov 08 2007), interim release
+* dramatically simplified using inline graphics ... it's fully automated and requires no user input
+* added automatic document type detection for attachments and pictures
+* added MsgHTML() function to replace Body tag for HTML emails
+* fixed the SendMail security issues (input validation vulnerability)
+* enhanced the AddAddresses functionality so that the "Name" portion is used in the email address
+* removed the need to use the AltBody method (set from the HTML, or default text used)
+* set the PHP Mail() function as the default (still support SendMail, SMTP Mail)
+* removed the need to set the IsHTML property (set automatically)
+* added Estonian language file by Indrek P&auml;ri
+* added header injection patch
+* added "set" method to permit users to create their own pseudo-properties like 'X-Headers', etc.
+  example of use:
+  $mail->set('X-Priority', '3');
+  $mail->set('X-MSMail-Priority', 'Normal');
+* fixed warning message in SMTP get_lines method
+* added TLS/SSL SMTP support
+  example of use:
+  $mail = new PHPMailer();
+  $mail->Mailer = "smtp";
+  $mail->Host = "smtp.example.com";
+  $mail->SMTPSecure   = "tls"; // option
+  //$mail->SMTPSecure   = "ssl";  // option
+  ...
+  $mail->Send();
+* PHPMailer has been tested with PHP4 (4.4.7) and PHP5 (5.2.7)
+* Works with PHP installed as a module or as CGI-PHP
+- NOTE: will NOT work with PHP5 in E_STRICT error mode
+
+Version 1.73 (Sun, Jun 10 2005)
+* Fixed denial of service bug: http://www.cybsec.com/vuln/PHPMailer-DOS.pdf
+* Now has a total of 20 translations
+* Fixed alt attachments bug: http://tinyurl.com/98u9k
+
+Version 1.72 (Wed, May 25 2004)
+* Added Dutch, Swedish, Czech, Norwegian, and Turkish translations.
+* Received: Removed this method because spam filter programs like
+SpamAssassin reject this header.
+* Fixed error count bug.
+* SetLanguage default is now "language/".
+* Fixed magic_quotes_runtime bug.
+
+Version 1.71 (Tue, Jul 28 2003)
+* Made several speed enhancements
+* Added German and Italian translation files
+* Fixed HELO/AUTH bugs on keep-alive connects
+* Now provides an error message if language file does not load
+* Fixed attachment EOL bug
+* Updated some unclear documentation
+* Added additional tests and improved others
+
+Version 1.70 (Mon, Jun 20 2003)
+* Added SMTP keep-alive support
+* Added IsError method for error detection
+* Added error message translation support (SetLanguage)
+* Refactored many methods to increase library performance
+* Hello now sends the newer EHLO message before HELO as per RFC 2821
+* Removed the boundary class and replaced it with GetBoundary
+* Removed queue support methods
+* New $Hostname variable
+* New Message-ID header
+* Received header reformat
+* Helo variable default changed to $Hostname
+* Removed extra spaces in Content-Type definition (#667182)
+* Return-Path should be set to Sender when set
+* Adds Q or B encoding to headers when necessary
+* quoted-encoding should now encode NULs \000
+* Fixed encoding of body/AltBody (#553370)
+* Adds "To: undisclosed-recipients:;" when all recipients are hidden (BCC)
+* Multiple bug fixes
+
+Version 1.65 (Fri, Aug 09 2002)
+* Fixed non-visible attachment bug (#585097) for Outlook
+* SMTP connections are now closed after each transaction
+* Fixed SMTP::Expand return value
+* Converted SMTP class documentation to phpDocumentor format
+
+Version 1.62 (Wed, Jun 26 2002)
+* Fixed multi-attach bug
+* Set proper word wrapping
+* Reduced memory use with attachments
+* Added more debugging
+* Changed documentation to phpDocumentor format
+
+Version 1.60 (Sat, Mar 30 2002)
+* Sendmail pipe and address patch (Christian Holtje)
+* Added embedded image and read confirmation support (A. Ognio)
+* Added unit tests
+* Added SMTP timeout support (*nix only)
+* Added possibly temporary PluginDir variable for SMTP class
+* Added LE message line ending variable
+* Refactored boundary and attachment code
+* Eliminated SMTP class warnings
+* Added SendToQueue method for future queuing support
+
+Version 1.54 (Wed, Dec 19 2001)
+* Add some queuing support code
+* Fixed a pesky multi/alt bug
+* Messages are no longer forced to have "To" addresses
+
+Version 1.50 (Thu, Nov 08 2001)
+* Fix extra lines when not using SMTP mailer
+* Set WordWrap variable to int with a zero default
+
+Version 1.47 (Tue, Oct 16 2001)
+* Fixed Received header code format
+* Fixed AltBody order error
+* Fixed alternate port warning
+
+Version 1.45 (Tue, Sep 25 2001)
+* Added enhanced SMTP debug support
+* Added support for multiple ports on SMTP
+* Added Received header for tracing
+* Fixed AddStringAttachment encoding
+* Fixed possible header name quote bug
+* Fixed wordwrap() trim bug
+* Couple other small bug fixes
+
+Version 1.41 (Wed, Aug 22 2001)
+* Fixed AltBody bug w/o attachments
+* Fixed rfc_date() for certain mail servers
+
+Version 1.40 (Sun, Aug 12 2001)
+* Added multipart/alternative support (AltBody)
+* Documentation update
+* Fixed bug in Mercury MTA
+
+Version 1.29 (Fri, Aug 03 2001)
+* Added AddStringAttachment() method
+* Added SMTP authentication support
+
+Version 1.28 (Mon, Jul 30 2001)
+* Fixed a typo in SMTP class
+* Fixed header issue with Imail (win32) SMTP server
+* Made fopen() calls for attachments use "rb" to fix win32 error
+
+Version 1.25 (Mon, Jul 02 2001)
+* Added RFC 822 date fix (Patrice)
+* Added improved error handling by adding a $ErrorInfo variable
+* Removed MailerDebug variable (obsolete with new error handler)
+
+Version 1.20 (Mon, Jun 25 2001)
+* Added quoted-printable encoding (Patrice)
+* Set Version as public and removed PrintVersion()
+* Changed phpdoc to only display public variables and methods
+
+Version 1.19 (Thu, Jun 21 2001)
+* Fixed MS Mail header bug
+* Added fix for Bcc problem with mail(). *Does not work on Win32*
+  (See PHP bug report: http://www.php.net/bugs.php?id=11616)
+* mail() no longer passes a fifth parameter when not needed
+
+Version 1.15 (Fri, Jun 15 2001)
+[Note: these changes contributed by Patrice Fournier]
+* Changed all remaining \n to \r\n
+* Bcc: header no longer writen to message except
+when sent directly to sendmail
+* Added a small message to non-MIME compliant mail reader
+* Added Sender variable to change the Sender email
+used in -f for sendmail/mail and in 'MAIL FROM' for smtp mode
+* Changed boundary setting to a place it will be set only once
+* Removed transfer encoding for whole message when using multipart
+* Message body now uses Encoding in multipart messages
+* Can set encoding and type to attachments 7bit, 8bit
+and binary attachment are sent as is, base64 are encoded
+* Can set Encoding to base64 to send 8 bits body
+through 7 bits servers
+
+Version 1.10 (Tue, Jun 12 2001)
+* Fixed win32 mail header bug (printed out headers in message body)
+
+Version 1.09 (Fri, Jun 08 2001)
+* Changed date header to work with Netscape mail programs
+* Altered phpdoc documentation
+
+Version 1.08 (Tue, Jun 05 2001)
+* Added enhanced error-checking
+* Added phpdoc documentation to source
+
+Version 1.06 (Fri, Jun 01 2001)
+* Added optional name for file attachments
+
+Version 1.05 (Tue, May 29 2001)
+* Code cleanup
+* Eliminated sendmail header warning message
+* Fixed possible SMTP error
+
+Version 1.03 (Thu, May 24 2001)
+* Fixed problem where qmail sends out duplicate messages
+
+Version 1.02 (Wed, May 23 2001)
+* Added multiple recipient and attachment Clear* methods
+* Added Sendmail public variable
+* Fixed problem with loading SMTP library multiple times
+
+Version 0.98 (Tue, May 22 2001)
+* Fixed problem with redundant mail hosts sending out multiple messages
+* Added additional error handler code
+* Added AddCustomHeader() function
+* Added support for Microsoft mail client headers (affects priority)
+* Fixed small bug with Mailer variable
+* Added PrintVersion() function
+
+Version 0.92 (Tue, May 15 2001)
+* Changed file names to class.phpmailer.php and class.smtp.php to match
+  current PHP class trend.
+* Fixed problem where body not being printed when a message is attached
+* Several small bug fixes
+
+Version 0.90 (Tue, April 17 2001)
+* Intial public release
index 03851a3..f3f1b3b 100644 (file)
-                 GNU LESSER GENERAL PUBLIC LICENSE\r
-                      Version 2.1, February 1999\r
-\r
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.\r
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
- Everyone is permitted to copy and distribute verbatim copies\r
- of this license document, but changing it is not allowed.\r
-\r
-[This is the first released version of the Lesser GPL.  It also counts\r
- as the successor of the GNU Library Public License, version 2, hence\r
- the version number 2.1.]\r
-\r
-                           Preamble\r
-\r
-  The licenses for most software are designed to take away your\r
-freedom to share and change it.  By contrast, the GNU General Public\r
-Licenses are intended to guarantee your freedom to share and change\r
-free software--to make sure the software is free for all its users.\r
-\r
-  This license, the Lesser General Public License, applies to some\r
-specially designated software packages--typically libraries--of the\r
-Free Software Foundation and other authors who decide to use it.  You\r
-can use it too, but we suggest you first think carefully about whether\r
-this license or the ordinary General Public License is the better\r
-strategy to use in any particular case, based on the explanations below.\r
-\r
-  When we speak of free software, we are referring to freedom of use,\r
-not price.  Our General Public Licenses are designed to make sure that\r
-you have the freedom to distribute copies of free software (and charge\r
-for this service if you wish); that you receive source code or can get\r
-it if you want it; that you can change the software and use pieces of\r
-it in new free programs; and that you are informed that you can do\r
-these things.\r
-\r
-  To protect your rights, we need to make restrictions that forbid\r
-distributors to deny you these rights or to ask you to surrender these\r
-rights.  These restrictions translate to certain responsibilities for\r
-you if you distribute copies of the library or if you modify it.\r
-\r
-  For example, if you distribute copies of the library, whether gratis\r
-or for a fee, you must give the recipients all the rights that we gave\r
-you.  You must make sure that they, too, receive or can get the source\r
-code.  If you link other code with the library, you must provide\r
-complete object files to the recipients, so that they can relink them\r
-with the library after making changes to the library and recompiling\r
-it.  And you must show them these terms so they know their rights.\r
-\r
-  We protect your rights with a two-step method: (1) we copyright the\r
-library, and (2) we offer you this license, which gives you legal\r
-permission to copy, distribute and/or modify the library.\r
-\r
-  To protect each distributor, we want to make it very clear that\r
-there is no warranty for the free library.  Also, if the library is\r
-modified by someone else and passed on, the recipients should know\r
-that what they have is not the original version, so that the original\r
-author's reputation will not be affected by problems that might be\r
-introduced by others.\r
-\r
-  Finally, software patents pose a constant threat to the existence of\r
-any free program.  We wish to make sure that a company cannot\r
-effectively restrict the users of a free program by obtaining a\r
-restrictive license from a patent holder.  Therefore, we insist that\r
-any patent license obtained for a version of the library must be\r
-consistent with the full freedom of use specified in this license.\r
-\r
-  Most GNU software, including some libraries, is covered by the\r
-ordinary GNU General Public License.  This license, the GNU Lesser\r
-General Public License, applies to certain designated libraries, and\r
-is quite different from the ordinary General Public License.  We use\r
-this license for certain libraries in order to permit linking those\r
-libraries into non-free programs.\r
-\r
-  When a program is linked with a library, whether statically or using\r
-a shared library, the combination of the two is legally speaking a\r
-combined work, a derivative of the original library.  The ordinary\r
-General Public License therefore permits such linking only if the\r
-entire combination fits its criteria of freedom.  The Lesser General\r
-Public License permits more lax criteria for linking other code with\r
-the library.\r
-\r
-  We call this license the "Lesser" General Public License because it\r
-does Less to protect the user's freedom than the ordinary General\r
-Public License.  It also provides other free software developers Less\r
-of an advantage over competing non-free programs.  These disadvantages\r
-are the reason we use the ordinary General Public License for many\r
-libraries.  However, the Lesser license provides advantages in certain\r
-special circumstances.\r
-\r
-  For example, on rare occasions, there may be a special need to\r
-encourage the widest possible use of a certain library, so that it becomes\r
-a de-facto standard.  To achieve this, non-free programs must be\r
-allowed to use the library.  A more frequent case is that a free\r
-library does the same job as widely used non-free libraries.  In this\r
-case, there is little to gain by limiting the free library to free\r
-software only, so we use the Lesser General Public License.\r
-\r
-  In other cases, permission to use a particular library in non-free\r
-programs enables a greater number of people to use a large body of\r
-free software.  For example, permission to use the GNU C Library in\r
-non-free programs enables many more people to use the whole GNU\r
-operating system, as well as its variant, the GNU/Linux operating\r
-system.\r
-\r
-  Although the Lesser General Public License is Less protective of the\r
-users' freedom, it does ensure that the user of a program that is\r
-linked with the Library has the freedom and the wherewithal to run\r
-that program using a modified version of the Library.\r
-\r
-  The precise terms and conditions for copying, distribution and\r
-modification follow.  Pay close attention to the difference between a\r
-"work based on the library" and a "work that uses the library".  The\r
-former contains code derived from the library, whereas the latter must\r
-be combined with the library in order to run.\r
-\r
-                 GNU LESSER GENERAL PUBLIC LICENSE\r
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\r
-\r
-  0. This License Agreement applies to any software library or other\r
-program which contains a notice placed by the copyright holder or\r
-other authorized party saying it may be distributed under the terms of\r
-this Lesser General Public License (also called "this License").\r
-Each licensee is addressed as "you".\r
-\r
-  A "library" means a collection of software functions and/or data\r
-prepared so as to be conveniently linked with application programs\r
-(which use some of those functions and data) to form executables.\r
-\r
-  The "Library", below, refers to any such software library or work\r
-which has been distributed under these terms.  A "work based on the\r
-Library" means either the Library or any derivative work under\r
-copyright law: that is to say, a work containing the Library or a\r
-portion of it, either verbatim or with modifications and/or translated\r
-straightforwardly into another language.  (Hereinafter, translation is\r
-included without limitation in the term "modification".)\r
-\r
-  "Source code" for a work means the preferred form of the work for\r
-making modifications to it.  For a library, complete source code means\r
-all the source code for all modules it contains, plus any associated\r
-interface definition files, plus the scripts used to control compilation\r
-and installation of the library.\r
-\r
-  Activities other than copying, distribution and modification are not\r
-covered by this License; they are outside its scope.  The act of\r
-running a program using the Library is not restricted, and output from\r
-such a program is covered only if its contents constitute a work based\r
-on the Library (independent of the use of the Library in a tool for\r
-writing it).  Whether that is true depends on what the Library does\r
-and what the program that uses the Library does.\r
-  \r
-  1. You may copy and distribute verbatim copies of the Library's\r
-complete source code as you receive it, in any medium, provided that\r
-you conspicuously and appropriately publish on each copy an\r
-appropriate copyright notice and disclaimer of warranty; keep intact\r
-all the notices that refer to this License and to the absence of any\r
-warranty; and distribute a copy of this License along with the\r
-Library.\r
-\r
-  You may charge a fee for the physical act of transferring a copy,\r
-and you may at your option offer warranty protection in exchange for a\r
-fee.\r
-\r
-  2. You may modify your copy or copies of the Library or any portion\r
-of it, thus forming a work based on the Library, and copy and\r
-distribute such modifications or work under the terms of Section 1\r
-above, provided that you also meet all of these conditions:\r
-\r
-    a) The modified work must itself be a software library.\r
-\r
-    b) You must cause the files modified to carry prominent notices\r
-    stating that you changed the files and the date of any change.\r
-\r
-    c) You must cause the whole of the work to be licensed at no\r
-    charge to all third parties under the terms of this License.\r
-\r
-    d) If a facility in the modified Library refers to a function or a\r
-    table of data to be supplied by an application program that uses\r
-    the facility, other than as an argument passed when the facility\r
-    is invoked, then you must make a good faith effort to ensure that,\r
-    in the event an application does not supply such function or\r
-    table, the facility still operates, and performs whatever part of\r
-    its purpose remains meaningful.\r
-\r
-    (For example, a function in a library to compute square roots has\r
-    a purpose that is entirely well-defined independent of the\r
-    application.  Therefore, Subsection 2d requires that any\r
-    application-supplied function or table used by this function must\r
-    be optional: if the application does not supply it, the square\r
-    root function must still compute square roots.)\r
-\r
-These requirements apply to the modified work as a whole.  If\r
-identifiable sections of that work are not derived from the Library,\r
-and can be reasonably considered independent and separate works in\r
-themselves, then this License, and its terms, do not apply to those\r
-sections when you distribute them as separate works.  But when you\r
-distribute the same sections as part of a whole which is a work based\r
-on the Library, the distribution of the whole must be on the terms of\r
-this License, whose permissions for other licensees extend to the\r
-entire whole, and thus to each and every part regardless of who wrote\r
-it.\r
-\r
-Thus, it is not the intent of this section to claim rights or contest\r
-your rights to work written entirely by you; rather, the intent is to\r
-exercise the right to control the distribution of derivative or\r
-collective works based on the Library.\r
-\r
-In addition, mere aggregation of another work not based on the Library\r
-with the Library (or with a work based on the Library) on a volume of\r
-a storage or distribution medium does not bring the other work under\r
-the scope of this License.\r
-\r
-  3. You may opt to apply the terms of the ordinary GNU General Public\r
-License instead of this License to a given copy of the Library.  To do\r
-this, you must alter all the notices that refer to this License, so\r
-that they refer to the ordinary GNU General Public License, version 2,\r
-instead of to this License.  (If a newer version than version 2 of the\r
-ordinary GNU General Public License has appeared, then you can specify\r
-that version instead if you wish.)  Do not make any other change in\r
-these notices.\r
-\r
-  Once this change is made in a given copy, it is irreversible for\r
-that copy, so the ordinary GNU General Public License applies to all\r
-subsequent copies and derivative works made from that copy.\r
-\r
-  This option is useful when you wish to copy part of the code of\r
-the Library into a program that is not a library.\r
-\r
-  4. You may copy and distribute the Library (or a portion or\r
-derivative of it, under Section 2) in object code or executable form\r
-under the terms of Sections 1 and 2 above provided that you accompany\r
-it with the complete corresponding machine-readable source code, which\r
-must be distributed under the terms of Sections 1 and 2 above on a\r
-medium customarily used for software interchange.\r
-\r
-  If distribution of object code is made by offering access to copy\r
-from a designated place, then offering equivalent access to copy the\r
-source code from the same place satisfies the requirement to\r
-distribute the source code, even though third parties are not\r
-compelled to copy the source along with the object code.\r
-\r
-  5. A program that contains no derivative of any portion of the\r
-Library, but is designed to work with the Library by being compiled or\r
-linked with it, is called a "work that uses the Library".  Such a\r
-work, in isolation, is not a derivative work of the Library, and\r
-therefore falls outside the scope of this License.\r
-\r
-  However, linking a "work that uses the Library" with the Library\r
-creates an executable that is a derivative of the Library (because it\r
-contains portions of the Library), rather than a "work that uses the\r
-library".  The executable is therefore covered by this License.\r
-Section 6 states terms for distribution of such executables.\r
-\r
-  When a "work that uses the Library" uses material from a header file\r
-that is part of the Library, the object code for the work may be a\r
-derivative work of the Library even though the source code is not.\r
-Whether this is true is especially significant if the work can be\r
-linked without the Library, or if the work is itself a library.  The\r
-threshold for this to be true is not precisely defined by law.\r
-\r
-  If such an object file uses only numerical parameters, data\r
-structure layouts and accessors, and small macros and small inline\r
-functions (ten lines or less in length), then the use of the object\r
-file is unrestricted, regardless of whether it is legally a derivative\r
-work.  (Executables containing this object code plus portions of the\r
-Library will still fall under Section 6.)\r
-\r
-  Otherwise, if the work is a derivative of the Library, you may\r
-distribute the object code for the work under the terms of Section 6.\r
-Any executables containing that work also fall under Section 6,\r
-whether or not they are linked directly with the Library itself.\r
-\r
-  6. As an exception to the Sections above, you may also combine or\r
-link a "work that uses the Library" with the Library to produce a\r
-work containing portions of the Library, and distribute that work\r
-under terms of your choice, provided that the terms permit\r
-modification of the work for the customer's own use and reverse\r
-engineering for debugging such modifications.\r
-\r
-  You must give prominent notice with each copy of the work that the\r
-Library is used in it and that the Library and its use are covered by\r
-this License.  You must supply a copy of this License.  If the work\r
-during execution displays copyright notices, you must include the\r
-copyright notice for the Library among them, as well as a reference\r
-directing the user to the copy of this License.  Also, you must do one\r
-of these things:\r
-\r
-    a) Accompany the work with the complete corresponding\r
-    machine-readable source code for the Library including whatever\r
-    changes were used in the work (which must be distributed under\r
-    Sections 1 and 2 above); and, if the work is an executable linked\r
-    with the Library, with the complete machine-readable "work that\r
-    uses the Library", as object code and/or source code, so that the\r
-    user can modify the Library and then relink to produce a modified\r
-    executable containing the modified Library.  (It is understood\r
-    that the user who changes the contents of definitions files in the\r
-    Library will not necessarily be able to recompile the application\r
-    to use the modified definitions.)\r
-\r
-    b) Use a suitable shared library mechanism for linking with the\r
-    Library.  A suitable mechanism is one that (1) uses at run time a\r
-    copy of the library already present on the user's computer system,\r
-    rather than copying library functions into the executable, and (2)\r
-    will operate properly with a modified version of the library, if\r
-    the user installs one, as long as the modified version is\r
-    interface-compatible with the version that the work was made with.\r
-\r
-    c) Accompany the work with a written offer, valid for at\r
-    least three years, to give the same user the materials\r
-    specified in Subsection 6a, above, for a charge no more\r
-    than the cost of performing this distribution.\r
-\r
-    d) If distribution of the work is made by offering access to copy\r
-    from a designated place, offer equivalent access to copy the above\r
-    specified materials from the same place.\r
-\r
-    e) Verify that the user has already received a copy of these\r
-    materials or that you have already sent this user a copy.\r
-\r
-  For an executable, the required form of the "work that uses the\r
-Library" must include any data and utility programs needed for\r
-reproducing the executable from it.  However, as a special exception,\r
-the materials to be distributed need not include anything that is\r
-normally distributed (in either source or binary form) with the major\r
-components (compiler, kernel, and so on) of the operating system on\r
-which the executable runs, unless that component itself accompanies\r
-the executable.\r
-\r
-  It may happen that this requirement contradicts the license\r
-restrictions of other proprietary libraries that do not normally\r
-accompany the operating system.  Such a contradiction means you cannot\r
-use both them and the Library together in an executable that you\r
-distribute.\r
-\r
-  7. You may place library facilities that are a work based on the\r
-Library side-by-side in a single library together with other library\r
-facilities not covered by this License, and distribute such a combined\r
-library, provided that the separate distribution of the work based on\r
-the Library and of the other library facilities is otherwise\r
-permitted, and provided that you do these two things:\r
-\r
-    a) Accompany the combined library with a copy of the same work\r
-    based on the Library, uncombined with any other library\r
-    facilities.  This must be distributed under the terms of the\r
-    Sections above.\r
-\r
-    b) Give prominent notice with the combined library of the fact\r
-    that part of it is a work based on the Library, and explaining\r
-    where to find the accompanying uncombined form of the same work.\r
-\r
-  8. You may not copy, modify, sublicense, link with, or distribute\r
-the Library except as expressly provided under this License.  Any\r
-attempt otherwise to copy, modify, sublicense, link with, or\r
-distribute the Library is void, and will automatically terminate your\r
-rights under this License.  However, parties who have received copies,\r
-or rights, from you under this License will not have their licenses\r
-terminated so long as such parties remain in full compliance.\r
-\r
-  9. You are not required to accept this License, since you have not\r
-signed it.  However, nothing else grants you permission to modify or\r
-distribute the Library or its derivative works.  These actions are\r
-prohibited by law if you do not accept this License.  Therefore, by\r
-modifying or distributing the Library (or any work based on the\r
-Library), you indicate your acceptance of this License to do so, and\r
-all its terms and conditions for copying, distributing or modifying\r
-the Library or works based on it.\r
-\r
-  10. Each time you redistribute the Library (or any work based on the\r
-Library), the recipient automatically receives a license from the\r
-original licensor to copy, distribute, link with or modify the Library\r
-subject to these terms and conditions.  You may not impose any further\r
-restrictions on the recipients' exercise of the rights granted herein.\r
-You are not responsible for enforcing compliance by third parties with\r
-this License.\r
-\r
-  11. If, as a consequence of a court judgment or allegation of patent\r
-infringement or for any other reason (not limited to patent issues),\r
-conditions are imposed on you (whether by court order, agreement or\r
-otherwise) that contradict the conditions of this License, they do not\r
-excuse you from the conditions of this License.  If you cannot\r
-distribute so as to satisfy simultaneously your obligations under this\r
-License and any other pertinent obligations, then as a consequence you\r
-may not distribute the Library at all.  For example, if a patent\r
-license would not permit royalty-free redistribution of the Library by\r
-all those who receive copies directly or indirectly through you, then\r
-the only way you could satisfy both it and this License would be to\r
-refrain entirely from distribution of the Library.\r
-\r
-If any portion of this section is held invalid or unenforceable under any\r
-particular circumstance, the balance of the section is intended to apply,\r
-and the section as a whole is intended to apply in other circumstances.\r
-\r
-It is not the purpose of this section to induce you to infringe any\r
-patents or other property right claims or to contest validity of any\r
-such claims; this section has the sole purpose of protecting the\r
-integrity of the free software distribution system which is\r
-implemented by public license practices.  Many people have made\r
-generous contributions to the wide range of software distributed\r
-through that system in reliance on consistent application of that\r
-system; it is up to the author/donor to decide if he or she is willing\r
-to distribute software through any other system and a licensee cannot\r
-impose that choice.\r
-\r
-This section is intended to make thoroughly clear what is believed to\r
-be a consequence of the rest of this License.\r
-\r
-  12. If the distribution and/or use of the Library is restricted in\r
-certain countries either by patents or by copyrighted interfaces, the\r
-original copyright holder who places the Library under this License may add\r
-an explicit geographical distribution limitation excluding those countries,\r
-so that distribution is permitted only in or among countries not thus\r
-excluded.  In such case, this License incorporates the limitation as if\r
-written in the body of this License.\r
-\r
-  13. The Free Software Foundation may publish revised and/or new\r
-versions of the Lesser General Public License from time to time.\r
-Such new versions will be similar in spirit to the present version,\r
-but may differ in detail to address new problems or concerns.\r
-\r
-Each version is given a distinguishing version number.  If the Library\r
-specifies a version number of this License which applies to it and\r
-"any later version", you have the option of following the terms and\r
-conditions either of that version or of any later version published by\r
-the Free Software Foundation.  If the Library does not specify a\r
-license version number, you may choose any version ever published by\r
-the Free Software Foundation.\r
-\r
-  14. If you wish to incorporate parts of the Library into other free\r
-programs whose distribution conditions are incompatible with these,\r
-write to the author to ask for permission.  For software which is\r
-copyrighted by the Free Software Foundation, write to the Free\r
-Software Foundation; we sometimes make exceptions for this.  Our\r
-decision will be guided by the two goals of preserving the free status\r
-of all derivatives of our free software and of promoting the sharing\r
-and reuse of software generally.\r
-\r
-                           NO WARRANTY\r
-\r
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\r
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\r
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\r
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY\r
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\r
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\r
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\r
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\r
-\r
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\r
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\r
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\r
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\r
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\r
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\r
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\r
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\r
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\r
-DAMAGES.\r
-\r
-                    END OF TERMS AND CONDITIONS\r
-\r
-           How to Apply These Terms to Your New Libraries\r
-\r
-  If you develop a new library, and you want it to be of the greatest\r
-possible use to the public, we recommend making it free software that\r
-everyone can redistribute and change.  You can do so by permitting\r
-redistribution under these terms (or, alternatively, under the terms of the\r
-ordinary General Public License).\r
-\r
-  To apply these terms, attach the following notices to the library.  It is\r
-safest to attach them to the start of each source file to most effectively\r
-convey the exclusion of warranty; and each file should have at least the\r
-"copyright" line and a pointer to where the full notice is found.\r
-\r
-    <one line to give the library's name and a brief idea of what it does.>\r
-    Copyright (C) <year>  <name of author>\r
-\r
-    This library is free software; you can redistribute it and/or\r
-    modify it under the terms of the GNU Lesser General Public\r
-    License as published by the Free Software Foundation; either\r
-    version 2.1 of the License, or (at your option) any later version.\r
-\r
-    This library is distributed in the hope that it will be useful,\r
-    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
-    Lesser General Public License for more details.\r
-\r
-    You should have received a copy of the GNU Lesser General Public\r
-    License along with this library; if not, write to the Free Software\r
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
-\r
-Also add information on how to contact you by electronic and paper mail.\r
-\r
-You should also get your employer (if you work as a programmer) or your\r
-school, if any, to sign a "copyright disclaimer" for the library, if\r
-necessary.  Here is a sample; alter the names:\r
-\r
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the\r
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\r
-\r
-  <signature of Ty Coon>, 1 April 1990\r
-  Ty Coon, President of Vice\r
-\r
-That's all there is to it!\r
-\r
-\r
+                 GNU LESSER GENERAL PUBLIC LICENSE
+                      Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                 GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                           NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
index f2e2b79..3f0ee3f 100644 (file)
-/*******************************************************************\r
-* The http://phpmailer.codeworxtech.com/ website now carries a few *\r
-* advertisements through the Google Adsense network. Please visit  *\r
-* the advertiser sites and help us offset some of our costs.       *\r
-* Thanks ....                                                      *\r
-********************************************************************/\r
-\r
-PHPMailer\r
-Full Featured Email Transfer Class for PHP\r
-==========================================\r
-\r
-Version 2.3 (November 08, 2008)\r
-\r
-We have removed the /phpdoc from the downloads. All documentation is now on\r
-the http://phpmailer.codeworxtech.com website.\r
-\r
-The phpunit.php has been updated to support PHP5.\r
-\r
-For all other changes and notes, please see the changelog.\r
-\r
-Donations are accepted at PayPal with our id "paypal@worxteam.com".\r
-\r
-Version 2.2 (July 15 2008)\r
-\r
-- see the changelog.\r
-\r
-Version 2.1 (June 04 2008)\r
-\r
-With this release, we are announcing that the development of PHPMailer for PHP5\r
-will be our focus from this date on. We have implemented all the enhancements\r
-and fixes from the latest release of PHPMailer for PHP4.\r
-\r
-Far more important, though, is that this release of PHPMailer (v2.1) is\r
-fully tested with E_STRICT error checking enabled.\r
-\r
-** NOTE: WE HAVE A NEW LANGUAGE VARIABLE FOR DIGITALLY SIGNED S/MIME EMAILS.\r
-   IF YOU CAN HELP WITH LANGUAGES OTHER THAN ENGLISH AND SPANISH, IT WOULD BE\r
-   APPRECIATED.\r
-\r
-We have now added S/MIME functionality (ability to digitally sign emails).\r
-BIG THANKS TO "sergiocambra" for posting this patch back in November 2007.\r
-The "Signed Emails" functionality adds the Sign method to pass the private key\r
-filename and the password to read it, and then email will be sent with\r
-content-type multipart/signed and with the digital signature attached.\r
-\r
-A quick note on E_STRICT:\r
-\r
-- In about half the test environments the development version was subjected\r
-  to, an error was thrown for the date() functions (used at line 1565 and 1569).\r
-  This is NOT a PHPMailer error, it is the result of an incorrectly configured\r
-  PHP5 installation. The fix is to modify your 'php.ini' file and include the\r
-  date.timezone = America/New York\r
-  directive, (for your own server timezone)\r
-- If you do get this error, and are unable to access your php.ini file, there is\r
-  a workaround. In your PHP script, add\r
-  date_default_timezone_set('America/Toronto');\r
-\r
-  * do NOT try to use\r
-  $myVar = date_default_timezone_get();\r
-  as a test, it will throw an error.\r
-\r
-We have also included more example files to show the use of "sendmail", "mail()",\r
-"smtp", and "gmail".\r
-\r
-We are also looking for more programmers to join the volunteer development team.\r
-If you have an interest in this, please let us know.\r
-\r
-Enjoy!\r
-\r
-\r
-Version 2.1.0beta1 & beta2\r
-\r
-please note, this is BETA software\r
-** DO NOT USE THIS IN PRODUCTION OR LIVE PROJECTS\r
-INTENDED STRICTLY FOR TESTING\r
-\r
-** NOTE:\r
-\r
-As of November 2007, PHPMailer has a new project team headed by industry\r
-veteran Andy Prevost (codeworxtech). The first release in more than two\r
-years will focus on fixes, adding ease-of-use enhancements, provide\r
-basic compatibility with PHP4 and PHP5 using PHP5 backwards compatibility\r
-features. A new release is planned before year-end 2007 that will provide\r
-full compatiblity with PHP4 and PHP5, as well as more bug fixes.\r
-\r
-We are looking for project developers to assist in restoring PHPMailer to\r
-its leadership position. Our goals are to simplify use of PHPMailer, provide\r
-good documentation and examples, and retain backward compatibility to level\r
-1.7.3 standards.\r
-\r
-If you are interested in helping out, visit http://sourceforge.net/projects/phpmailer\r
-and indicate your interest.\r
-\r
-**\r
-\r
-http://phpmailer.sourceforge.net/\r
-\r
-This software is licenced under the LGPL.  Please read LICENSE for information on the\r
-software availability and distribution.\r
-\r
-Class Features:\r
-- Send emails with multiple TOs, CCs, BCCs and REPLY-TOs\r
-- Redundant SMTP servers\r
-- Multipart/alternative emails for mail clients that do not read HTML email\r
-- Support for 8bit, base64, binary, and quoted-printable encoding\r
-- Uses the same methods as the very popular AspEmail active server (COM) component\r
-- SMTP authentication\r
-- Native language support\r
-- Word wrap, and more!\r
-\r
-Why you might need it:\r
-\r
-Many PHP developers utilize email in their code.  The only PHP function\r
-that supports this is the mail() function.  However, it does not expose\r
-any of the popular features that many email clients use nowadays like\r
-HTML-based emails and attachments. There are two proprietary\r
-development tools out there that have all the functionality built into\r
-easy to use classes: AspEmail(tm) and AspMail.  Both of these\r
-programs are COM components only available on Windows.  They are also a\r
-little pricey for smaller projects.\r
-\r
-Since I do Linux development I\92ve missed these tools for my PHP coding.\r
-So I built a version myself that implements the same methods (object\r
-calls) that the Windows-based components do. It is open source and the\r
-LGPL license allows you to place the class in your proprietary PHP\r
-projects.\r
-\r
-\r
-Installation:\r
-\r
-Copy class.phpmailer.php into your php.ini include_path. If you are\r
-using the SMTP mailer then place class.smtp.php in your path as well.\r
-In the language directory you will find several files like\r
-phpmailer.lang-en.php.  If you look right before the .php extension\r
-that there are two letters.  These represent the language type of the\r
-translation file.  For instance "en" is the English file and "br" is\r
-the Portuguese file.  Chose the file that best fits with your language\r
-and place it in the PHP include path.  If your language is English\r
-then you have nothing more to do.  If it is a different language then\r
-you must point PHPMailer to the correct translation.  To do this, call\r
-the PHPMailer SetLanguage method like so:\r
-\r
-// To load the Portuguese version\r
-$mail->SetLanguage("br", "/optional/path/to/language/directory/");\r
-\r
-That's it.  You should now be ready to use PHPMailer!\r
-\r
-\r
-A Simple Example:\r
-\r
-<?php\r
-require("class.phpmailer.php");\r
-\r
-$mail = new PHPMailer();\r
-\r
-$mail->IsSMTP();                                      // set mailer to use SMTP\r
-$mail->Host = "smtp1.example.com;smtp2.example.com";  // specify main and backup server\r
-$mail->SMTPAuth = true;     // turn on SMTP authentication\r
-$mail->Username = "jswan";  // SMTP username\r
-$mail->Password = "secret"; // SMTP password\r
-\r
-$mail->From = "from@example.com";\r
-$mail->FromName = "Mailer";\r
-$mail->AddAddress("josh@example.net", "Josh Adams");\r
-$mail->AddAddress("ellen@example.com");                  // name is optional\r
-$mail->AddReplyTo("info@example.com", "Information");\r
-\r
-$mail->WordWrap = 50;                                 // set word wrap to 50 characters\r
-$mail->AddAttachment("/var/tmp/file.tar.gz");         // add attachments\r
-$mail->AddAttachment("/tmp/image.jpg", "new.jpg");    // optional name\r
-$mail->IsHTML(true);                                  // set email format to HTML\r
-\r
-$mail->Subject = "Here is the subject";\r
-$mail->Body    = "This is the HTML message body <b>in bold!</b>";\r
-$mail->AltBody = "This is the body in plain text for non-HTML mail clients";\r
-\r
-if(!$mail->Send())\r
-{\r
-   echo "Message could not be sent. <p>";\r
-   echo "Mailer Error: " . $mail->ErrorInfo;\r
-   exit;\r
-}\r
-\r
-echo "Message has been sent";\r
-?>\r
-\r
-CHANGELOG\r
-\r
-See ChangeLog.txt\r
-\r
-Download: http://sourceforge.net/project/showfiles.php?group_id=26031\r
-\r
-Andy Prevost\r
+/*******************************************************************
+* The http://phpmailer.codeworxtech.com/ website now carries a few *
+* advertisements through the Google Adsense network. Please visit  *
+* the advertiser sites and help us offset some of our costs.       *
+* Thanks ....                                                      *
+********************************************************************/
+
+PHPMailer
+Full Featured Email Transfer Class for PHP
+==========================================
+
+Version 2.3 (November 08, 2008)
+
+We have removed the /phpdoc from the downloads. All documentation is now on
+the http://phpmailer.codeworxtech.com website.
+
+The phpunit.php has been updated to support PHP5.
+
+For all other changes and notes, please see the changelog.
+
+Donations are accepted at PayPal with our id "paypal@worxteam.com".
+
+Version 2.2 (July 15 2008)
+
+- see the changelog.
+
+Version 2.1 (June 04 2008)
+
+With this release, we are announcing that the development of PHPMailer for PHP5
+will be our focus from this date on. We have implemented all the enhancements
+and fixes from the latest release of PHPMailer for PHP4.
+
+Far more important, though, is that this release of PHPMailer (v2.1) is
+fully tested with E_STRICT error checking enabled.
+
+** NOTE: WE HAVE A NEW LANGUAGE VARIABLE FOR DIGITALLY SIGNED S/MIME EMAILS.
+   IF YOU CAN HELP WITH LANGUAGES OTHER THAN ENGLISH AND SPANISH, IT WOULD BE
+   APPRECIATED.
+
+We have now added S/MIME functionality (ability to digitally sign emails).
+BIG THANKS TO "sergiocambra" for posting this patch back in November 2007.
+The "Signed Emails" functionality adds the Sign method to pass the private key
+filename and the password to read it, and then email will be sent with
+content-type multipart/signed and with the digital signature attached.
+
+A quick note on E_STRICT:
+
+- In about half the test environments the development version was subjected
+  to, an error was thrown for the date() functions (used at line 1565 and 1569).
+  This is NOT a PHPMailer error, it is the result of an incorrectly configured
+  PHP5 installation. The fix is to modify your 'php.ini' file and include the
+  date.timezone = America/New York
+  directive, (for your own server timezone)
+- If you do get this error, and are unable to access your php.ini file, there is
+  a workaround. In your PHP script, add
+  date_default_timezone_set('America/Toronto');
+
+  * do NOT try to use
+  $myVar = date_default_timezone_get();
+  as a test, it will throw an error.
+
+We have also included more example files to show the use of "sendmail", "mail()",
+"smtp", and "gmail".
+
+We are also looking for more programmers to join the volunteer development team.
+If you have an interest in this, please let us know.
+
+Enjoy!
+
+
+Version 2.1.0beta1 & beta2
+
+please note, this is BETA software
+** DO NOT USE THIS IN PRODUCTION OR LIVE PROJECTS
+INTENDED STRICTLY FOR TESTING
+
+** NOTE:
+
+As of November 2007, PHPMailer has a new project team headed by industry
+veteran Andy Prevost (codeworxtech). The first release in more than two
+years will focus on fixes, adding ease-of-use enhancements, provide
+basic compatibility with PHP4 and PHP5 using PHP5 backwards compatibility
+features. A new release is planned before year-end 2007 that will provide
+full compatiblity with PHP4 and PHP5, as well as more bug fixes.
+
+We are looking for project developers to assist in restoring PHPMailer to
+its leadership position. Our goals are to simplify use of PHPMailer, provide
+good documentation and examples, and retain backward compatibility to level
+1.7.3 standards.
+
+If you are interested in helping out, visit http://sourceforge.net/projects/phpmailer
+and indicate your interest.
+
+**
+
+http://phpmailer.sourceforge.net/
+
+This software is licenced under the LGPL.  Please read LICENSE for information on the
+software availability and distribution.
+
+Class Features:
+- Send emails with multiple TOs, CCs, BCCs and REPLY-TOs
+- Redundant SMTP servers
+- Multipart/alternative emails for mail clients that do not read HTML email
+- Support for 8bit, base64, binary, and quoted-printable encoding
+- Uses the same methods as the very popular AspEmail active server (COM) component
+- SMTP authentication
+- Native language support
+- Word wrap, and more!
+
+Why you might need it:
+
+Many PHP developers utilize email in their code.  The only PHP function
+that supports this is the mail() function.  However, it does not expose
+any of the popular features that many email clients use nowadays like
+HTML-based emails and attachments. There are two proprietary
+development tools out there that have all the functionality built into
+easy to use classes: AspEmail(tm) and AspMail.  Both of these
+programs are COM components only available on Windows.  They are also a
+little pricey for smaller projects.
+
+Since I do Linux development I\92ve missed these tools for my PHP coding.
+So I built a version myself that implements the same methods (object
+calls) that the Windows-based components do. It is open source and the
+LGPL license allows you to place the class in your proprietary PHP
+projects.
+
+
+Installation:
+
+Copy class.phpmailer.php into your php.ini include_path. If you are
+using the SMTP mailer then place class.smtp.php in your path as well.
+In the language directory you will find several files like
+phpmailer.lang-en.php.  If you look right before the .php extension
+that there are two letters.  These represent the language type of the
+translation file.  For instance "en" is the English file and "br" is
+the Portuguese file.  Chose the file that best fits with your language
+and place it in the PHP include path.  If your language is English
+then you have nothing more to do.  If it is a different language then
+you must point PHPMailer to the correct translation.  To do this, call
+the PHPMailer SetLanguage method like so:
+
+// To load the Portuguese version
+$mail->SetLanguage("br", "/optional/path/to/language/directory/");
+
+That's it.  You should now be ready to use PHPMailer!
+
+
+A Simple Example:
+
+<?php
+require("class.phpmailer.php");
+
+$mail = new PHPMailer();
+
+$mail->IsSMTP();                                      // set mailer to use SMTP
+$mail->Host = "smtp1.example.com;smtp2.example.com";  // specify main and backup server
+$mail->SMTPAuth = true;     // turn on SMTP authentication
+$mail->Username = "jswan";  // SMTP username
+$mail->Password = "secret"; // SMTP password
+
+$mail->From = "from@example.com";
+$mail->FromName = "Mailer";
+$mail->AddAddress("josh@example.net", "Josh Adams");
+$mail->AddAddress("ellen@example.com");                  // name is optional
+$mail->AddReplyTo("info@example.com", "Information");
+
+$mail->WordWrap = 50;                                 // set word wrap to 50 characters
+$mail->AddAttachment("/var/tmp/file.tar.gz");         // add attachments
+$mail->AddAttachment("/tmp/image.jpg", "new.jpg");    // optional name
+$mail->IsHTML(true);                                  // set email format to HTML
+
+$mail->Subject = "Here is the subject";
+$mail->Body    = "This is the HTML message body <b>in bold!</b>";
+$mail->AltBody = "This is the body in plain text for non-HTML mail clients";
+
+if(!$mail->Send())
+{
+   echo "Message could not be sent. <p>";
+   echo "Mailer Error: " . $mail->ErrorInfo;
+   exit;
+}
+
+echo "Message has been sent";
+?>
+
+CHANGELOG
+
+See ChangeLog.txt
+
+Download: http://sourceforge.net/project/showfiles.php?group_id=26031
+
+Andy Prevost
index f7c3200..310f97a 100644 (file)
-<html>\r
-<head>\r
-<title>Examples using phpmailer</title>\r
-</head>\r
-\r
-<body bgcolor="#FFFFFF">\r
-\r
-<h2>Examples using phpmailer</h2>\r
-\r
-<h3>1. Advanced Example</h3>\r
-<p>\r
-\r
-This demonstrates sending out multiple email messages with binary attachments\r
-from a MySQL database with multipart/alternative support.<p>\r
-<table cellpadding="4" border="1" width="80%">\r
-<tr>\r
-<td bgcolor="#CCCCCC">\r
-<pre>\r
-require("class.phpmailer.php");\r
-\r
-$mail = new phpmailer();\r
-\r
-$mail->From     = "list@example.com";\r
-$mail->FromName = "List manager";\r
-$mail->Host     = "smtp1.example.com;smtp2.example.com";\r
-$mail->Mailer   = "smtp";\r
-\r
-@MYSQL_CONNECT("localhost","root","password");\r
-@mysql_select_db("my_company");\r
-$query  = "SELECT full_name, email, photo FROM employee WHERE id=$id";\r
-$result = @MYSQL_QUERY($query);\r
-\r
-while ($row = mysql_fetch_array ($result))\r
-{\r
-    // HTML body\r
-    $body  = "Hello &lt;font size=\"4\"&gt;" . $row["full_name"] . "&lt;/font&gt;, &lt;p&gt;";\r
-    $body .= "&lt;i&gt;Your&lt;/i&gt; personal photograph to this message.&lt;p&gt;";\r
-    $body .= "Sincerely, &lt;br&gt;";\r
-    $body .= "phpmailer List manager";\r
-\r
-    // Plain text body (for mail clients that cannot read HTML)\r
-    $text_body  = "Hello " . $row["full_name"] . ", \n\n";\r
-    $text_body .= "Your personal photograph to this message.\n\n";\r
-    $text_body .= "Sincerely, \n";\r
-    $text_body .= "phpmailer List manager";\r
-\r
-    $mail->Body    = $body;\r
-    $mail->AltBody = $text_body;\r
-    $mail->AddAddress($row["email"], $row["full_name"]);\r
-    $mail->AddStringAttachment($row["photo"], "YourPhoto.jpg");\r
-\r
-    if(!$mail->Send())\r
-        echo "There has been a mail error sending to " . $row["email"] . "&lt;br&gt;";\r
-\r
-    // Clear all addresses and attachments for next loop\r
-    $mail->ClearAddresses();\r
-    $mail->ClearAttachments();\r
-}\r
-</pre>\r
-</td>\r
-</tr>\r
-</table>\r
-<p>\r
-\r
-<h3>2. Extending phpmailer</h3>\r
-<p>\r
-\r
-Extending classes with inheritance is one of the most\r
-powerful features of object-oriented\r
-programming.  It allows you to make changes to the\r
-original class for your\r
-own personal use without hacking the original\r
-classes.  Plus, it is very\r
-easy to do. I've provided an example:\r
-\r
-<p>\r
-Here's a class that extends the phpmailer class and sets the defaults\r
-for the particular site:<br>\r
-PHP include file: <b>mail.inc.php</b>\r
-<p>\r
-\r
-<table cellpadding="4" border="1" width="80%">\r
-<tr>\r
-<td bgcolor="#CCCCCC">\r
-<pre>\r
-require("class.phpmailer.php");\r
-\r
-class my_phpmailer extends phpmailer {\r
-    // Set default variables for all new objects\r
-    var $From     = "from@example.com";\r
-    var $FromName = "Mailer";\r
-    var $Host     = "smtp1.example.com;smtp2.example.com";\r
-    var $Mailer   = "smtp";                         // Alternative to IsSMTP()\r
-    var $WordWrap = 75;\r
-\r
-    // Replace the default error_handler\r
-    function error_handler($msg) {\r
-        print("My Site Error");\r
-        print("Description:");\r
-        printf("%s", $msg);\r
-        exit;\r
-    }\r
-\r
-    // Create an additional function\r
-    function do_something($something) {\r
-        // Place your new code here\r
-    }\r
-}\r
-</td>\r
-</tr>\r
-</table>\r
-<br>\r
-\r
-Now here's a normal PHP page in the site, which will have all the defaults set\r
-above:<br>\r
-Normal PHP file: <b>mail_test.php</b>\r
-<p>\r
-\r
-<table cellpadding="4" border="1" width="80%">\r
-<tr>\r
-<td bgcolor="#CCCCCC">\r
-<pre>\r
-require("mail.inc.php");\r
-\r
-// Instantiate your new class\r
-$mail = new my_phpmailer;\r
-\r
-// Now you only need to add the necessary stuff\r
-$mail->AddAddress("josh@example.com", "Josh Adams");\r
-$mail->Subject = "Here is the subject";\r
-$mail->Body    = "This is the message body";\r
-$mail->AddAttachment("c:/temp/11-10-00.zip", "new_name.zip");  // optional name\r
-\r
-if(!$mail->Send())\r
-{\r
-   echo "There was an error sending the message";\r
-   exit;\r
-}\r
-\r
-echo "Message was sent successfully";\r
-</pre>\r
-</td>\r
-</tr>\r
-</table>\r
-</p>\r
-\r
-</body>\r
-</html>\r
+<html>
+<head>
+<title>Examples using phpmailer</title>
+</head>
+
+<body bgcolor="#FFFFFF">
+
+<h2>Examples using phpmailer</h2>
+
+<h3>1. Advanced Example</h3>
+<p>
+
+This demonstrates sending out multiple email messages with binary attachments
+from a MySQL database with multipart/alternative support.<p>
+<table cellpadding="4" border="1" width="80%">
+<tr>
+<td bgcolor="#CCCCCC">
+<pre>
+require("class.phpmailer.php");
+
+$mail = new phpmailer();
+
+$mail->From     = "list@example.com";
+$mail->FromName = "List manager";
+$mail->Host     = "smtp1.example.com;smtp2.example.com";
+$mail->Mailer   = "smtp";
+
+@MYSQL_CONNECT("localhost","root","password");
+@mysql_select_db("my_company");
+$query  = "SELECT full_name, email, photo FROM employee WHERE id=$id";
+$result = @MYSQL_QUERY($query);
+
+while ($row = mysql_fetch_array ($result))
+{
+    // HTML body
+    $body  = "Hello &lt;font size=\"4\"&gt;" . $row["full_name"] . "&lt;/font&gt;, &lt;p&gt;";
+    $body .= "&lt;i&gt;Your&lt;/i&gt; personal photograph to this message.&lt;p&gt;";
+    $body .= "Sincerely, &lt;br&gt;";
+    $body .= "phpmailer List manager";
+
+    // Plain text body (for mail clients that cannot read HTML)
+    $text_body  = "Hello " . $row["full_name"] . ", \n\n";
+    $text_body .= "Your personal photograph to this message.\n\n";
+    $text_body .= "Sincerely, \n";
+    $text_body .= "phpmailer List manager";
+
+    $mail->Body    = $body;
+    $mail->AltBody = $text_body;
+    $mail->AddAddress($row["email"], $row["full_name"]);
+    $mail->AddStringAttachment($row["photo"], "YourPhoto.jpg");
+
+    if(!$mail->Send())
+        echo "There has been a mail error sending to " . $row["email"] . "&lt;br&gt;";
+
+    // Clear all addresses and attachments for next loop
+    $mail->ClearAddresses();
+    $mail->ClearAttachments();
+}
+</pre>
+</td>
+</tr>
+</table>
+<p>
+
+<h3>2. Extending phpmailer</h3>
+<p>
+
+Extending classes with inheritance is one of the most
+powerful features of object-oriented
+programming.  It allows you to make changes to the
+original class for your
+own personal use without hacking the original
+classes.  Plus, it is very
+easy to do. I've provided an example:
+
+<p>
+Here's a class that extends the phpmailer class and sets the defaults
+for the particular site:<br>
+PHP include file: <b>mail.inc.php</b>
+<p>
+
+<table cellpadding="4" border="1" width="80%">
+<tr>
+<td bgcolor="#CCCCCC">
+<pre>
+require("class.phpmailer.php");
+
+class my_phpmailer extends phpmailer {
+    // Set default variables for all new objects
+    var $From     = "from@example.com";
+    var $FromName = "Mailer";
+    var $Host     = "smtp1.example.com;smtp2.example.com";
+    var $Mailer   = "smtp";                         // Alternative to IsSMTP()
+    var $WordWrap = 75;
+
+    // Replace the default error_handler
+    function error_handler($msg) {
+        print("My Site Error");
+        print("Description:");
+        printf("%s", $msg);
+        exit;
+    }
+
+    // Create an additional function
+    function do_something($something) {
+        // Place your new code here
+    }
+}
+</td>
+</tr>
+</table>
+<br>
+
+Now here's a normal PHP page in the site, which will have all the defaults set
+above:<br>
+Normal PHP file: <b>mail_test.php</b>
+<p>
+
+<table cellpadding="4" border="1" width="80%">
+<tr>
+<td bgcolor="#CCCCCC">
+<pre>
+require("mail.inc.php");
+
+// Instantiate your new class
+$mail = new my_phpmailer;
+
+// Now you only need to add the necessary stuff
+$mail->AddAddress("josh@example.com", "Josh Adams");
+$mail->Subject = "Here is the subject";
+$mail->Body    = "This is the message body";
+$mail->AddAttachment("c:/temp/11-10-00.zip", "new_name.zip");  // optional name
+
+if(!$mail->Send())
+{
+   echo "There was an error sending the message";
+   exit;
+}
+
+echo "Message was sent successfully";
+</pre>
+</td>
+</tr>
+</table>
+</p>
+
+</body>
+</html>
index 54ac183..f71c6c8 100644 (file)
@@ -1,67 +1,67 @@
-<html>\r
-<head>\r
-<title>PHPMailer FAQ</title>\r
-<style>\r
-body, p {\r
-  font-family: Arial, Helvetica, sans-serif;\r
-  font-size: 12px;\r
-}\r
-div.width {\r
-  width: 500px;\r
-  text-align: left;\r
-}\r
-</style>\r
-</head>\r
-<body bgcolor="#FFFFFF">\r
-<center>\r
-<div class="width">\r
-<h2>PHPMailer FAQ</h2>\r
-<ul>\r
-\r
-  <li><b style="background-color: #FFFF00">Q:</b> <b>I&#039;m using the SMTP mailer and I keep on getting a timeout message\r
-  well before the X seconds I set it for.  What gives?</b><br />\r
-  <b style="background-color: #FFFF00">A:</b> PHP versions 4.0.4pl1 and earlier have a bug in which sockets timeout\r
-  early.  You can fix this by re-compiling PHP 4.0.4pl1 with this fix:\r
-  <a href="timeoutfix.diff">timeoutfix.diff</a>. Otherwise you can wait for the new PHP release.<br /><br /></li>\r
-\r
-  <li><b style="background-color: #FFFF00">Q:</b> <b>I am concerned that using include files will take up too much\r
-  processing time on my computer.  How can I make it run faster?</b><br />\r
-  <b style="background-color: #FFFF00">A:</b>  PHP by itself is very fast.  Much faster than ASP or JSP running on\r
-  the same type of server.  This is because it has very little overhead compared\r
-  to its competitors and it pre-compiles all of\r
-  its code before it runs each script (in PHP4).  However, all of\r
-  this compiling and re-compiling can take up a lot of valuable\r
-  computer resources.  However, there are programs out there that compile\r
-  PHP code and store it in memory (or on mmaped files) to reduce the\r
-  processing immensely.  Two of these: <a href="http://apc.communityconnect.com">APC\r
-  (Alternative PHP Cache)</a> and <a href="http://bwcache.bware.it/index.htm">Afterburner</a>\r
-  (<a href="http://www.mm4.de/php4win/mod_php4_win32/">Win32 download</a>)\r
-  are excellent free tools that do just this.  If you have the money\r
-  you might also try <a href="http://www.zend.com">Zend Cache</a>, it is\r
-  even faster than the open source varieties.  All of these tools make your\r
-  scripts run faster while also reducing the load on your server. I have tried\r
-  them myself and they are quite stable too.<br /><br /></li>\r
-\r
-  <li><b style="background-color: #FFFF00">Q:</b> <b>What mailer gives me the best performance?</b><br />\r
-  <b style="background-color: #FFFF00">A:</b> On a single machine the <b>sendmail (or Qmail)</b> is fastest overall.\r
-  Next fastest is mail() to give you the best performance. Both do not have the overhead of SMTP.\r
-  If you have you have your mail server on a another machine then\r
-  SMTP is your only option, but you do get the benefit of redundant mail servers.<br />\r
-  If you are running a mailing list with thousands of names, the fastest mailers in order are: SMTP, sendmail (or Qmail), mail().<br /><br /></li>\r
-\r
-  <li><b style="background-color: #FFFF00">Q:</b> <b>When I try to attach a file with on my server I get a\r
-  "Could not find {file} on filesystem error".  Why is this?</b><br />\r
-  <b style="background-color: #FFFF00">A:</b> If you are using a Unix machine this is probably because the user\r
-  running your web server does not have read access to the directory in question.  If you are using Windows,\r
-  then the problem probably is that you have used single backslashes to denote directories (\).\r
-  A single backslash has a special meaning to PHP so these are not\r
-  valid.  Instead use double backslashes ("\\") or a single forward\r
-  slash ("/").<br /><br /></li>\r
-\r
-</ul>\r
-\r
-</div>\r
-</center>\r
-\r
-</body>\r
-</html>\r
+<html>
+<head>
+<title>PHPMailer FAQ</title>
+<style>
+body, p {
+  font-family: Arial, Helvetica, sans-serif;
+  font-size: 12px;
+}
+div.width {
+  width: 500px;
+  text-align: left;
+}
+</style>
+</head>
+<body bgcolor="#FFFFFF">
+<center>
+<div class="width">
+<h2>PHPMailer FAQ</h2>
+<ul>
+
+  <li><b style="background-color: #FFFF00">Q:</b> <b>I&#039;m using the SMTP mailer and I keep on getting a timeout message
+  well before the X seconds I set it for.  What gives?</b><br />
+  <b style="background-color: #FFFF00">A:</b> PHP versions 4.0.4pl1 and earlier have a bug in which sockets timeout
+  early.  You can fix this by re-compiling PHP 4.0.4pl1 with this fix:
+  <a href="timeoutfix.diff">timeoutfix.diff</a>. Otherwise you can wait for the new PHP release.<br /><br /></li>
+
+  <li><b style="background-color: #FFFF00">Q:</b> <b>I am concerned that using include files will take up too much
+  processing time on my computer.  How can I make it run faster?</b><br />
+  <b style="background-color: #FFFF00">A:</b>  PHP by itself is very fast.  Much faster than ASP or JSP running on
+  the same type of server.  This is because it has very little overhead compared
+  to its competitors and it pre-compiles all of
+  its code before it runs each script (in PHP4).  However, all of
+  this compiling and re-compiling can take up a lot of valuable
+  computer resources.  However, there are programs out there that compile
+  PHP code and store it in memory (or on mmaped files) to reduce the
+  processing immensely.  Two of these: <a href="http://apc.communityconnect.com">APC
+  (Alternative PHP Cache)</a> and <a href="http://bwcache.bware.it/index.htm">Afterburner</a>
+  (<a href="http://www.mm4.de/php4win/mod_php4_win32/">Win32 download</a>)
+  are excellent free tools that do just this.  If you have the money
+  you might also try <a href="http://www.zend.com">Zend Cache</a>, it is
+  even faster than the open source varieties.  All of these tools make your
+  scripts run faster while also reducing the load on your server. I have tried
+  them myself and they are quite stable too.<br /><br /></li>
+
+  <li><b style="background-color: #FFFF00">Q:</b> <b>What mailer gives me the best performance?</b><br />
+  <b style="background-color: #FFFF00">A:</b> On a single machine the <b>sendmail (or Qmail)</b> is fastest overall.
+  Next fastest is mail() to give you the best performance. Both do not have the overhead of SMTP.
+  If you have you have your mail server on a another machine then
+  SMTP is your only option, but you do get the benefit of redundant mail servers.<br />
+  If you are running a mailing list with thousands of names, the fastest mailers in order are: SMTP, sendmail (or Qmail), mail().<br /><br /></li>
+
+  <li><b style="background-color: #FFFF00">Q:</b> <b>When I try to attach a file with on my server I get a
+  "Could not find {file} on filesystem error".  Why is this?</b><br />
+  <b style="background-color: #FFFF00">A:</b> If you are using a Unix machine this is probably because the user
+  running your web server does not have read access to the directory in question.  If you are using Windows,
+  then the problem probably is that you have used single backslashes to denote directories (\).
+  A single backslash has a special meaning to PHP so these are not
+  valid.  Instead use double backslashes ("\\") or a single forward
+  slash ("/").<br /><br /></li>
+
+</ul>
+
+</div>
+</center>
+
+</body>
+</html>
index 70c7e30..3efbda2 100644 (file)
@@ -1,12 +1,12 @@
-<body background="images/bkgrnd.gif" style="margin: 0px;">\r
-<div style="width: 640px; font-family: Arial, Helvetica, sans-serif; font-size: 11px;">\r
-<div align="center"><img src="images/phpmailer.gif" style="height: 90px; width: 340px"></div><br>\r
-<br>\r
-&nbsp;This is a test of PHPMailer v2.0.0 rc1.<br>\r
-<br>\r
-This particular example uses <strong>HTML</strong>, with a &lt;div&gt; tag and inline<br>\r
-styles.<br>\r
-<br>\r
-Also note the use of the PHPMailer at the top with no specific code to handle\r
-including it in the body of the email.</div>\r
-</body>\r
+<body background="images/bkgrnd.gif" style="margin: 0px;">
+<div style="width: 640px; font-family: Arial, Helvetica, sans-serif; font-size: 11px;">
+<div align="center"><img src="images/phpmailer.gif" style="height: 90px; width: 340px"></div><br>
+<br>
+&nbsp;This is a test of PHPMailer v2.0.0 rc1.<br>
+<br>
+This particular example uses <strong>HTML</strong>, with a &lt;div&gt; tag and inline<br>
+styles.<br>
+<br>
+Also note the use of the PHPMailer at the top with no specific code to handle
+including it in the body of the email.</div>
+</body>
index d0a8b9d..3ac45d3 100644 (file)
@@ -1,73 +1,73 @@
-<p>The example file &quot;test_mail.php&quot; contents include:</p>\r
-<div style="width: 600px; background-color: #CCCCCC;">\r
-<code>\r
-&lt;?php<br>\r
-<br>\r
-include_once('../class.phpmailer.php');<br>\r
-<br>\r
-$mail    = new PHPMailer();<br>\r
-<br>\r
-$body    = $mail->getFile('contents.html');<br>\r
-<br>\r
-$body    = eregi_replace("[\]",'',$body);<br>\r
-$subject = eregi_replace("[\]",'',$subject);<br>\r
-<br>\r
-$mail->From     = "name@yourdomain.com";<br>\r
-$mail->FromName = "First Last";<br>\r
-<br>\r
-$mail->Subject = "PHPMailer Test Subject";<br>\r
-<br>\r
-$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test<br>\r
-<br>\r
-$mail->MsgHTML($body);<br>\r
-<br>\r
-$mail->AddAddress("whoto@otherdomain.com", "John Doe");<br>\r
-<br>\r
-if(!$mail->Send()) {<br>\r
-  echo 'Failed to send mail';<br>\r
-} else {<br>\r
-  echo 'Mail sent';<br>\r
-}<br>\r
-<br>\r
-?&gt;\r
-</code>\r
-</div>\r
-<br>\r
-Although you could use full compabitility with PHPMailer 1.7.3, this example\r
-shows how to use the new features. If you view 'contents.html', you will note\r
-that there is a background image used in the &lt;body tag as well as an image used\r
-with a regular &lt;img tag. Here&#39;s what the HTML file looks like:<br>\r
-<br>\r
-<div style="width: 600px; background-color: #CCCCCC;">\r
-<code>\r
-&lt;body background="images/bkgrnd.gif" style="margin: 0px;"&gt;<br>\r
-&lt;div style="width: 640px; font-family: Arial, Helvetica, sans-serif; font-size: 11px;"&gt;<br>\r
-&lt;div align="center"&gt;&lt;img src="images/phpmailer.gif" style="height: 90px; width: 340px"&gt;&lt;/div&gt;&lt;br&gt;<br>\r
-&lt;br&gt;<br>\r
-&nbsp;This is a test of PHPMailer v2.0.0 rc1.&lt;br&gt;<br>\r
-&lt;br&gt;<br>\r
-This particular example uses &lt;strong&gt;HTML&lt;/strong&gt;, with a &lt;div&gt; tag and inline&lt;br&gt;<br>\r
-styles.&lt;br&gt;<br>\r
-&lt;br&gt;<br>\r
-Also note the use of the PHPMailer at the top with no specific code to handle<br>\r
-including it in the body of the email.&lt;/div&gt;<br>\r
-&lt;/body&gt;<br>\r
-</code>\r
-</div>\r
-<br>\r
-A few things to notice in the PHP script that generates the email:\r
-<ul>\r
-  <li>the use of $mail-&gt;AltBody is completely optional. If not used, PHPMailer\r
-  will use the HTML text with htmlentities().</li>\r
-  <li>the background= and &lt;img src= images were processed without any directives\r
-  or methods from the PHP script</li>\r
-  <li>there is no specific code to define the image type ... that is handled\r
-  automatically by PHPMailer when it parses the images</li>\r
-  <li>we are using a new class method '$mail->MsgHTML($body)' ... that is what will handle the parsing of the images and creating the AltBody text</li>\r
-</ul>\r
-<p>Of course, you can still use PHPMailer the same way you have in the past.\r
-That provides full compatibility with all existing scripts, while new scripts\r
-can take advantage of the new features.</p>\r
-<p>Modify test_mail.php now with your own email address and try it out.</p>\r
-To see what the email SHOULD look like in your HTML compatible email viewer: <a href="contents.html">click here</a><br>\r
-\r
+<p>The example file &quot;test_mail.php&quot; contents include:</p>
+<div style="width: 600px; background-color: #CCCCCC;">
+<code>
+&lt;?php<br>
+<br>
+include_once('../class.phpmailer.php');<br>
+<br>
+$mail    = new PHPMailer();<br>
+<br>
+$body    = $mail->getFile('contents.html');<br>
+<br>
+$body    = eregi_replace("[\]",'',$body);<br>
+$subject = eregi_replace("[\]",'',$subject);<br>
+<br>
+$mail->From     = "name@yourdomain.com";<br>
+$mail->FromName = "First Last";<br>
+<br>
+$mail->Subject = "PHPMailer Test Subject";<br>
+<br>
+$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test<br>
+<br>
+$mail->MsgHTML($body);<br>
+<br>
+$mail->AddAddress("whoto@otherdomain.com", "John Doe");<br>
+<br>
+if(!$mail->Send()) {<br>
+  echo 'Failed to send mail';<br>
+} else {<br>
+  echo 'Mail sent';<br>
+}<br>
+<br>
+?&gt;
+</code>
+</div>
+<br>
+Although you could use full compabitility with PHPMailer 1.7.3, this example
+shows how to use the new features. If you view 'contents.html', you will note
+that there is a background image used in the &lt;body tag as well as an image used
+with a regular &lt;img tag. Here&#39;s what the HTML file looks like:<br>
+<br>
+<div style="width: 600px; background-color: #CCCCCC;">
+<code>
+&lt;body background="images/bkgrnd.gif" style="margin: 0px;"&gt;<br>
+&lt;div style="width: 640px; font-family: Arial, Helvetica, sans-serif; font-size: 11px;"&gt;<br>
+&lt;div align="center"&gt;&lt;img src="images/phpmailer.gif" style="height: 90px; width: 340px"&gt;&lt;/div&gt;&lt;br&gt;<br>
+&lt;br&gt;<br>
+&nbsp;This is a test of PHPMailer v2.0.0 rc1.&lt;br&gt;<br>
+&lt;br&gt;<br>
+This particular example uses &lt;strong&gt;HTML&lt;/strong&gt;, with a &lt;div&gt; tag and inline&lt;br&gt;<br>
+styles.&lt;br&gt;<br>
+&lt;br&gt;<br>
+Also note the use of the PHPMailer at the top with no specific code to handle<br>
+including it in the body of the email.&lt;/div&gt;<br>
+&lt;/body&gt;<br>
+</code>
+</div>
+<br>
+A few things to notice in the PHP script that generates the email:
+<ul>
+  <li>the use of $mail-&gt;AltBody is completely optional. If not used, PHPMailer
+  will use the HTML text with htmlentities().</li>
+  <li>the background= and &lt;img src= images were processed without any directives
+  or methods from the PHP script</li>
+  <li>there is no specific code to define the image type ... that is handled
+  automatically by PHPMailer when it parses the images</li>
+  <li>we are using a new class method '$mail->MsgHTML($body)' ... that is what will handle the parsing of the images and creating the AltBody text</li>
+</ul>
+<p>Of course, you can still use PHPMailer the same way you have in the past.
+That provides full compatibility with all existing scripts, while new scripts
+can take advantage of the new features.</p>
+<p>Modify test_mail.php now with your own email address and try it out.</p>
+To see what the email SHOULD look like in your HTML compatible email viewer: <a href="contents.html">click here</a><br>
+
index 22d6f42..ffbe4bd 100644 (file)
-<?php\r
-/*******************\r
-  Unit Test\r
-  Type: phpmailer class\r
-********************/\r
-\r
-$INCLUDE_DIR = "../";\r
-\r
-require("phpunit.php");\r
-require($INCLUDE_DIR . "class.phpmailer.php");\r
-error_reporting(E_ALL);\r
-\r
-/**\r
- * Performs authentication tests\r
- */\r
-class phpmailerTest extends TestCase\r
-{\r
-    /**\r
-     * Holds the default phpmailer instance.\r
-     * @private\r
-     * @type object\r
-     */\r
-    var $Mail = false;\r
-\r
-    /**\r
-     * Holds the SMTP mail host.\r
-     * @public\r
-     * @type string\r
-     */\r
-    var $Host = "";\r
-    \r
-    /**\r
-     * Holds the change log.\r
-     * @private\r
-     * @type string array\r
-     */\r
-    var $ChangeLog = array();\r
-    \r
-     /**\r
-     * Holds the note log.\r
-     * @private\r
-     * @type string array\r
-     */\r
-    var $NoteLog = array();   \r
-\r
-    /**\r
-     * Class constuctor.\r
-     */\r
-    function phpmailerTest($name) {\r
-        /* must define this constructor */\r
-        $this->TestCase( $name );\r
-    }\r
-    \r
-    /**\r
-     * Run before each test is started.\r
-     */\r
-    function setUp() {\r
-        global $global_vars;\r
-        global $INCLUDE_DIR;\r
-\r
-        $this->Mail = new PHPMailer();\r
-\r
-        $this->Mail->Priority = 3;\r
-        $this->Mail->Encoding = "8bit";\r
-        $this->Mail->CharSet = "iso-8859-1";\r
-        $this->Mail->From = "unit_test@phpmailer.sf.net";\r
-        $this->Mail->FromName = "Unit Tester";\r
-        $this->Mail->Sender = "";\r
-        $this->Mail->Subject = "Unit Test";\r
-        $this->Mail->Body = "";\r
-        $this->Mail->AltBody = "";\r
-        $this->Mail->WordWrap = 0;\r
-        $this->Mail->Host = $global_vars["mail_host"];\r
-        $this->Mail->Port = 25;\r
-        $this->Mail->Helo = "localhost.localdomain";\r
-        $this->Mail->SMTPAuth = false;\r
-        $this->Mail->Username = "";\r
-        $this->Mail->Password = "";\r
-        $this->Mail->PluginDir = $INCLUDE_DIR;\r
-               $this->Mail->AddReplyTo("no_reply@phpmailer.sf.net", "Reply Guy");\r
-        $this->Mail->Sender = "unit_test@phpmailer.sf.net";\r
-\r
-        if(strlen($this->Mail->Host) > 0)\r
-            $this->Mail->Mailer = "smtp";\r
-        else\r
-        {\r
-            $this->Mail->Mailer = "mail";\r
-            $this->Sender = "unit_test@phpmailer.sf.net";\r
-        }\r
-        \r
-        global $global_vars;\r
-        $this->SetAddress($global_vars["mail_to"], "Test User");\r
-        if(strlen($global_vars["mail_cc"]) > 0)\r
-            $this->SetAddress($global_vars["mail_cc"], "Carbon User", "cc");\r
-    }     \r
-\r
-    /**\r
-     * Run after each test is completed.\r
-     */\r
-    function tearDown() {\r
-        // Clean global variables\r
-        $this->Mail = NULL;\r
-        $this->ChangeLog = array();\r
-        $this->NoteLog = array();\r
-    }\r
-\r
-\r
-    /**\r
-     * Build the body of the message in the appropriate format.\r
-     * @private\r
-     * @returns void\r
-     */\r
-    function BuildBody() {\r
-        $this->CheckChanges();\r
-        \r
-        // Determine line endings for message        \r
-        if($this->Mail->ContentType == "text/html" || strlen($this->Mail->AltBody) > 0)\r
-        {\r
-            $eol = "<br/>";\r
-            $bullet = "<li>";\r
-            $bullet_start = "<ul>";\r
-            $bullet_end = "</ul>";\r
-        }\r
-        else\r
-        {\r
-            $eol = "\n";\r
-            $bullet = " - ";\r
-            $bullet_start = "";\r
-            $bullet_end = "";\r
-        }\r
-        \r
-        $ReportBody = "";\r
-        \r
-        $ReportBody .= "---------------------" . $eol;\r
-        $ReportBody .= "Unit Test Information" . $eol;\r
-        $ReportBody .= "---------------------" . $eol;\r
-        $ReportBody .= "phpmailer version: " . $this->Mail->Version . $eol;\r
-        $ReportBody .= "Content Type: " . $this->Mail->ContentType . $eol;\r
-        \r
-        if(strlen($this->Mail->Host) > 0)\r
-            $ReportBody .= "Host: " . $this->Mail->Host . $eol;\r
-        \r
-        // If attachments then create an attachment list\r
-        if(count($this->Mail->attachment) > 0)\r
-        {\r
-            $ReportBody .= "Attachments:" . $eol;\r
-            $ReportBody .= $bullet_start;\r
-            for($i = 0; $i < count($this->Mail->attachment); $i++)\r
-            {\r
-                $ReportBody .= $bullet . "Name: " . $this->Mail->attachment[$i][1] . ", ";\r
-                $ReportBody .= "Encoding: " . $this->Mail->attachment[$i][3] . ", ";\r
-                $ReportBody .= "Type: " . $this->Mail->attachment[$i][4] . $eol;\r
-            }\r
-            $ReportBody .= $bullet_end . $eol;\r
-        }\r
-        \r
-        // If there are changes then list them\r
-        if(count($this->ChangeLog) > 0)\r
-        {\r
-            $ReportBody .= "Changes" . $eol;\r
-            $ReportBody .= "-------" . $eol;\r
-\r
-            $ReportBody .= $bullet_start;\r
-            for($i = 0; $i < count($this->ChangeLog); $i++)\r
-            {\r
-                $ReportBody .= $bullet . $this->ChangeLog[$i][0] . " was changed to [" . \r
-                               $this->ChangeLog[$i][1] . "]" . $eol;\r
-            }\r
-            $ReportBody .= $bullet_end . $eol . $eol;\r
-        }\r
-        \r
-        // If there are notes then list them\r
-        if(count($this->NoteLog) > 0)\r
-        {\r
-            $ReportBody .= "Notes" . $eol;\r
-            $ReportBody .= "-----" . $eol;\r
-\r
-            $ReportBody .= $bullet_start;\r
-            for($i = 0; $i < count($this->NoteLog); $i++)\r
-            {\r
-                $ReportBody .= $bullet . $this->NoteLog[$i] . $eol;\r
-            }\r
-            $ReportBody .= $bullet_end;\r
-        }\r
-        \r
-        // Re-attach the original body\r
-        $this->Mail->Body .= $eol . $eol . $ReportBody;\r
-    }\r
-    \r
-    /**\r
-     * Check which default settings have been changed for the report.\r
-     * @private\r
-     * @returns void\r
-     */\r
-    function CheckChanges() {\r
-        if($this->Mail->Priority != 3)\r
-            $this->AddChange("Priority", $this->Mail->Priority);\r
-        if($this->Mail->Encoding != "8bit")\r
-            $this->AddChange("Encoding", $this->Mail->Encoding);\r
-        if($this->Mail->CharSet != "iso-8859-1")\r
-            $this->AddChange("CharSet", $this->Mail->CharSet);\r
-        if($this->Mail->Sender != "")\r
-            $this->AddChange("Sender", $this->Mail->Sender);\r
-        if($this->Mail->WordWrap != 0)\r
-            $this->AddChange("WordWrap", $this->Mail->WordWrap);\r
-        if($this->Mail->Mailer != "mail")\r
-            $this->AddChange("Mailer", $this->Mail->Mailer);\r
-        if($this->Mail->Port != 25)\r
-            $this->AddChange("Port", $this->Mail->Port);\r
-        if($this->Mail->Helo != "localhost.localdomain")\r
-            $this->AddChange("Helo", $this->Mail->Helo);\r
-        if($this->Mail->SMTPAuth)\r
-            $this->AddChange("SMTPAuth", "true");\r
-    }\r
-    \r
-    /**\r
-     * Adds a change entry.\r
-     * @private\r
-     * @returns void\r
-     */\r
-    function AddChange($sName, $sNewValue) {\r
-        $cur = count($this->ChangeLog);\r
-        $this->ChangeLog[$cur][0] = $sName;\r
-        $this->ChangeLog[$cur][1] = $sNewValue;\r
-    }\r
-    \r
-    /**\r
-     * Adds a simple note to the message.\r
-     * @public\r
-     * @returns void\r
-     */\r
-    function AddNote($sValue) {\r
-        $this->NoteLog[] = $sValue;\r
-    }\r
-\r
-    /**\r
-     * Adds all of the addresses\r
-     * @public\r
-     * @returns void\r
-     */\r
-    function SetAddress($sAddress, $sName = "", $sType = "to") {\r
-        switch($sType)\r
-        {\r
-            case "to":\r
-                $this->Mail->AddAddress($sAddress, $sName);\r
-                break;\r
-            case "cc":\r
-                $this->Mail->AddCC($sAddress, $sName);\r
-                break;\r
-            case "bcc":\r
-                $this->Mail->AddBCC($sAddress, $sName);\r
-                break;\r
-        }\r
-    }\r
-\r
-    /////////////////////////////////////////////////\r
-    // UNIT TESTS\r
-    /////////////////////////////////////////////////\r
-\r
-    /**\r
-     * Try a plain message.\r
-     */\r
-    function test_WordWrap() {\r
-\r
-        $this->Mail->WordWrap = 40;\r
-        $my_body = "Here is the main body of this message.  It should " .\r
-                   "be quite a few lines.  It should be wrapped at the " .\r
-                   "40 characters.  Make sure that it is.";\r
-        $nBodyLen = strlen($my_body);\r
-        $my_body .= "\n\nThis is the above body length: " . $nBodyLen;\r
-\r
-        $this->Mail->Body = $my_body;\r
-        $this->Mail->Subject .= ": Wordwrap";\r
-\r
-        $this->BuildBody();\r
-        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);\r
-    }\r
-\r
-    /**\r
-     * Try a plain message.\r
-     */\r
-    function test_Low_Priority() {\r
-    \r
-        $this->Mail->Priority = 5;\r
-        $this->Mail->Body = "Here is the main body.  There should be " .\r
-                            "a reply to address in this message.";\r
-        $this->Mail->Subject .= ": Low Priority";\r
-        $this->Mail->AddReplyTo("nobody@nobody.com", "Nobody (Unit Test)");\r
-\r
-        $this->BuildBody();\r
-        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);\r
-    }\r
-\r
-    /**\r
-     * Simple plain file attachment test.\r
-     */\r
-    function test_Multiple_Plain_FileAttachment() {\r
-\r
-        $this->Mail->Body = "Here is the text body";\r
-        $this->Mail->Subject .= ": Plain + Multiple FileAttachments";\r
-\r
-        if(!$this->Mail->AddAttachment("test.png"))\r
-        {\r
-            $this->assert(false, $this->Mail->ErrorInfo);\r
-            return;\r
-        }\r
-\r
-        if(!$this->Mail->AddAttachment("phpmailer_test.php", "test.txt"))\r
-        {\r
-            $this->assert(false, $this->Mail->ErrorInfo);\r
-            return;\r
-        }\r
-\r
-        $this->BuildBody();\r
-        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);\r
-    }\r
-\r
-    /**\r
-     * Simple plain string attachment test.\r
-     */\r
-    function test_Plain_StringAttachment() {\r
-\r
-        $this->Mail->Body = "Here is the text body";\r
-        $this->Mail->Subject .= ": Plain + StringAttachment";\r
-        \r
-        $sAttachment = "These characters are the content of the " .\r
-                       "string attachment.\nThis might be taken from a ".\r
-                       "database or some other such thing. ";\r
-        \r
-        $this->Mail->AddStringAttachment($sAttachment, "string_attach.txt");\r
-\r
-        $this->BuildBody();\r
-        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);\r
-    }\r
-\r
-    /**\r
-     * Plain quoted-printable message.\r
-     */\r
-    function test_Quoted_Printable() {\r
-\r
-        $this->Mail->Body = "Here is the main body";\r
-        $this->Mail->Subject .= ": Plain + Quoted-printable";\r
-        $this->Mail->Encoding = "quoted-printable";\r
-\r
-        $this->BuildBody();\r
-        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);\r
-    }\r
-\r
-    /**\r
-     * Try a plain message.\r
-     */\r
-    function test_Html() {\r
-    \r
-        $this->Mail->IsHTML(true);\r
-        $this->Mail->Subject .= ": HTML only";\r
-        \r
-        $this->Mail->Body = "This is a <b>test message</b> written in HTML. </br>" .\r
-                            "Go to <a href=\"http://phpmailer.sourceforge.net/\">" .\r
-                            "http://phpmailer.sourceforge.net/</a> for new versions of " .\r
-                            "phpmailer.  <p/> Thank you!";\r
-\r
-        $this->BuildBody();\r
-        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);\r
-    }\r
-\r
-    /**\r
-     * Simple HTML and attachment test\r
-     */\r
-    function test_HTML_Attachment() {\r
-\r
-        $this->Mail->Body = "This is the <b>HTML</b> part of the email.";\r
-        $this->Mail->Subject .= ": HTML + Attachment";\r
-        $this->Mail->IsHTML(true);\r
-        \r
-        if(!$this->Mail->AddAttachment("phpmailer_test.php", "test_attach.txt"))\r
-        {\r
-            $this->assert(false, $this->Mail->ErrorInfo);\r
-            return;\r
-        }\r
-\r
-        $this->BuildBody();\r
-        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);\r
-    }\r
-\r
-    /**\r
-     * An embedded attachment test.\r
-     */\r
-    function test_Embedded_Image() {\r
-\r
-        $this->Mail->Body = "Embedded Image: <img alt=\"phpmailer\" src=\"cid:my-attach\">" .\r
-                     "Here is an image!</a>";\r
-        $this->Mail->Subject .= ": Embedded Image";\r
-        $this->Mail->IsHTML(true);\r
-        \r
-        if(!$this->Mail->AddEmbeddedImage("test.png", "my-attach", "test.png",\r
-                                          "base64", "image/png"))\r
-        {\r
-            $this->assert(false, $this->Mail->ErrorInfo);\r
-            return;\r
-        }\r
-\r
-        $this->BuildBody();\r
-        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);\r
-    }\r
-\r
-    /**\r
-     * An embedded attachment test.\r
-     */\r
-    function test_Multi_Embedded_Image() {\r
-\r
-        $this->Mail->Body = "Embedded Image: <img alt=\"phpmailer\" src=\"cid:my-attach\">" .\r
-                     "Here is an image!</a>";\r
-        $this->Mail->Subject .= ": Embedded Image + Attachment";\r
-        $this->Mail->IsHTML(true);\r
-        \r
-        if(!$this->Mail->AddEmbeddedImage("test.png", "my-attach", "test.png",\r
-                                          "base64", "image/png"))\r
-        {\r
-            $this->assert(false, $this->Mail->ErrorInfo);\r
-            return;\r
-        }\r
-\r
-        if(!$this->Mail->AddAttachment("phpmailer_test.php", "test.txt"))\r
-        {\r
-            $this->assert(false, $this->Mail->ErrorInfo);\r
-            return;\r
-        }\r
-        \r
-        $this->BuildBody();\r
-        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);\r
-    }\r
-\r
-    /**\r
-     * Simple multipart/alternative test.\r
-     */\r
-    function test_AltBody() {\r
-\r
-        $this->Mail->Body = "This is the <b>HTML</b> part of the email.";\r
-        $this->Mail->AltBody = "Here is the text body of this message.  " .\r
-                   "It should be quite a few lines.  It should be wrapped at the " .\r
-                   "40 characters.  Make sure that it is.";\r
-        $this->Mail->WordWrap = 40;\r
-        $this->AddNote("This is a mulipart alternative email");\r
-        $this->Mail->Subject .= ": AltBody + Word Wrap";\r
-\r
-        $this->BuildBody();\r
-        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);\r
-    }\r
-\r
-    /**\r
-     * Simple HTML and attachment test\r
-     */\r
-    function test_AltBody_Attachment() {\r
-\r
-        $this->Mail->Body = "This is the <b>HTML</b> part of the email.";\r
-        $this->Mail->AltBody = "This is the text part of the email.";\r
-        $this->Mail->Subject .= ": AltBody + Attachment";\r
-        $this->Mail->IsHTML(true);\r
-        \r
-        if(!$this->Mail->AddAttachment("phpmailer_test.php", "test_attach.txt"))\r
-        {\r
-            $this->assert(false, $this->Mail->ErrorInfo);\r
-            return;\r
-        }\r
-\r
-        $this->BuildBody();\r
-        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);\r
-\r
-        $fp = fopen("message.txt", "w");\r
-        fwrite($fp, $this->Mail->CreateHeader() . $this->Mail->CreateBody());\r
-        fclose($fp);\r
-    }    \r
-\r
-    function test_MultipleSend() {\r
-        $this->Mail->Body = "Sending two messages without keepalive";\r
-        $this->BuildBody();\r
-        $subject = $this->Mail->Subject;\r
-\r
-        $this->Mail->Subject = $subject . ": SMTP 1";\r
-        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);\r
-        \r
-        $this->Mail->Subject = $subject . ": SMTP 2";\r
-        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);\r
-    }\r
-\r
-    function test_SmtpKeepAlive() {\r
-        $this->Mail->Body = "This was done using the SMTP keep-alive.";\r
-        $this->BuildBody();\r
-        $subject = $this->Mail->Subject;\r
-\r
-        $this->Mail->SMTPKeepAlive = true;\r
-        $this->Mail->Subject = $subject . ": SMTP keep-alive 1";\r
-        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);\r
-        \r
-        $this->Mail->Subject = $subject . ": SMTP keep-alive 2";\r
-        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);\r
-        $this->Mail->SmtpClose();\r
-    }\r
-    \r
-    /**\r
-     * Tests this denial of service attack: \r
-     *    http://www.cybsec.com/vuln/PHPMailer-DOS.pdf\r
-     */\r
-    function test_DenialOfServiceAttack() {\r
-        $this->Mail->Body = "This should no longer cause a denial of service.";\r
-        $this->BuildBody();\r
-       \r
-        $this->Mail->Subject = str_repeat("A", 998);\r
-        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);\r
-    }\r
-    \r
-    function test_Error() {\r
-        $this->Mail->Subject .= ": This should be sent"; \r
-        $this->BuildBody();\r
-        $this->Mail->ClearAllRecipients(); // no addresses should cause an error\r
-        $this->assert($this->Mail->IsError() == false, "Error found");\r
-        $this->assert($this->Mail->Send() == false, "Send succeeded");\r
-        $this->assert($this->Mail->IsError(), "No error found");\r
-        $this->assertEquals('You must provide at least one ' .\r
-                            'recipient email address.', $this->Mail->ErrorInfo);\r
-        $this->Mail->AddAddress(get("mail_to"));\r
-        $this->assert($this->Mail->Send(), "Send failed");\r
-    }\r
-}  \r
\r
-/**\r
- * Create and run test instance.\r
- */\r
\r
-if(isset($HTTP_GET_VARS))\r
-    $global_vars = $HTTP_GET_VARS;\r
-else\r
-    $global_vars = $_REQUEST;\r
-\r
-if(isset($global_vars["submitted"]))\r
-{\r
-    echo "Test results:<br>";\r
-    $suite = new TestSuite( "phpmailerTest" );\r
-    \r
-    $testRunner = new TestRunner;\r
-    $testRunner->run($suite);\r
-    echo "<hr noshade/>";\r
-}\r
-\r
-function get($sName) {\r
-    global $global_vars;\r
-    if(isset($global_vars[$sName]))\r
-        return $global_vars[$sName];\r
-    else\r
-        return "";\r
-}\r
-\r
-?>\r
-\r
-<html>\r
-<body>\r
-<h3>phpmailer Unit Test</h3>\r
-By entering a SMTP hostname it will automatically perform tests with SMTP.\r
-\r
-<form name="phpmailer_unit" action="phpmailer_test.php" method="get">\r
-<input type="hidden" name="submitted" value="1"/>\r
-To Address: <input type="text" size="50" name="mail_to" value="<?php echo get("mail_to"); ?>"/>\r
-<br/>\r
-Cc Address: <input type="text" size="50" name="mail_cc" value="<?php echo get("mail_cc"); ?>"/>\r
-<br/>\r
-SMTP Hostname: <input type="text" size="50" name="mail_host" value="<?php echo get("mail_host"); ?>"/>\r
-<p/>\r
-<input type="submit" value="Run Test"/>\r
-\r
-</form>\r
-</body>\r
-</html>\r
+<?php
+/*******************
+  Unit Test
+  Type: phpmailer class
+********************/
+
+$INCLUDE_DIR = "../";
+
+require("phpunit.php");
+require($INCLUDE_DIR . "class.phpmailer.php");
+error_reporting(E_ALL);
+
+/**
+ * Performs authentication tests
+ */
+class phpmailerTest extends TestCase
+{
+    /**
+     * Holds the default phpmailer instance.
+     * @private
+     * @type object
+     */
+    var $Mail = false;
+
+    /**
+     * Holds the SMTP mail host.
+     * @public
+     * @type string
+     */
+    var $Host = "";
+    
+    /**
+     * Holds the change log.
+     * @private
+     * @type string array
+     */
+    var $ChangeLog = array();
+    
+     /**
+     * Holds the note log.
+     * @private
+     * @type string array
+     */
+    var $NoteLog = array();   
+
+    /**
+     * Class constuctor.
+     */
+    function phpmailerTest($name) {
+        /* must define this constructor */
+        $this->TestCase( $name );
+    }
+    
+    /**
+     * Run before each test is started.
+     */
+    function setUp() {
+        global $global_vars;
+        global $INCLUDE_DIR;
+
+        $this->Mail = new PHPMailer();
+
+        $this->Mail->Priority = 3;
+        $this->Mail->Encoding = "8bit";
+        $this->Mail->CharSet = "iso-8859-1";
+        $this->Mail->From = "unit_test@phpmailer.sf.net";
+        $this->Mail->FromName = "Unit Tester";
+        $this->Mail->Sender = "";
+        $this->Mail->Subject = "Unit Test";
+        $this->Mail->Body = "";
+        $this->Mail->AltBody = "";
+        $this->Mail->WordWrap = 0;
+        $this->Mail->Host = $global_vars["mail_host"];
+        $this->Mail->Port = 25;
+        $this->Mail->Helo = "localhost.localdomain";
+        $this->Mail->SMTPAuth = false;
+        $this->Mail->Username = "";
+        $this->Mail->Password = "";
+        $this->Mail->PluginDir = $INCLUDE_DIR;
+               $this->Mail->AddReplyTo("no_reply@phpmailer.sf.net", "Reply Guy");
+        $this->Mail->Sender = "unit_test@phpmailer.sf.net";
+
+        if(strlen($this->Mail->Host) > 0)
+            $this->Mail->Mailer = "smtp";
+        else
+        {
+            $this->Mail->Mailer = "mail";
+            $this->Sender = "unit_test@phpmailer.sf.net";
+        }
+        
+        global $global_vars;
+        $this->SetAddress($global_vars["mail_to"], "Test User");
+        if(strlen($global_vars["mail_cc"]) > 0)
+            $this->SetAddress($global_vars["mail_cc"], "Carbon User", "cc");
+    }     
+
+    /**
+     * Run after each test is completed.
+     */
+    function tearDown() {
+        // Clean global variables
+        $this->Mail = NULL;
+        $this->ChangeLog = array();
+        $this->NoteLog = array();
+    }
+
+
+    /**
+     * Build the body of the message in the appropriate format.
+     * @private
+     * @returns void
+     */
+    function BuildBody() {
+        $this->CheckChanges();
+        
+        // Determine line endings for message        
+        if($this->Mail->ContentType == "text/html" || strlen($this->Mail->AltBody) > 0)
+        {
+            $eol = "<br/>";
+            $bullet = "<li>";
+            $bullet_start = "<ul>";
+            $bullet_end = "</ul>";
+        }
+        else
+        {
+            $eol = "\n";
+            $bullet = " - ";
+            $bullet_start = "";
+            $bullet_end = "";
+        }
+        
+        $ReportBody = "";
+        
+        $ReportBody .= "---------------------" . $eol;
+        $ReportBody .= "Unit Test Information" . $eol;
+        $ReportBody .= "---------------------" . $eol;
+        $ReportBody .= "phpmailer version: " . $this->Mail->Version . $eol;
+        $ReportBody .= "Content Type: " . $this->Mail->ContentType . $eol;
+        
+        if(strlen($this->Mail->Host) > 0)
+            $ReportBody .= "Host: " . $this->Mail->Host . $eol;
+        
+        // If attachments then create an attachment list
+        if(count($this->Mail->attachment) > 0)
+        {
+            $ReportBody .= "Attachments:" . $eol;
+            $ReportBody .= $bullet_start;
+            for($i = 0; $i < count($this->Mail->attachment); $i++)
+            {
+                $ReportBody .= $bullet . "Name: " . $this->Mail->attachment[$i][1] . ", ";
+                $ReportBody .= "Encoding: " . $this->Mail->attachment[$i][3] . ", ";
+                $ReportBody .= "Type: " . $this->Mail->attachment[$i][4] . $eol;
+            }
+            $ReportBody .= $bullet_end . $eol;
+        }
+        
+        // If there are changes then list them
+        if(count($this->ChangeLog) > 0)
+        {
+            $ReportBody .= "Changes" . $eol;
+            $ReportBody .= "-------" . $eol;
+
+            $ReportBody .= $bullet_start;
+            for($i = 0; $i < count($this->ChangeLog); $i++)
+            {
+                $ReportBody .= $bullet . $this->ChangeLog[$i][0] . " was changed to [" . 
+                               $this->ChangeLog[$i][1] . "]" . $eol;
+            }
+            $ReportBody .= $bullet_end . $eol . $eol;
+        }
+        
+        // If there are notes then list them
+        if(count($this->NoteLog) > 0)
+        {
+            $ReportBody .= "Notes" . $eol;
+            $ReportBody .= "-----" . $eol;
+
+            $ReportBody .= $bullet_start;
+            for($i = 0; $i < count($this->NoteLog); $i++)
+            {
+                $ReportBody .= $bullet . $this->NoteLog[$i] . $eol;
+            }
+            $ReportBody .= $bullet_end;
+        }
+        
+        // Re-attach the original body
+        $this->Mail->Body .= $eol . $eol . $ReportBody;
+    }
+    
+    /**
+     * Check which default settings have been changed for the report.
+     * @private
+     * @returns void
+     */
+    function CheckChanges() {
+        if($this->Mail->Priority != 3)
+            $this->AddChange("Priority", $this->Mail->Priority);
+        if($this->Mail->Encoding != "8bit")
+            $this->AddChange("Encoding", $this->Mail->Encoding);
+        if($this->Mail->CharSet != "iso-8859-1")
+            $this->AddChange("CharSet", $this->Mail->CharSet);
+        if($this->Mail->Sender != "")
+            $this->AddChange("Sender", $this->Mail->Sender);
+        if($this->Mail->WordWrap != 0)
+            $this->AddChange("WordWrap", $this->Mail->WordWrap);
+        if($this->Mail->Mailer != "mail")
+            $this->AddChange("Mailer", $this->Mail->Mailer);
+        if($this->Mail->Port != 25)
+            $this->AddChange("Port", $this->Mail->Port);
+        if($this->Mail->Helo != "localhost.localdomain")
+            $this->AddChange("Helo", $this->Mail->Helo);
+        if($this->Mail->SMTPAuth)
+            $this->AddChange("SMTPAuth", "true");
+    }
+    
+    /**
+     * Adds a change entry.
+     * @private
+     * @returns void
+     */
+    function AddChange($sName, $sNewValue) {
+        $cur = count($this->ChangeLog);
+        $this->ChangeLog[$cur][0] = $sName;
+        $this->ChangeLog[$cur][1] = $sNewValue;
+    }
+    
+    /**
+     * Adds a simple note to the message.
+     * @public
+     * @returns void
+     */
+    function AddNote($sValue) {
+        $this->NoteLog[] = $sValue;
+    }
+
+    /**
+     * Adds all of the addresses
+     * @public
+     * @returns void
+     */
+    function SetAddress($sAddress, $sName = "", $sType = "to") {
+        switch($sType)
+        {
+            case "to":
+                $this->Mail->AddAddress($sAddress, $sName);
+                break;
+            case "cc":
+                $this->Mail->AddCC($sAddress, $sName);
+                break;
+            case "bcc":
+                $this->Mail->AddBCC($sAddress, $sName);
+                break;
+        }
+    }
+
+    /////////////////////////////////////////////////
+    // UNIT TESTS
+    /////////////////////////////////////////////////
+
+    /**
+     * Try a plain message.
+     */
+    function test_WordWrap() {
+
+        $this->Mail->WordWrap = 40;
+        $my_body = "Here is the main body of this message.  It should " .
+                   "be quite a few lines.  It should be wrapped at the " .
+                   "40 characters.  Make sure that it is.";
+        $nBodyLen = strlen($my_body);
+        $my_body .= "\n\nThis is the above body length: " . $nBodyLen;
+
+        $this->Mail->Body = $my_body;
+        $this->Mail->Subject .= ": Wordwrap";
+
+        $this->BuildBody();
+        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);
+    }
+
+    /**
+     * Try a plain message.
+     */
+    function test_Low_Priority() {
+    
+        $this->Mail->Priority = 5;
+        $this->Mail->Body = "Here is the main body.  There should be " .
+                            "a reply to address in this message.";
+        $this->Mail->Subject .= ": Low Priority";
+        $this->Mail->AddReplyTo("nobody@nobody.com", "Nobody (Unit Test)");
+
+        $this->BuildBody();
+        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);
+    }
+
+    /**
+     * Simple plain file attachment test.
+     */
+    function test_Multiple_Plain_FileAttachment() {
+
+        $this->Mail->Body = "Here is the text body";
+        $this->Mail->Subject .= ": Plain + Multiple FileAttachments";
+
+        if(!$this->Mail->AddAttachment("test.png"))
+        {
+            $this->assert(false, $this->Mail->ErrorInfo);
+            return;
+        }
+
+        if(!$this->Mail->AddAttachment("phpmailer_test.php", "test.txt"))
+        {
+            $this->assert(false, $this->Mail->ErrorInfo);
+            return;
+        }
+
+        $this->BuildBody();
+        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);
+    }
+
+    /**
+     * Simple plain string attachment test.
+     */
+    function test_Plain_StringAttachment() {
+
+        $this->Mail->Body = "Here is the text body";
+        $this->Mail->Subject .= ": Plain + StringAttachment";
+        
+        $sAttachment = "These characters are the content of the " .
+                       "string attachment.\nThis might be taken from a ".
+                       "database or some other such thing. ";
+        
+        $this->Mail->AddStringAttachment($sAttachment, "string_attach.txt");
+
+        $this->BuildBody();
+        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);
+    }
+
+    /**
+     * Plain quoted-printable message.
+     */
+    function test_Quoted_Printable() {
+
+        $this->Mail->Body = "Here is the main body";
+        $this->Mail->Subject .= ": Plain + Quoted-printable";
+        $this->Mail->Encoding = "quoted-printable";
+
+        $this->BuildBody();
+        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);
+    }
+
+    /**
+     * Try a plain message.
+     */
+    function test_Html() {
+    
+        $this->Mail->IsHTML(true);
+        $this->Mail->Subject .= ": HTML only";
+        
+        $this->Mail->Body = "This is a <b>test message</b> written in HTML. </br>" .
+                            "Go to <a href=\"http://phpmailer.sourceforge.net/\">" .
+                            "http://phpmailer.sourceforge.net/</a> for new versions of " .
+                            "phpmailer.  <p/> Thank you!";
+
+        $this->BuildBody();
+        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);
+    }
+
+    /**
+     * Simple HTML and attachment test
+     */
+    function test_HTML_Attachment() {
+
+        $this->Mail->Body = "This is the <b>HTML</b> part of the email.";
+        $this->Mail->Subject .= ": HTML + Attachment";
+        $this->Mail->IsHTML(true);
+        
+        if(!$this->Mail->AddAttachment("phpmailer_test.php", "test_attach.txt"))
+        {
+            $this->assert(false, $this->Mail->ErrorInfo);
+            return;
+        }
+
+        $this->BuildBody();
+        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);
+    }
+
+    /**
+     * An embedded attachment test.
+     */
+    function test_Embedded_Image() {
+
+        $this->Mail->Body = "Embedded Image: <img alt=\"phpmailer\" src=\"cid:my-attach\">" .
+                     "Here is an image!</a>";
+        $this->Mail->Subject .= ": Embedded Image";
+        $this->Mail->IsHTML(true);
+        
+        if(!$this->Mail->AddEmbeddedImage("test.png", "my-attach", "test.png",
+                                          "base64", "image/png"))
+        {
+            $this->assert(false, $this->Mail->ErrorInfo);
+            return;
+        }
+
+        $this->BuildBody();
+        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);
+    }
+
+    /**
+     * An embedded attachment test.
+     */
+    function test_Multi_Embedded_Image() {
+
+        $this->Mail->Body = "Embedded Image: <img alt=\"phpmailer\" src=\"cid:my-attach\">" .
+                     "Here is an image!</a>";
+        $this->Mail->Subject .= ": Embedded Image + Attachment";
+        $this->Mail->IsHTML(true);
+        
+        if(!$this->Mail->AddEmbeddedImage("test.png", "my-attach", "test.png",
+                                          "base64", "image/png"))
+        {
+            $this->assert(false, $this->Mail->ErrorInfo);
+            return;
+        }
+
+        if(!$this->Mail->AddAttachment("phpmailer_test.php", "test.txt"))
+        {
+            $this->assert(false, $this->Mail->ErrorInfo);
+            return;
+        }
+        
+        $this->BuildBody();
+        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);
+    }
+
+    /**
+     * Simple multipart/alternative test.
+     */
+    function test_AltBody() {
+
+        $this->Mail->Body = "This is the <b>HTML</b> part of the email.";
+        $this->Mail->AltBody = "Here is the text body of this message.  " .
+                   "It should be quite a few lines.  It should be wrapped at the " .
+                   "40 characters.  Make sure that it is.";
+        $this->Mail->WordWrap = 40;
+        $this->AddNote("This is a mulipart alternative email");
+        $this->Mail->Subject .= ": AltBody + Word Wrap";
+
+        $this->BuildBody();
+        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);
+    }
+
+    /**
+     * Simple HTML and attachment test
+     */
+    function test_AltBody_Attachment() {
+
+        $this->Mail->Body = "This is the <b>HTML</b> part of the email.";
+        $this->Mail->AltBody = "This is the text part of the email.";
+        $this->Mail->Subject .= ": AltBody + Attachment";
+        $this->Mail->IsHTML(true);
+        
+        if(!$this->Mail->AddAttachment("phpmailer_test.php", "test_attach.txt"))
+        {
+            $this->assert(false, $this->Mail->ErrorInfo);
+            return;
+        }
+
+        $this->BuildBody();
+        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);
+
+        $fp = fopen("message.txt", "w");
+        fwrite($fp, $this->Mail->CreateHeader() . $this->Mail->CreateBody());
+        fclose($fp);
+    }    
+
+    function test_MultipleSend() {
+        $this->Mail->Body = "Sending two messages without keepalive";
+        $this->BuildBody();
+        $subject = $this->Mail->Subject;
+
+        $this->Mail->Subject = $subject . ": SMTP 1";
+        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);
+        
+        $this->Mail->Subject = $subject . ": SMTP 2";
+        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);
+    }
+
+    function test_SmtpKeepAlive() {
+        $this->Mail->Body = "This was done using the SMTP keep-alive.";
+        $this->BuildBody();
+        $subject = $this->Mail->Subject;
+
+        $this->Mail->SMTPKeepAlive = true;
+        $this->Mail->Subject = $subject . ": SMTP keep-alive 1";
+        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);
+        
+        $this->Mail->Subject = $subject . ": SMTP keep-alive 2";
+        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);
+        $this->Mail->SmtpClose();
+    }
+    
+    /**
+     * Tests this denial of service attack: 
+     *    http://www.cybsec.com/vuln/PHPMailer-DOS.pdf
+     */
+    function test_DenialOfServiceAttack() {
+        $this->Mail->Body = "This should no longer cause a denial of service.";
+        $this->BuildBody();
+       
+        $this->Mail->Subject = str_repeat("A", 998);
+        $this->assert($this->Mail->Send(), $this->Mail->ErrorInfo);
+    }
+    
+    function test_Error() {
+        $this->Mail->Subject .= ": This should be sent"; 
+        $this->BuildBody();
+        $this->Mail->ClearAllRecipients(); // no addresses should cause an error
+        $this->assert($this->Mail->IsError() == false, "Error found");
+        $this->assert($this->Mail->Send() == false, "Send succeeded");
+        $this->assert($this->Mail->IsError(), "No error found");
+        $this->assertEquals('You must provide at least one ' .
+                            'recipient email address.', $this->Mail->ErrorInfo);
+        $this->Mail->AddAddress(get("mail_to"));
+        $this->assert($this->Mail->Send(), "Send failed");
+    }
+}  
+/**
+ * Create and run test instance.
+ */
+if(isset($HTTP_GET_VARS))
+    $global_vars = $HTTP_GET_VARS;
+else
+    $global_vars = $_REQUEST;
+
+if(isset($global_vars["submitted"]))
+{
+    echo "Test results:<br>";
+    $suite = new TestSuite( "phpmailerTest" );
+    
+    $testRunner = new TestRunner;
+    $testRunner->run($suite);
+    echo "<hr noshade/>";
+}
+
+function get($sName) {
+    global $global_vars;
+    if(isset($global_vars[$sName]))
+        return $global_vars[$sName];
+    else
+        return "";
+}
+
+?>
+
+<html>
+<body>
+<h3>phpmailer Unit Test</h3>
+By entering a SMTP hostname it will automatically perform tests with SMTP.
+
+<form name="phpmailer_unit" action="phpmailer_test.php" method="get">
+<input type="hidden" name="submitted" value="1"/>
+To Address: <input type="text" size="50" name="mail_to" value="<?php echo get("mail_to"); ?>"/>
+<br/>
+Cc Address: <input type="text" size="50" name="mail_cc" value="<?php echo get("mail_cc"); ?>"/>
+<br/>
+SMTP Hostname: <input type="text" size="50" name="mail_host" value="<?php echo get("mail_host"); ?>"/>
+<p/>
+<input type="submit" value="Run Test"/>
+
+</form>
+</body>
+</html>
index e0af5e6..8c7256e 100644 (file)
-<?php\r
-//\r
-// PHP framework for testing, based on the design of "JUnit".\r
-//\r
-// Written by Fred Yankowski <fred@ontosys.com>\r
-//            OntoSys, Inc  <http://www.OntoSys.com>\r
-//\r
-// $Id$\r
-\r
-// Copyright (c) 2000 Fred Yankowski\r
-\r
-// Permission is hereby granted, free of charge, to any person\r
-// obtaining a copy of this software and associated documentation\r
-// files (the "Software"), to deal in the Software without\r
-// restriction, including without limitation the rights to use, copy,\r
-// modify, merge, publish, distribute, sublicense, and/or sell copies\r
-// of the Software, and to permit persons to whom the Software is\r
-// furnished to do so, subject to the following conditions:\r
-//\r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-//\r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
-// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
-// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
-// SOFTWARE.\r
-//\r
-error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE |\r
-    E_CORE_ERROR | E_CORE_WARNING);\r
-\r
-/*\r
-interface Test {\r
-  function run(&$aTestResult);\r
-  function countTestCases();\r
-}\r
-*/\r
-\r
-function trace($msg) {\r
-  return;\r
-  print($msg);\r
-  flush();\r
-}\r
-\r
-\r
-class phpUnitException {\r
-    /* Emulate a Java exception, sort of... */\r
-  var $message;\r
-  var $type;\r
-  function phpUnitException($message, $type = 'FAILURE') {\r
-    $this->message = $message;\r
-    $this->type = $type;\r
-  }\r
-  function getMessage() {\r
-    return $this->message;\r
-  }\r
-}\r
-\r
-class Assert {\r
-  function assert($boolean, $message=0) {\r
-    if (! $boolean)\r
-      $this->fail($message);\r
-  }\r
-\r
-  function assertEquals($expected, $actual, $message=0) {\r
-    if ($expected != $actual) {\r
-      $this->failNotEquals($expected, $actual, "expected", $message);\r
-    }\r
-  }\r
-\r
-  function assertRegexp($regexp, $actual, $message=false) {\r
-    if (! preg_match($regexp, $actual)) {\r
-      $this->failNotEquals($regexp, $actual, "pattern", $message);\r
-    }\r
-  }\r
-\r
-  function failNotEquals($expected, $actual, $expected_label, $message=0) {\r
-    // Private function for reporting failure to match.\r
-    $str = $message ? ($message . ' ') : '';\r
-    $str .= "($expected_label/actual)<br>";\r
-    $htmlExpected = htmlspecialchars($expected);\r
-    $htmlActual = htmlspecialchars($actual);\r
-    $str .= sprintf("<pre>%s\n--------\n%s</pre>",\r
-        $htmlExpected, $htmlActual);\r
-    $this->fail($str);\r
-  }\r
-}\r
-\r
-class TestCase extends Assert /* implements Test */ {\r
-  /* Defines context for running tests.  Specific context -- such as\r
-     instance variables, global variables, global state -- is defined\r
-     by creating a subclass that specializes the setUp() and\r
-     tearDown() methods.  A specific test is defined by a subclass\r
-     that specializes the runTest() method. */\r
-  var $fName;\r
-  var $fResult;\r
-  var $fExceptions = array();\r
-\r
-  function TestCase($name) {\r
-    $this->fName = $name;\r
-  }\r
-\r
-  function run($testResult=0) {\r
-    /* Run this single test, by calling the run() method of the\r
-       TestResult object which will in turn call the runBare() method\r
-       of this object.  That complication allows the TestResult object\r
-       to do various kinds of progress reporting as it invokes each\r
-       test.  Create/obtain a TestResult object if none was passed in.\r
-       Note that if a TestResult object was passed in, it must be by\r
-       reference. */\r
-    if (! $testResult)\r
-      $testResult = $this->_createResult();\r
-    $this->fResult = $testResult;\r
-    $testResult->run(&$this);\r
-    $this->fResult = 0;\r
-    return $testResult;\r
-  }\r
-\r
-  function countTestCases() {\r
-    return 1;\r
-  }\r
-\r
-  function runTest() {\r
-    $name = $this->name();\r
-    // Since isset($this->$name) is false, no way to run defensive checks\r
-    $this->$name();\r
-  }\r
-\r
-  function setUp() /* expect override */ {\r
-    //print("TestCase::setUp()<br>\n");\r
-  }\r
-\r
-  function tearDown() /* possible override */ {\r
-    //print("TestCase::tearDown()<br>\n");\r
-  }\r
-\r
-  ////////////////////////////////////////////////////////////////\r
-\r
-\r
-  function _createResult() /* protected */ {\r
-    /* override this to use specialized subclass of TestResult */\r
-    return new TestResult;\r
-  }\r
-\r
-  function fail($message=0) {\r
-    //printf("TestCase::fail(%s)<br>\n", ($message) ? $message : '');\r
-    /* JUnit throws AssertionFailedError here.  We just record the\r
-       failure and carry on */\r
-    $this->fExceptions[] = new Exception(&$message);\r
-  }\r
-\r
-  function error($message) {\r
-    /* report error that requires correction in the test script\r
-       itself, or (heaven forbid) in this testing infrastructure */\r
-    printf('<b>ERROR: ' . $message . '</b><br>');\r
-    $this->fResult->stop();\r
-  }\r
-\r
-  function failed() {\r
-    return count($this->fExceptions);\r
-  }\r
-\r
-  function getExceptions() {\r
-    return $this->fExceptions;\r
-  }\r
-\r
-  function name() {\r
-    return $this->fName;\r
-  }\r
-\r
-  function runBare() {\r
-    $this->setup();\r
-    $this->runTest();\r
-    $this->tearDown();\r
-  }\r
-}\r
-\r
-\r
-class TestSuite /* implements Test */ {\r
-  /* Compose a set of Tests (instances of TestCase or TestSuite), and\r
-     run them all. */\r
-  var $fTests = array();\r
-\r
-  function TestSuite($classname=false) {\r
-    if ($classname) {\r
-      // Find all methods of the given class whose name starts with\r
-      // "test" and add them to the test suite.  We are just _barely_\r
-      // able to do this with PHP's limited introspection...  Note\r
-      // that PHP seems to store method names in lower case, and we\r
-      // have to avoid the constructor function for the TestCase class\r
-      // superclass.  This will fail when $classname starts with\r
-      // "Test" since that will have a constructor method that will\r
-      // get matched below and then treated (incorrectly) as a test\r
-      // method.  So don't name any TestCase subclasses as "Test..."!\r
-      if (floor(phpversion()) >= 4) {\r
-  // PHP4 introspection, submitted by Dylan Kuhn\r
-  $names = get_class_methods($classname);\r
-  while (list($key, $method) = each($names)) {\r
-    if (preg_match('/^test/', $method) && $method != "testcase") {\r
-      $this->addTest(new $classname($method));\r
-    }\r
-  }\r
-      }\r
-      else {\r
-  $dummy = new $classname("dummy");\r
-  $names = (array) $dummy;\r
-  while (list($key, $value) = each($names)) {\r
-    $type = gettype($value);\r
-    if ($type == "user function" && preg_match('/^test/', $key)\r
-    && $key != "testcase") {\r
-      $this->addTest(new $classname($key));\r
-    }\r
-  }\r
-      }\r
-    }\r
-  }\r
-\r
-  function addTest($test) {\r
-    /* Add TestCase or TestSuite to this TestSuite */\r
-    $this->fTests[] = $test;\r
-  }\r
-\r
-  function run(&$testResult) {\r
-    /* Run all TestCases and TestSuites comprising this TestSuite,\r
-       accumulating results in the given TestResult object. */\r
-    reset($this->fTests);\r
-    while (list($na, $test) = each($this->fTests)) {\r
-      if ($testResult->shouldStop())\r
-  break;\r
-      $test->run(&$testResult);\r
-    }\r
-  }\r
-\r
-  function countTestCases() {\r
-    /* Number of TestCases comprising this TestSuite (including those\r
-       in any constituent TestSuites) */\r
-    $count = 0;\r
-    reset($fTests);\r
-    while (list($na, $test_case) = each($this->fTests)) {\r
-      $count += $test_case->countTestCases();\r
-    }\r
-    return $count;\r
-  }\r
-}\r
-\r
-\r
-class TestFailure {\r
-  /* Record failure of a single TestCase, associating it with the\r
-     exception(s) that occurred */\r
-  var $fFailedTestName;\r
-  var $fExceptions;\r
-\r
-  function TestFailure(&$test, &$exceptions) {\r
-    $this->fFailedTestName = $test->name();\r
-    $this->fExceptions = $exceptions;\r
-  }\r
-\r
-  function getExceptions() {\r
-      return $this->fExceptions;\r
-  }\r
-  function getTestName() {\r
-    return $this->fFailedTestName;\r
-  }\r
-}\r
-\r
-\r
-class TestResult {\r
-  /* Collect the results of running a set of TestCases. */\r
-  var $fFailures = array();\r
-  var $fRunTests = 0;\r
-  var $fStop = false;\r
-\r
-  function TestResult() { }\r
-\r
-  function _endTest($test) /* protected */ {\r
-      /* specialize this for end-of-test action, such as progress\r
-   reports  */\r
-  }\r
-\r
-  function getFailures() {\r
-    return $this->fFailures;\r
-  }\r
-\r
-  function run($test) {\r
-    /* Run a single TestCase in the context of this TestResult */\r
-    $this->_startTest($test);\r
-    $this->fRunTests++;\r
-\r
-    $test->runBare();\r
-\r
-    /* this is where JUnit would catch AssertionFailedError */\r
-    $exceptions = $test->getExceptions();\r
-    if ($exceptions)\r
-      $this->fFailures[] = new TestFailure(&$test, &$exceptions);\r
-    $this->_endTest($test);\r
-  }\r
-\r
-  function countTests() {\r
-    return $this->fRunTests;\r
-  }\r
-\r
-  function shouldStop() {\r
-    return $this->fStop;\r
-  }\r
-\r
-  function _startTest($test) /* protected */ {\r
-      /* specialize this for start-of-test actions */\r
-  }\r
-\r
-  function stop() {\r
-    /* set indication that the test sequence should halt */\r
-    $fStop = true;\r
-  }\r
-\r
-  function countFailures() {\r
-    return count($this->fFailures);\r
-  }\r
-}\r
-\r
-\r
-class TextTestResult extends TestResult {\r
-  /* Specialize TestResult to produce text/html report */\r
-  function TextTestResult() {\r
-    $this->TestResult();  // call superclass constructor\r
-  }\r
-\r
-  function report() {\r
-    /* report result of test run */\r
-    $nRun = $this->countTests();\r
-    $nFailures = $this->countFailures();\r
-    printf("<p>%s test%s run<br>", $nRun, ($nRun == 1) ? '' : 's');\r
-    printf("%s failure%s.<br>\n", $nFailures, ($nFailures == 1) ? '' : 's');\r
-    if ($nFailures == 0)\r
-      return;\r
-\r
-    print("<ol>\n");\r
-    $failures = $this->getFailures();\r
-    while (list($i, $failure) = each($failures)) {\r
-      $failedTestName = $failure->getTestName();\r
-      printf("<li>%s\n", $failedTestName);\r
-\r
-      $exceptions = $failure->getExceptions();\r
-      print("<ul>");\r
-      while (list($na, $exception) = each($exceptions))\r
-  printf("<li>%s\n", $exception->getMessage());\r
-      print("</ul>");\r
-    }\r
-    print("</ol>\n");\r
-  }\r
-\r
-  function _startTest($test) {\r
-    printf("%s ", $test->name());\r
-    flush();\r
-  }\r
-\r
-  function _endTest($test) {\r
-    $outcome = $test->failed()\r
-       ? "<font color=\"red\">FAIL</font>"\r
-       : "<font color=\"green\">ok</font>";\r
-    printf("$outcome<br>\n");\r
-    flush();\r
-  }\r
-}\r
-\r
-\r
-class TestRunner {\r
-  /* Run a suite of tests and report results. */\r
-  function run($suite) {\r
-    $result = new TextTestResult;\r
-    $suite->run($result);\r
-    $result->report();\r
-  }\r
-}\r
-\r
-?>\r
+<?php
+//
+// PHP framework for testing, based on the design of "JUnit".
+//
+// Written by Fred Yankowski <fred@ontosys.com>
+//            OntoSys, Inc  <http://www.OntoSys.com>
+//
+// $Id$
+
+// Copyright (c) 2000 Fred Yankowski
+
+// Permission is hereby granted, free of charge, to any person
+// obtaining a copy of this software and associated documentation
+// files (the "Software"), to deal in the Software without
+// restriction, including without limitation the rights to use, copy,
+// modify, merge, publish, distribute, sublicense, and/or sell copies
+// of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+//
+error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE |
+    E_CORE_ERROR | E_CORE_WARNING);
+
+/*
+interface Test {
+  function run(&$aTestResult);
+  function countTestCases();
+}
+*/
+
+function trace($msg) {
+  return;
+  print($msg);
+  flush();
+}
+
+
+class phpUnitException {
+    /* Emulate a Java exception, sort of... */
+  var $message;
+  var $type;
+  function phpUnitException($message, $type = 'FAILURE') {
+    $this->message = $message;
+    $this->type = $type;
+  }
+  function getMessage() {
+    return $this->message;
+  }
+}
+
+class Assert {
+  function assert($boolean, $message=0) {
+    if (! $boolean)
+      $this->fail($message);
+  }
+
+  function assertEquals($expected, $actual, $message=0) {
+    if ($expected != $actual) {
+      $this->failNotEquals($expected, $actual, "expected", $message);
+    }
+  }
+
+  function assertRegexp($regexp, $actual, $message=false) {
+    if (! preg_match($regexp, $actual)) {
+      $this->failNotEquals($regexp, $actual, "pattern", $message);
+    }
+  }
+
+  function failNotEquals($expected, $actual, $expected_label, $message=0) {
+    // Private function for reporting failure to match.
+    $str = $message ? ($message . ' ') : '';
+    $str .= "($expected_label/actual)<br>";
+    $htmlExpected = htmlspecialchars($expected);
+    $htmlActual = htmlspecialchars($actual);
+    $str .= sprintf("<pre>%s\n--------\n%s</pre>",
+        $htmlExpected, $htmlActual);
+    $this->fail($str);
+  }
+}
+
+class TestCase extends Assert /* implements Test */ {
+  /* Defines context for running tests.  Specific context -- such as
+     instance variables, global variables, global state -- is defined
+     by creating a subclass that specializes the setUp() and
+     tearDown() methods.  A specific test is defined by a subclass
+     that specializes the runTest() method. */
+  var $fName;
+  var $fResult;
+  var $fExceptions = array();
+
+  function TestCase($name) {
+    $this->fName = $name;
+  }
+
+  function run($testResult=0) {
+    /* Run this single test, by calling the run() method of the
+       TestResult object which will in turn call the runBare() method
+       of this object.  That complication allows the TestResult object
+       to do various kinds of progress reporting as it invokes each
+       test.  Create/obtain a TestResult object if none was passed in.
+       Note that if a TestResult object was passed in, it must be by
+       reference. */
+    if (! $testResult)
+      $testResult = $this->_createResult();
+    $this->fResult = $testResult;
+    $testResult->run(&$this);
+    $this->fResult = 0;
+    return $testResult;
+  }
+
+  function countTestCases() {
+    return 1;
+  }
+
+  function runTest() {
+    $name = $this->name();
+    // Since isset($this->$name) is false, no way to run defensive checks
+    $this->$name();
+  }
+
+  function setUp() /* expect override */ {
+    //print("TestCase::setUp()<br>\n");
+  }
+
+  function tearDown() /* possible override */ {
+    //print("TestCase::tearDown()<br>\n");
+  }
+
+  ////////////////////////////////////////////////////////////////
+
+
+  function _createResult() /* protected */ {
+    /* override this to use specialized subclass of TestResult */
+    return new TestResult;
+  }
+
+  function fail($message=0) {
+    //printf("TestCase::fail(%s)<br>\n", ($message) ? $message : '');
+    /* JUnit throws AssertionFailedError here.  We just record the
+       failure and carry on */
+    $this->fExceptions[] = new Exception(&$message);
+  }
+
+  function error($message) {
+    /* report error that requires correction in the test script
+       itself, or (heaven forbid) in this testing infrastructure */
+    printf('<b>ERROR: ' . $message . '</b><br>');
+    $this->fResult->stop();
+  }
+
+  function failed() {
+    return count($this->fExceptions);
+  }
+
+  function getExceptions() {
+    return $this->fExceptions;
+  }
+
+  function name() {
+    return $this->fName;
+  }
+
+  function runBare() {
+    $this->setup();
+    $this->runTest();
+    $this->tearDown();
+  }
+}
+
+
+class TestSuite /* implements Test */ {
+  /* Compose a set of Tests (instances of TestCase or TestSuite), and
+     run them all. */
+  var $fTests = array();
+
+  function TestSuite($classname=false) {
+    if ($classname) {
+      // Find all methods of the given class whose name starts with
+      // "test" and add them to the test suite.  We are just _barely_
+      // able to do this with PHP's limited introspection...  Note
+      // that PHP seems to store method names in lower case, and we
+      // have to avoid the constructor function for the TestCase class
+      // superclass.  This will fail when $classname starts with
+      // "Test" since that will have a constructor method that will
+      // get matched below and then treated (incorrectly) as a test
+      // method.  So don't name any TestCase subclasses as "Test..."!
+      if (floor(phpversion()) >= 4) {
+  // PHP4 introspection, submitted by Dylan Kuhn
+  $names = get_class_methods($classname);
+  while (list($key, $method) = each($names)) {
+    if (preg_match('/^test/', $method) && $method != "testcase") {
+      $this->addTest(new $classname($method));
+    }
+  }
+      }
+      else {
+  $dummy = new $classname("dummy");
+  $names = (array) $dummy;
+  while (list($key, $value) = each($names)) {
+    $type = gettype($value);
+    if ($type == "user function" && preg_match('/^test/', $key)
+    && $key != "testcase") {
+      $this->addTest(new $classname($key));
+    }
+  }
+      }
+    }
+  }
+
+  function addTest($test) {
+    /* Add TestCase or TestSuite to this TestSuite */
+    $this->fTests[] = $test;
+  }
+
+  function run(&$testResult) {
+    /* Run all TestCases and TestSuites comprising this TestSuite,
+       accumulating results in the given TestResult object. */
+    reset($this->fTests);
+    while (list($na, $test) = each($this->fTests)) {
+      if ($testResult->shouldStop())
+  break;
+      $test->run(&$testResult);
+    }
+  }
+
+  function countTestCases() {
+    /* Number of TestCases comprising this TestSuite (including those
+       in any constituent TestSuites) */
+    $count = 0;
+    reset($fTests);
+    while (list($na, $test_case) = each($this->fTests)) {
+      $count += $test_case->countTestCases();
+    }
+    return $count;
+  }
+}
+
+
+class TestFailure {
+  /* Record failure of a single TestCase, associating it with the
+     exception(s) that occurred */
+  var $fFailedTestName;
+  var $fExceptions;
+
+  function TestFailure(&$test, &$exceptions) {
+    $this->fFailedTestName = $test->name();
+    $this->fExceptions = $exceptions;
+  }
+
+  function getExceptions() {
+      return $this->fExceptions;
+  }
+  function getTestName() {
+    return $this->fFailedTestName;
+  }
+}
+
+
+class TestResult {
+  /* Collect the results of running a set of TestCases. */
+  var $fFailures = array();
+  var $fRunTests = 0;
+  var $fStop = false;
+
+  function TestResult() { }
+
+  function _endTest($test) /* protected */ {
+      /* specialize this for end-of-test action, such as progress
+   reports  */
+  }
+
+  function getFailures() {
+    return $this->fFailures;
+  }
+
+  function run($test) {
+    /* Run a single TestCase in the context of this TestResult */
+    $this->_startTest($test);
+    $this->fRunTests++;
+
+    $test->runBare();
+
+    /* this is where JUnit would catch AssertionFailedError */
+    $exceptions = $test->getExceptions();
+    if ($exceptions)
+      $this->fFailures[] = new TestFailure(&$test, &$exceptions);
+    $this->_endTest($test);
+  }
+
+  function countTests() {
+    return $this->fRunTests;
+  }
+
+  function shouldStop() {
+    return $this->fStop;
+  }
+
+  function _startTest($test) /* protected */ {
+      /* specialize this for start-of-test actions */
+  }
+
+  function stop() {
+    /* set indication that the test sequence should halt */
+    $fStop = true;
+  }
+
+  function countFailures() {
+    return count($this->fFailures);
+  }
+}
+
+
+class TextTestResult extends TestResult {
+  /* Specialize TestResult to produce text/html report */
+  function TextTestResult() {
+    $this->TestResult();  // call superclass constructor
+  }
+
+  function report() {
+    /* report result of test run */
+    $nRun = $this->countTests();
+    $nFailures = $this->countFailures();
+    printf("<p>%s test%s run<br>", $nRun, ($nRun == 1) ? '' : 's');
+    printf("%s failure%s.<br>\n", $nFailures, ($nFailures == 1) ? '' : 's');
+    if ($nFailures == 0)
+      return;
+
+    print("<ol>\n");
+    $failures = $this->getFailures();
+    while (list($i, $failure) = each($failures)) {
+      $failedTestName = $failure->getTestName();
+      printf("<li>%s\n", $failedTestName);
+
+      $exceptions = $failure->getExceptions();
+      print("<ul>");
+      while (list($na, $exception) = each($exceptions))
+  printf("<li>%s\n", $exception->getMessage());
+      print("</ul>");
+    }
+    print("</ol>\n");
+  }
+
+  function _startTest($test) {
+    printf("%s ", $test->name());
+    flush();
+  }
+
+  function _endTest($test) {
+    $outcome = $test->failed()
+       ? "<font color=\"red\">FAIL</font>"
+       : "<font color=\"green\">ok</font>";
+    printf("$outcome<br>\n");
+    flush();
+  }
+}
+
+
+class TestRunner {
+  /* Run a suite of tests and report results. */
+  function run($suite) {
+    $result = new TextTestResult;
+    $suite->run($result);
+    $result->report();
+  }
+}
+
+?>
index f98e2de..d37140b 100755 (executable)
@@ -1,8 +1,11 @@
 #!/bin/sh
 
+# Keywords
 find -type f -name "*.php" -exec svn propset svn:keywords "Author Id Revision HeadURL Date Tag" {} \;
 find -type f -name "*.xml" -exec svn propset svn:keywords "Author Id Revision HeadURL Date Tag" {} \;
 find -type f -name "*.ctp" -exec svn propset svn:keywords "Author Id Revision HeadURL Date Tag" {} \;
+
+# MIME type
 find -type f -name "*.php" -exec svn propset svn:mime-type "text/plain" {} \;
 find -type f -name "*.ctp" -exec svn propset svn:mime-type "text/plain" {} \;
 find -type f -name "*.jpg" -exec svn propset svn:mime-type "image/jpeg" {} \;
@@ -19,6 +22,14 @@ find -type f -name .htaccess -exec svn propdel svn:keywords {} \;
 find -type f -name .htaccess -exec svn propdel svn:executable {} \;
 find -type f -name .htaccess -exec svn propset svn:mime-type "text/plain" {} \;
 
+# eol-style
+find -type f -name "*.php" -exec svn propset svn:eol-style "native" {} \;
+find -type f -name "*.ctp" -exec svn propset svn:eol-style "native" {} \;
+find -type f -name "*.html" -exec svn propset svn:eol-style "native" {} \;
+find -type f -name "*.xml" -exec svn propset svn:eol-style "native" {} \;
+find -type f -name "*.txt" -exec svn propset svn:eol-style "native" {} \;
+find -type f -name "*.lng" -exec svn propset svn:eol-style "native" {} \;
+
 # Shell scripts can be executable
 echo "$0: propset svn:executable on *.sh"
 find -type f -name "*.sh" | xargs svn propset svn:executable 2>/dev/null