<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>http://atelier.adullact.org/plugins/mediawiki/wiki/milimail/index.php?action=history&amp;amp;feed=atom&amp;amp;title=Mrs</id>
		<title>Mrs - Historique des versions</title>
		<link rel="self" type="application/atom+xml" href="http://atelier.adullact.org/plugins/mediawiki/wiki/milimail/index.php?action=history&amp;amp;feed=atom&amp;amp;title=Mrs"/>
		<link rel="alternate" type="text/html" href="http://atelier.adullact.org/plugins/mediawiki/wiki/milimail/index.php?title=Mrs&amp;action=history"/>
		<updated>2026-05-02T22:18:49Z</updated>
		<subtitle>Historique pour cette page sur le wiki</subtitle>
		<generator>MediaWiki 1.27.4</generator>

	<entry>
		<id>http://atelier.adullact.org/plugins/mediawiki/wiki/milimail/index.php?title=Mrs&amp;diff=305&amp;oldid=prev</id>
		<title>Rfairise : Page créée avec « {{lang|Mrs|Mrs/fr}} &gt; Documentation &gt; Add-on: Message Remote Services {{DownloadPanel/fr | title        = mrs | compat       = Trustedbird 2 | info = &amp;rArr; [http… »</title>
		<link rel="alternate" type="text/html" href="http://atelier.adullact.org/plugins/mediawiki/wiki/milimail/index.php?title=Mrs&amp;diff=305&amp;oldid=prev"/>
				<updated>2010-09-03T15:22:04Z</updated>
		
		<summary type="html">&lt;p&gt;Page créée avec « {{lang|Mrs|Mrs/fr}} &amp;gt; &lt;a href=&quot;/plugins/mediawiki/wiki/milimail/index.php/Documentation&quot; title=&quot;Documentation&quot;&gt;Documentation&lt;/a&gt; &amp;gt; &lt;a href=&quot;/plugins/mediawiki/wiki/milimail/index.php/Mrs&quot; title=&quot;Mrs&quot;&gt;Add-on: Message Remote Services&lt;/a&gt; {{DownloadPanel/fr | title        = mrs | compat       = Trustedbird 2 | info = ⇒ [http… »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{lang|Mrs|Mrs/fr}}&lt;br /&gt;
&amp;gt; [[Documentation]] &amp;gt; [[Mrs|Add-on: Message Remote Services]]&lt;br /&gt;
{{DownloadPanel/fr&lt;br /&gt;
| title        = mrs&lt;br /&gt;
| compat       = Trustedbird 2&lt;br /&gt;
| info = &amp;amp;rArr; [http://adullact.net/plugins/scmgit/cgi-bin/gitweb.cgi?p=milimail/trustedbird.git;a=blob_plain;f=message-remote-services/ChangeLog;hb=HEAD ChangeLog]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Message Remote Services''' is an add-on for Mozilla Thunderbird 2 which exposes remote services to external processes.&lt;br /&gt;
&lt;br /&gt;
A Java API to communicate with this add-on is available.&lt;br /&gt;
Thus, an external Java program can use a running instance of Thunderbird installed on the same OS.&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
* Send emails.&lt;br /&gt;
* Browse/Receive emails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
Current version requires [[Trustedbird|Trustedbird 2]].&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
To configure, right-click on the extension in the Add-ons window.&lt;br /&gt;
&lt;br /&gt;
[[Image:config_mrs_e.png|Configuration of MRS]]&lt;br /&gt;
&lt;br /&gt;
* Services can be enabled at startup. This feature can be switched off.&lt;br /&gt;
* When this feature is changed, Thunderbird must be restarted.&lt;br /&gt;
&lt;br /&gt;
== Java API ==&lt;br /&gt;
&lt;br /&gt;
The Message Remote Services add-on exposes services which can be called by another application.&lt;br /&gt;
&lt;br /&gt;
This application uses MRS Java API to call these services.&lt;br /&gt;
&lt;br /&gt;
The MRS API is composed of a JAR File (MessageRemoteServices.jar) to be included in the application.&lt;br /&gt;
The library lib/commons-io-1.4.jar must be installed.&lt;br /&gt;
&lt;br /&gt;
=== API initialization and services creation ===&lt;br /&gt;
&lt;br /&gt;
 import org.milimail.messageRemoteServiceAPI.init.*;&lt;br /&gt;
 import org.milimail.messageRemoteServiceAPI.compose.*;&lt;br /&gt;
 import org.milimail.messageRemoteServiceAPI.account.*;&lt;br /&gt;
 &lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
   ServiceCreator serviceCreator = API.init();&lt;br /&gt;
   MessageComposeServiceProxy composeService = serviceCreator.createMessageComposeService();&lt;br /&gt;
   AccountServiceProxy accountService = serviceCreator.createAccountService();&lt;br /&gt;
   MessageBrowseServiceProxy browseService = serviceCreator.createBrowseService();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Account Service ===&lt;br /&gt;
&lt;br /&gt;
  //Call to the running Thunderbird, Get all Accounts for the current profile&lt;br /&gt;
  List&amp;lt;Account&amp;gt; accounts = accountService.GetAllAccounts();&lt;br /&gt;
  for (Account account : accounts) {&lt;br /&gt;
    //Server Imap Name			&lt;br /&gt;
    String serverName = account.getServerHostName();&lt;br /&gt;
    //Account Id&lt;br /&gt;
    String key = account.getKey();&lt;br /&gt;
    System.out.println(serverName + &amp;quot; &amp;quot; + key);&lt;br /&gt;
  } &lt;br /&gt;
&lt;br /&gt;
=== Compose Service ===&lt;br /&gt;
&lt;br /&gt;
Send a simple message to a recipient.&lt;br /&gt;
 ServiceCreator serviceCreator = API.init();&lt;br /&gt;
 MessageComposeServiceProxy composeService = serviceCreator.createMessageComposeService();&lt;br /&gt;
 AccountServiceProxy accountService = serviceCreator.createAccountService();&lt;br /&gt;
 //Simple implementation of MessageSendListener interface which print the Send status&lt;br /&gt;
 MessageSendListener messageListener = serviceCreator&lt;br /&gt;
				.createMessageSendListener(new MessageSendListenerServantConsole());&lt;br /&gt;
 &lt;br /&gt;
 //Take the second Thunderbird's account for the current profile&lt;br /&gt;
 Account account = accountService.GetAllAccounts().get(1);&lt;br /&gt;
 &lt;br /&gt;
 //Create the message to send&lt;br /&gt;
 Message message = new Message();&lt;br /&gt;
 message.setSubject(&amp;quot;Subject from API&amp;quot;);&lt;br /&gt;
 message.setBody(&amp;quot;body from API&amp;quot;);&lt;br /&gt;
 String[] to = { &amp;quot;user2@test.milimail.org&amp;quot; };&lt;br /&gt;
 message.setTo(to);&lt;br /&gt;
 &lt;br /&gt;
 //Call to Thunderbird, Callback to messageListener (print status to console)&lt;br /&gt;
 composeService.sendMessage(account, message, messageListener);	&lt;br /&gt;
&lt;br /&gt;
* Encrypt message&lt;br /&gt;
 Security security = new Security();&lt;br /&gt;
 security.setEncrypted(true);&lt;br /&gt;
 message.setSecurity(security);&lt;br /&gt;
&lt;br /&gt;
* Sign message&lt;br /&gt;
 Security security = new Security();&lt;br /&gt;
 security.setSigned(true);&lt;br /&gt;
 message.setSecurity(security);&lt;br /&gt;
&lt;br /&gt;
* Header&lt;br /&gt;
 List&amp;lt;Header&amp;gt; headers = new ArrayList&amp;lt;Header&amp;gt;();&lt;br /&gt;
 Header header0 = new Header();&lt;br /&gt;
 header0.setKey(&amp;quot;X-MRS-TEST-1&amp;quot;);&lt;br /&gt;
 header0.setValue(&amp;quot;X-MRS-VALUE-1&amp;quot;);&lt;br /&gt;
 headers.add(header0);&lt;br /&gt;
 message.setHeaders(headers);&lt;br /&gt;
&lt;br /&gt;
* MDN Read receipt&lt;br /&gt;
 Notification notification = new Notification();&lt;br /&gt;
 notification.setMDNReadRequested(true);&lt;br /&gt;
 message.setNotification(notification);&lt;br /&gt;
&lt;br /&gt;
* DSN Delivery receipt&lt;br /&gt;
 //Only with milimail (thunderbird 2.x patched)&lt;br /&gt;
 Notification notification = new Notification();&lt;br /&gt;
 notification.setDSNRequested(true);&lt;br /&gt;
 DSNType type = new DSNType();&lt;br /&gt;
 //RET=FULL else RET=HDRS&lt;br /&gt;
 type.setReturnFullHDRRequested(true);&lt;br /&gt;
 &lt;br /&gt;
 //You can mix the three options&lt;br /&gt;
 type.setOnSuccessRequested(true);&lt;br /&gt;
 type.setOnDelayRequested(true);&lt;br /&gt;
 type.setOnFailureRequested(true);&lt;br /&gt;
 &lt;br /&gt;
 notification.setDsnType(type);&lt;br /&gt;
 &lt;br /&gt;
 message.setNotification(notification);&lt;br /&gt;
&lt;br /&gt;
 //Only with milimail (thunderbird 2.x patched)&lt;br /&gt;
 Notification notification = new Notification();&lt;br /&gt;
 notification.setDSNRequested(true);&lt;br /&gt;
 DSNType type = new DSNType();&lt;br /&gt;
 //RET=FULL else RET=HDRS&lt;br /&gt;
 type.setReturnFullHDRRequested(false);&lt;br /&gt;
 &lt;br /&gt;
 //NOTIFY=NEVER&lt;br /&gt;
 type.setNeverRequested(true);&lt;br /&gt;
 &lt;br /&gt;
 notification.setDsnType(type);&lt;br /&gt;
 &lt;br /&gt;
 message.setNotification(notification);&lt;br /&gt;
&lt;br /&gt;
* Attachments&lt;br /&gt;
 List&amp;lt;Attachment&amp;gt; attachments = new ArrayList&amp;lt;Attachment&amp;gt;();&lt;br /&gt;
 Attachment attachment0 = new Attachment();&lt;br /&gt;
 attachment0 = new Attachment();&lt;br /&gt;
 attachment0.setDirPath(&amp;quot;/tmp/res/&amp;quot;);&lt;br /&gt;
 attachment0.setFileName(&amp;quot;attachment1.txt&amp;quot;);&lt;br /&gt;
 attachment0.setMimeType(&amp;quot;text/plain&amp;quot;);&lt;br /&gt;
 attachments.add(attachment0);&lt;br /&gt;
 message.setAttachments(attachments);&lt;br /&gt;
&lt;br /&gt;
=== Browse Service ===&lt;br /&gt;
Get Inbox Folder :&lt;br /&gt;
 ServiceCreator serviceCreator = API.init();&lt;br /&gt;
 MessageBrowseServiceProxy browseService = serviceCreator.createBrowseService();&lt;br /&gt;
 FolderHolder folderHolder = new FolderHolder();&lt;br /&gt;
 browseService.getRootFolder(account, folderHolder);&lt;br /&gt;
 Folder folder = folderHolder.getValue();&lt;br /&gt;
 System.out.println(&amp;quot;inbox folder name : &amp;quot; + folder.getName());&lt;br /&gt;
&lt;br /&gt;
Get Local Folder : &lt;br /&gt;
 FolderHolder folderHolder = new FolderHolder();&lt;br /&gt;
 browseService.getLocalFolder(folderHolder);		&lt;br /&gt;
 Folder folder = folderHolder.getValue();&lt;br /&gt;
 System.out.println(&amp;quot;local folder name : &amp;quot; + folder.getName());&lt;br /&gt;
&lt;br /&gt;
Get all folders, children of one folder&lt;br /&gt;
 FoldersHolder foldersHolder = new FoldersHolder();&lt;br /&gt;
 browseService.getAllFolders(fatherFolder, foldersHolder);&lt;br /&gt;
 Folder[] folders = foldersHolder.getValue();&lt;br /&gt;
&lt;br /&gt;
Get all message handlers of a folder, &lt;br /&gt;
the message handlers contain all important information of the messages but not their content.&lt;br /&gt;
 MessageHandlersHolder messageHandlersHolder = new MessageHandlersHolder();&lt;br /&gt;
 browseService.getMessageHandlers(folder, messageHandlersHolder);		&lt;br /&gt;
 MessageHandler[] handlers = messageHandlersHolder.getValue();&lt;br /&gt;
 for (int i = 0; i &amp;lt; handlers.length; i++) {&lt;br /&gt;
    System.out.println(handlers.getSubject());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Get raw Source of the message&lt;br /&gt;
 //You have to subclass abstract class SourceListenerPOA,&lt;br /&gt;
 //because the process to get mail from Thunderbird is asynchronous&lt;br /&gt;
 sourceMessageListener = serviceCreator.createSourceMessageListener(new SourceListenerPOA() {&lt;br /&gt;
 			      &lt;br /&gt;
 				public void OnLoad(byte[] source) {&lt;br /&gt;
 					String sourceString = new String(source);&lt;br /&gt;
 		                        System.out.println(sourceString);&lt;br /&gt;
  &lt;br /&gt;
 				}&lt;br /&gt;
 &lt;br /&gt;
 			});&lt;br /&gt;
 browseService.getSource(handler, sourceMessageListener);&lt;br /&gt;
&lt;br /&gt;
Get Javamail MimeMessage of the message (decrypted if necessary)&lt;br /&gt;
 //You have to subclass abstract class AbstractMimeMessageListener,&lt;br /&gt;
 //because the process to get mail from Thunderbird is asynchronous&lt;br /&gt;
 sourceMessageListener = serviceCreator.createSourceMessageListener(new AbstractMimeMessageListener() {&lt;br /&gt;
 			&lt;br /&gt;
 	@Override&lt;br /&gt;
 	public void onLoad(MimeMessage mimeMessage) {&lt;br /&gt;
 		//Do your job, this a Javamail MimeMessage&lt;br /&gt;
 	}&lt;br /&gt;
  });&lt;br /&gt;
 browseService.getDecryptedSource(handler, sourceMessageListener);&lt;/div&gt;</summary>
		<author><name>Rfairise</name></author>	</entry>

	</feed>