Mrs/fr
> Documentation > Module : Message Remote Services
- Depuis adullact.net
Message Remote Services est un module complémentaire pour Mozilla Thunderbird 2 qui expose des services distants d'envoi et de réception de messages à des processus externes.
Une API Java permettant de communiquer avec ce module est disponible. Par conséquent, un programme Java peut instrumentaliser le logiciel Thunderbird lancé sur le même poste.
MRS permet :
- d'envoyer des emails.
- de lister et recevoir les mails reçus.
Sommaire
Pré-requis
Trustedbird 2 est nécessaire pour utiliser le module dans sa version actuelle.
Configuration
Pour configurer, effectuez un clic droit sur le module dans le menu des extensions :
- Les services peuvent être démarrés au démarrage et stoppés à l'arrêt de Thunderbird.
- Quand le mode est changé, Thunderbird doit être redémarré.
Utiliser l'API Java
Le module Message Remote Services expose des services accessibles par une autre application munie de l'API Java détaillée ci-dessous.
La MRS API est composé d'un fichier JAR (MessageRemoteServices.jar) à inclure dans l'application. La bibliothèque lib/commons-io-1.4.jar est nécessaire au bon fonctionnement de l'API. Elle doit donc être incluse dans le projet cible.
Initialisation de l'API création des services
import org.milimail.messageRemoteServiceAPI.init.*; import org.milimail.messageRemoteServiceAPI.compose.*; import org.milimail.messageRemoteServiceAPI.account.*; public static void main(String[] args) { ServiceCreator serviceCreator = API.init(); MessageComposeServiceProxy composeService = serviceCreator.createMessageComposeService(); AccountServiceProxy accountService = serviceCreator.createAccountService(); }
Account Service
//Call to the running Thunderbird, Get all Accounts for the current profile List<Account> accounts = accountService.GetAllAccounts(); for (Account account : accounts) { //Server Imap Name String serverName = account.getServerHostName(); //Account Id String key = account.getKey(); System.out.println(serverName + " " + key); }
Compose Service
Envoyer un message simple à un destinaire
ServiceCreator serviceCreator = API.init(); MessageComposeServiceProxy composeService = serviceCreator.createMessageComposeService(); AccountServiceProxy accountService = serviceCreator.createAccountService(); //Simple implementation of MessageSendListener interface which print the Send status MessageSendListener messageListener = serviceCreator .createMessageSendListener(new MessageSendListenerServantConsole()); //Take the second Thunderbird's account for the current profile Account account = accountService.GetAllAccounts().get(1); //Create the message to send Message message = new Message(); message.setSubject("Subject from API"); message.setBody("body from API"); String[] to = { "user2@test.milimail.org" }; message.setTo(to); //Call to Thunderbird, Callback to messageListener (print status to console) composeService.sendMessage(account, message, messageListener);
- Crypt message
Security security = new Security(); security.setEncrypted(true); message.setSecurity(security);
- Sign message
Security security = new Security(); security.setSigned(true); message.setSecurity(security);
- Header
List<Header> headers = new ArrayList<Header>(); Header header0 = new Header(); header0.setKey("X-MRS-TEST-1"); header0.setValue("X-MRS-VALUE-1"); headers.add(header0); message.setHeaders(headers);
- MDN Read receipt
Notification notification = new Notification(); notification.setMDNReadRequested(true); message.setNotification(notification);
- DSN Delivery receipt
//Only with milimail (thunderbird 2.x patched) Notification notification = new Notification(); notification.setDSNRequested(true); DSNType type = new DSNType(); //RET=FULL sinon RET=HDRS type.setReturnFullHDRRequested(true); //Vous pouvez mixer ces trois options type.setOnSuccessRequested(true); type.setOnDelayRequested(true); type.setOnFailureRequested(true); notification.setDsnType(type); message.setNotification(notification);
//Seulement avec milimail ou thunderbird 2.x patché Notification notification = new Notification(); notification.setDSNRequested(true); DSNType type = new DSNType(); //RET=FULL sinon RET=HDRS type.setReturnFullHDRRequested(false); //NOTIFY=NEVER type.setNeverRequested(true); notification.setDsnType(type); message.setNotification(notification);
- Attachments
List<Attachment> attachments = new ArrayList<Attachment>(); Attachment attachment0 = new Attachment(); attachment0 = new Attachment(); attachment0.setDirPath("/tmp/res/"); attachment0.setFileName("attachment1.txt"); attachment0.setMimeType("text/plain"); attachments.add(attachment0); message.setAttachments(attachments);
Browse Service
Récuperer le répertoire Inbox :
ServiceCreator serviceCreator = API.init(); MessageBrowseServiceProxy browseService = serviceCreator.createBrowseService(); FolderHolder folderHolder = new FolderHolder(); browseService.getRootFolder(account, folderHolder); Folder folder = folderHolder.getValue(); System.out.println("inbox folder name : " + folder.getName());
Récuperer le répertoire local :
FolderHolder folderHolder = new FolderHolder(); browseService.getLocalFolder(folderHolder); Folder folder = folderHolder.getValue(); System.out.println("local folder name : " + folder.getName());
Récuperer tous les répertoires fils d'un répertoire
FoldersHolder foldersHolder = new FoldersHolder(); browseService.getAllFolders(fatherFolder, foldersHolder); Folder[] folders = foldersHolder.getValue();
Récuperer tous les handlers de messages d'un répertoire Les handlers contiennent les inforamtions importantes (taille, etat, date, To, CC mais pas leur contenu
MessageHandlersHolder messageHandlersHolder = new MessageHandlersHolder(); browseService.getMessageHandlers(folder, messageHandlersHolder); MessageHandler[] handlers = messageHandlersHolder.getValue(); for (int i = 0; i < handlers.length; i++) { System.out.println(handlers.getSubject()); }
Récuperer la source brute d'un message
//Vous devez héritez de la classe abstraite SourceListenerPOA //car le processus de récuperation du contenu est asynchrone sourceMessageListener = serviceCreator.createSourceMessageListener(new SourceListenerPOA() { public void OnLoad(byte[] source) { String sourceString = new String(source); System.out.println(sourceString); } }); browseService.getSource(handler, sourceMessageListener);
Récuperer le contenu décrypté si besoin sous la forme d'un objet JavaMail de type MimeMessage
//Vous devez héritez de la classe abstraite AbstractMimeMessageListener //car le processus de récuperation du contenu est asynchrone sourceMessageListener = serviceCreator.createSourceMessageListener(new AbstractMimeMessageListener() { public void onLoad(MimeMessage mimeMessage) { //Do your job, this a Javamail MimeMessage } browseService.getDecryptedSource(handler, sourceMessageListener); });