MailsterSMTP 1.0.0-M2 
Mise en ligne le 10/02/2009
|
||

- 1.0.0-M2
- Codename: A new dawn
-
- Ajout du fichier de license ASF.
- Ajout de javadoc.
- Refactoring de la classe SMTPServer class afin d'utiliser un objet de configuration qui rend le code interne plus propre et moins enchevêtré.
- Ajout de javadoc sur chaque option de configuration pour mettre en évidence le moment où elles sont lues.
- Les paramètres charset et dataDeferredSize seront maintenant relus à chaque démarrage du serveur.
- Suppression de la méthode getHelp(..) method dans l'interface Command.
- Les objets de type Command disposent maintenant d'une référence directe envers leur CommandHandler.
- Les méthodes starp/stop ont été retravaillées et une méthode shutdown ajoutée à la classe SMTPServer permettant ainsi de redémarrer de multiples fois la même instance jusqu'à que la méthode shutdown soit appellée.
- Suppression du pool de threads de l'acceptor qui n'est plus utilisé depuis la migration vers MINA 2.
- Ajout d'un constructeur sans arguments à la classe SMTPServer pour faciliter l'utilisation de la classe.
- Ajout de logs en mode trace dans l'implémentation par défaut du DeliveryHandler.
- Amélioration de 10% du transfert de gros fchiers en supprimant des copies inutiles de IoBuffer à cause de la fonction d'auto agrandissement de celui-ci.
- DefaultDeliveryHandler amélioré contre les modifications concurrentes de sa liste de remise.
- Correction de l'état interne après la fin d'un transfert de données. Ce n'est plus au DeliveryHandler de remettre à zéro l'état à la fin de la méthode data(...) car la méthode resetMessageState() sera appelé automatiquement.
- Extraction des classes Delivery et SharedStreamUtils depuis la classe AbstractDeliveryHandler pour prévenir encore plus la duplication de code dans les implémentations customisées.
- Ajout d'un test renvoyant une NPE dans l'API d'authentification pour empêcher une factory de renvoyer une instance nulle.
- 1.0.0-M1
- Nom de code: The 5th Of November
-
- Migration vers la version 2.0.0-M4 de MINA (pour remplacer l'utilisation d'une version 1.1.x avant).
- Gros refactoring de l'ensemble du code pour en améliorer l'apprentissage et la compréhension
- Ajout de tests junit pour les nouvelles fonctionnalités
- Suppression de certaines classes et interfaces qui ne faisaient que rendre le code plus complexe.
- Nettoyage de l'API notamment par le renommage de certaines classes afin qu'elles reflètent mieux leur fonction.
- On peut désormais ajouter un MessageListener à la volée à un serveur SMTP qui écoutera immédiatement les événements des nouvelles connections.
- La nouvelle MessageDelivery API permet de contrôler la remise des messages en évitant au développeur la charge de réécrire ou de 'réinventer la roue' en réutilisant le code disponible et déjà testé de la class abstraite AbstractDeliveryHandler.
- Correction de la commande Help qui évite de présenter la pseudo commande DATA_END dans la liste des commandes disponibles et reformatage de l'ensemble des messages d'aide.
- Suppression de reset inutiles de l'état de la session SMTP.
- Résolution d'un problème potentiel de synchronisation dans la méthode WiserMessage.getData() qui a de plus été marquée @deprecated car c'est une mauvaise idée de design.
- Ajout du SessionContext à l'API MessageListener : cela permet de stocker des attributs privés du code client qui sont disponibles tout au long de la session, et de fournir l'adresse IP ou le les crédits d'authentification du client afin de faciliter l'implémentation du MessageListener.
- Correction de l'annonce des méthodes d'authentification supportées de la commande EHLO.
- Correction du code d'erreur retourné quand une exception TooMuchDataException est levée.
- Suppression de la commande VRFY qui n'était pas implémentée mais présente alors qu'elle n'est pas nécessaire dans l'implémentation du protocole SMTP.
- Ajout de quelques classes implémentant le design pattern Adapter pour réduire l'écriture de code dans les applications simples.
- Correction de l'AuthenticationHandler et du LoginValidator pour qu'ils lèvent la bonne exception.
- Correction d'un bug rare de synchronisation qui permet de réémettre une commande AUTH immédiatement après une authentification réussie.
- Correction du traitement des erreurs de syntaxe et des messages retournés dans ces cas.
Exemple 1 - Un serveur basique
Exemple 2 - Un serveur basique avec le support des authentifications de type LOGIN et PLAIN
La classe abstraite AbstractDeliveryHandler fournit un certain nombre de méthodes utiles telles que getPrivateInputStream(...) qui permet à chaque listener de lire son stream privé (qui est une instance partagé du stream original) sans bloquer les autres listeners ce qui améliore la parallèlisation du traitement. Vous pouvez aussi examiner l'implémentation par défaut fournie dans le code pour comprendre comment utiliser cette API.
Exemple 3 - Utilisation d'un handler de remise customisé
