* 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
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
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
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
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
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
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
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
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
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
-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ä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ä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
- 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!
+
+
-/*******************************************************************\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
-<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 <font size=\"4\">" . $row["full_name"] . "</font>, <p>";\r
- $body .= "<i>Your</i> personal photograph to this message.<p>";\r
- $body .= "Sincerely, <br>";\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"] . "<br>";\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 <font size=\"4\">" . $row["full_name"] . "</font>, <p>";
+ $body .= "<i>Your</i> personal photograph to this message.<p>";
+ $body .= "Sincerely, <br>";
+ $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"] . "<br>";
+
+ // 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>
-<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'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'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>
-<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
- This is a test of PHPMailer v2.0.0 rc1.<br>\r
-<br>\r
-This particular example uses <strong>HTML</strong>, with a <div> 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>
+ This is a test of PHPMailer v2.0.0 rc1.<br>
+<br>
+This particular example uses <strong>HTML</strong>, with a <div> 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>
-<p>The example file "test_mail.php" contents include:</p>\r
-<div style="width: 600px; background-color: #CCCCCC;">\r
-<code>\r
-<?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
-?>\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 <body tag as well as an image used\r
-with a regular <img tag. Here's what the HTML file looks like:<br>\r
-<br>\r
-<div style="width: 600px; background-color: #CCCCCC;">\r
-<code>\r
-<body background="images/bkgrnd.gif" style="margin: 0px;"><br>\r
-<div style="width: 640px; font-family: Arial, Helvetica, sans-serif; font-size: 11px;"><br>\r
-<div align="center"><img src="images/phpmailer.gif" style="height: 90px; width: 340px"></div><br><br>\r
-<br><br>\r
- This is a test of PHPMailer v2.0.0 rc1.<br><br>\r
-<br><br>\r
-This particular example uses <strong>HTML</strong>, with a <div> tag and inline<br><br>\r
-styles.<br><br>\r
-<br><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.</div><br>\r
-</body><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->AltBody is completely optional. If not used, PHPMailer\r
- will use the HTML text with htmlentities().</li>\r
- <li>the background= and <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 "test_mail.php" contents include:</p>
+<div style="width: 600px; background-color: #CCCCCC;">
+<code>
+<?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>
+?>
+</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 <body tag as well as an image used
+with a regular <img tag. Here's what the HTML file looks like:<br>
+<br>
+<div style="width: 600px; background-color: #CCCCCC;">
+<code>
+<body background="images/bkgrnd.gif" style="margin: 0px;"><br>
+<div style="width: 640px; font-family: Arial, Helvetica, sans-serif; font-size: 11px;"><br>
+<div align="center"><img src="images/phpmailer.gif" style="height: 90px; width: 340px"></div><br><br>
+<br><br>
+ This is a test of PHPMailer v2.0.0 rc1.<br><br>
+<br><br>
+This particular example uses <strong>HTML</strong>, with a <div> tag and inline<br><br>
+styles.<br><br>
+<br><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.</div><br>
+</body><br>
+</code>
+</div>
+<br>
+A few things to notice in the PHP script that generates the email:
+<ul>
+ <li>the use of $mail->AltBody is completely optional. If not used, PHPMailer
+ will use the HTML text with htmlentities().</li>
+ <li>the background= and <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>
+
-<?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>
-<?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();
+ }
+}
+
+?>
#!/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" {} \;
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