<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MesQuilla &#187; Planet MozillaMessaging</title>
	<atom:link href="http://mesquilla.com/category/mozillamessaging/feed/" rel="self" type="application/rss+xml" />
	<link>http://mesquilla.com</link>
	<description>Messaging with Mozilla by rkent</description>
	<lastBuildDate>Fri, 05 Oct 2012 19:31:32 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>EarlyLight (unofficial multiversion Lightning addon) for Thunderbird 14 -16</title>
		<link>http://mesquilla.com/2012/08/15/earlylight-unofficial-multiversion-lightning-addon-for-thunderbird-14-16/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=earlylight-unofficial-multiversion-lightning-addon-for-thunderbird-14-16</link>
		<comments>http://mesquilla.com/2012/08/15/earlylight-unofficial-multiversion-lightning-addon-for-thunderbird-14-16/#comments</comments>
		<pubDate>Wed, 15 Aug 2012 18:06:53 +0000</pubDate>
		<dc:creator>rkent</dc:creator>
				<category><![CDATA[EarlyLight]]></category>
		<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Mailnews development]]></category>
		<category><![CDATA[Planet Mozilla]]></category>
		<category><![CDATA[Planet MozillaMessaging]]></category>

		<guid isPermaLink="false">http://mesquilla.com/?p=1274</guid>
		<description><![CDATA[<p>My EarlyLight addon, which is an unofficial build of the Lightning calendar extension, supporting multiple Thunderbird versions, is now available for Thunderbird 14 &#8211; 16. This is based on the current Lightning 1.8a2 source (which is now in the aurora directories). Download here:</p> <p>OSX</p> <p>Linux</p> <p>Windows</p> <p>I&#8217;ll probably stop supporting this once Thunderbird switches to its slower release cycle.</p> ]]></description>
				<content:encoded><![CDATA[<p>My EarlyLight addon, which is an unofficial build of the Lightning calendar extension, supporting multiple Thunderbird versions, is now available for Thunderbird 14 &#8211; 16. This is based on the current Lightning 1.8a2 source (which is now in the aurora directories). Download here:</p>
<p><a title="EarlyLight current release - OSX" href="http://mesquilla.net/releases/earlylight_Darwin%28TB14-TB16%29_1.8a2.0earlylight.xpi">OSX</a></p>
<p><a title="EarlyLight current release - Linux" href="http://mesquilla.net/releases/earlylight_Linux%28TB14-TB16%29_1.8a2.0earlylight.xpi">Linux</a></p>
<p><a title="EarlyLight current release - Windows" href="http://mesquilla.net/releases/earlylight_WINNT%28TB14-TB16%29_1.8a2.0earlylight.xpi">Windows</a></p>
<p>I&#8217;ll probably stop supporting this once Thunderbird switches to its slower release cycle.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fmesquilla.com%2F2012%2F08%2F15%2Fearlylight-unofficial-multiversion-lightning-addon-for-thunderbird-14-16%2F&amp;title=EarlyLight%20%28unofficial%20multiversion%20Lightning%20addon%29%20for%20Thunderbird%2014%20-16" id="wpa2a_2"><img src="http://mesquilla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://mesquilla.com/2012/08/15/earlylight-unofficial-multiversion-lightning-addon-for-thunderbird-14-16/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EarlyLight, an unofficial Lightning (aurora) build supporting multiple Thunderbird versions</title>
		<link>http://mesquilla.com/2012/06/22/earlylight-an-unofficial-lightning-aurora-build-supporting-multiple-thunderbird-versions/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=earlylight-an-unofficial-lightning-aurora-build-supporting-multiple-thunderbird-versions</link>
		<comments>http://mesquilla.com/2012/06/22/earlylight-an-unofficial-lightning-aurora-build-supporting-multiple-thunderbird-versions/#comments</comments>
		<pubDate>Fri, 22 Jun 2012 20:14:09 +0000</pubDate>
		<dc:creator>rkent</dc:creator>
				<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Mailnews development]]></category>
		<category><![CDATA[Planet Mozilla]]></category>
		<category><![CDATA[Planet MozillaMessaging]]></category>

		<guid isPermaLink="false">http://mesquilla.com/?p=1245</guid>
		<description><![CDATA[<p>I got tired of waiting for Lightning to fix their aurora build problems so I decided to practice my newly-acquired Mozilla build foo to build my own. In the process, I extended the usual Lightning build so that I have Lightning that can work with current TB release, beta, and aurora versions, that is Thunderbird 13, 14, and 15.</p> <p>The &#8220;source&#8221; for this is just a makefile which you can see here. (I added my fix in Mozilla bug 766685 so that I could build this with my VS 2008 on Windows). This will only work in my local build [...]]]></description>
				<content:encoded><![CDATA[<p>I got tired of waiting for Lightning to fix their <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=756116">aurora build problems</a> so I decided to practice my newly-acquired Mozilla build foo to build my own. In the process, I extended the usual Lightning build so that I have Lightning that can work with current TB release, beta, and aurora versions, that is Thunderbird 13, 14, and 15.</p>
<p>The &#8220;source&#8221; for this is just a makefile which you can see <a title="EarlyLight repository" href="https://bitbucket.org/rkentjames/earlylight">here</a>. (I added my fix in Mozilla <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=766685">bug 766685</a> so that I could build this with my VS 2008 on Windows). This will only work in my local build environment, but it gives you an idea of what this is.</p>
<p>Anyway I call this thing EarlyLight. You can download this with the following links:</p>
<p>Windows: <a href="http://mesquilla.net/releases/earlylight_WINNT(TB13-TB15)_1.7a2.0earlylight.xpi">http://mesquilla.net/releases/earlylight_WINNT(TB13-TB15)_1.7a2.0earlylight.xpi</a></p>
<p>OSX: <a href="http://mesquilla.net/releases/earlylight_Darwin(TB13-TB15)_1.7a2.0earlylight.xpi">http://mesquilla.net/releases/earlylight_Darwin(TB13-TB15)_1.7a2.0earlylight.xpi</a></p>
<p>Linux: <a href="http://mesquilla.net/releases/earlylight_Linux(TB13-TB15)_1.7a2.0earlylight.xpi">http://mesquilla.net/releases/earlylight_Linux(TB13-TB15)_1.7a2.0earlylight.xpi</a></p>
<p>I&#8217;m not sure how useful this will be to others, but the ability to run multiple versions of Thunderbird with the same version of Lightning is really useful for me. If others find it useful I might maintain this in the future.</p>
<p>One caution. It uses the same extension ID as Lightning, and so it really claims to be Lightning in Thunderbird. It should also update to Lightning 1.7 from the official site once that is released. Duplicating the ID like this will be disallowed at some point in the future, but for now it makes this a little easier to use.</p>
<p>Please tell me if this is useful to you.</p>
<p>Windows:</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fmesquilla.com%2F2012%2F06%2F22%2Fearlylight-an-unofficial-lightning-aurora-build-supporting-multiple-thunderbird-versions%2F&amp;title=EarlyLight%2C%20an%20unofficial%20Lightning%20%28aurora%29%20build%20supporting%20multiple%20Thunderbird%20versions" id="wpa2a_4"><img src="http://mesquilla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://mesquilla.com/2012/06/22/earlylight-an-unofficial-lightning-aurora-build-supporting-multiple-thunderbird-versions/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>ExQuilla (Microsoft Exchange Server for Thunderbird) beta version released</title>
		<link>http://mesquilla.com/2012/01/31/exquilla-microsoft-exchange-server-for-thunderbird-beta-version-released/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=exquilla-microsoft-exchange-server-for-thunderbird-beta-version-released</link>
		<comments>http://mesquilla.com/2012/01/31/exquilla-microsoft-exchange-server-for-thunderbird-beta-version-released/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 00:05:19 +0000</pubDate>
		<dc:creator>rkent</dc:creator>
				<category><![CDATA[Exchange Web Services (EWS)]]></category>
		<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Mailnews development]]></category>
		<category><![CDATA[Planet Mozilla]]></category>
		<category><![CDATA[Planet MozillaMessaging]]></category>

		<guid isPermaLink="false">http://mesquilla.com/?p=1231</guid>
		<description><![CDATA[<p>I am pleased to announce that ExQuilla, a Thunderbird addon that provides access to messages and contacts in Microsoft Exchange Server, is now available. This is a beta-quality release.  ExQuilla is currently only available for Windows, in English, and supports Thunderbird version 9, 10, and 11. Linux and Mac versions are planned for the future.</p> <p>The most current version of ExQuilla is available from the MesQuilla site here. A slightly older version (due to review delays) is available from Mozilla&#8217;s addon site here.</p> <p>This version supports access to messages and personal contacts from a Microsoft Exchange Server 2007 or 2010 [...]]]></description>
				<content:encoded><![CDATA[<p>I am pleased to announce that <a title="ExQuilla home page" href="http://exquilla.zendesk.com/home">ExQuilla</a>, a Thunderbird addon that provides access to messages and contacts in Microsoft Exchange Server, is now available. This is a beta-quality release.  ExQuilla is currently only available for Windows, in English, and supports Thunderbird version 9, 10, and 11. Linux and Mac versions are planned for the future.</p>
<p>The most current version of ExQuilla is available from the <a title="ExQuilla current release download" href="http://mesquilla.net/exquilla-currentrelease-tb-windows.xpi">MesQuilla site here</a>. A slightly older version (due to review delays) is available from <a title="ExQuilla Windows download from Mozilla Addons site" href="https://addons.mozilla.org/thunderbird/downloads/file/142027/exquilla_exchange_web_services-11.0-tb-windows.xpi">Mozilla&#8217;s addon site here</a>.</p>
<p>This version supports access to messages and personal contacts from a Microsoft Exchange Server 2007 or 2010 using Exchange Web Services (EWS). Calendar support is not currently enabled, but is under development.</p>
<p>For an overview of ExQuilla, visit the <a title="ExQuilla support site" href="http://exquilla.zendesk.com/home">ExQuilla support site</a>.</p>
<p>Kent James</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fmesquilla.com%2F2012%2F01%2F31%2Fexquilla-microsoft-exchange-server-for-thunderbird-beta-version-released%2F&amp;title=ExQuilla%20%28Microsoft%20Exchange%20Server%20for%20Thunderbird%29%20beta%20version%20released" id="wpa2a_6"><img src="http://mesquilla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://mesquilla.com/2012/01/31/exquilla-microsoft-exchange-server-for-thunderbird-beta-version-released/feed/</wfw:commentRss>
		<slash:comments>56</slash:comments>
		</item>
		<item>
		<title>Avoiding namespace leaks in event handlers</title>
		<link>http://mesquilla.com/2011/09/08/avoiding-namespace-leaks-in-event-handlers/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=avoiding-namespace-leaks-in-event-handlers</link>
		<comments>http://mesquilla.com/2011/09/08/avoiding-namespace-leaks-in-event-handlers/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 16:58:43 +0000</pubDate>
		<dc:creator>rkent</dc:creator>
				<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Mailnews development]]></category>
		<category><![CDATA[Planet Mozilla]]></category>
		<category><![CDATA[Planet MozillaMessaging]]></category>

		<guid isPermaLink="false">http://mesquilla.com/?p=1187</guid>
		<description><![CDATA[<p>A common pattern that we see in review of Mozilla addons is code that looks like the following:</p> var myExtension = { saveMe: null, onLoad: function () { this.saveMe = "I am saved"; } } window.addEventListener("load", myExtension.onLoad); <p>Unfortunately the value of &#8220;this.saveMe&#8221; that is used in onLoad is the value from the global window, not the value from the myExtension object. Really the event listener is looking for an object of type nsIDOMEventListener, with a method handleEvent. When it does not find that, it applies some magic and just uses the entered function. Unfortunately, in the process the &#8220;this&#8221; does [...]]]></description>
				<content:encoded><![CDATA[<p>A common pattern that we see in review of Mozilla addons is code that looks like the following:</p>
<pre>var myExtension = {
  saveMe: null,
  onLoad: function () {
    this.saveMe = "I am saved";
  }
}
window.addEventListener("load", myExtension.onLoad);</pre>
<p>Unfortunately the value of &#8220;this.saveMe&#8221; that is used in onLoad is the value from the global window, not the value from the myExtension object. Really the event listener is looking for an object of type nsIDOMEventListener, with a method handleEvent. When it does not find that, it applies some magic and just uses the entered function. Unfortunately, in the process the &#8220;this&#8221; does not get defined from the parent object, and you are stuck with &#8220;this&#8221; being the global object.</p>
<p>Here are three alternatives that don&#8217;t leak:</p>
<p>1) give it what it wants, namely a handleEvent method:</p>
<pre>var myExtension = {
  saveMe: null,
  handleEvent: function (evt) {
    if (evt.type == "load")
      this.saveMe = "I am saved";
  }
}
window.addEventListener("load", myExtension);</pre>
<p>2) wrap the function call with a function:</p>
<pre>var myExtension = {
  saveMe: null,
  onLoad: function () {
    this.saveMe = "I am saved";
  }
}
window.addEventListener("load", function() { myExtension.onLoad(); });</pre>
<p>3) use the bind function to manually specify what &#8220;this&#8221; will be used:</p>
<pre>var myExtension = {
  saveMe: null,
  onLoad: function () {
    this.saveMe = "I am saved";
  }
}
window.addEventListener("load", myExtension.onLoad.bind(myExtension));</pre>
<p>These kinds of issue can be difficult to spot just by looking at code. Addon authors are strongly encouraged to use the<a title="Extension Test addon" href="https://addons.mozilla.org/en-US/firefox/addon/extension-test/"> &#8220;Extension Test&#8221; addon</a> to catch leaks of names to global namespaces.</p>
<p>&nbsp;</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fmesquilla.com%2F2011%2F09%2F08%2Favoiding-namespace-leaks-in-event-handlers%2F&amp;title=Avoiding%20namespace%20leaks%20in%20event%20handlers" id="wpa2a_8"><img src="http://mesquilla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://mesquilla.com/2011/09/08/avoiding-namespace-leaks-in-event-handlers/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Address Book accounts</title>
		<link>http://mesquilla.com/2011/03/08/address-book-accounts/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=address-book-accounts</link>
		<comments>http://mesquilla.com/2011/03/08/address-book-accounts/#comments</comments>
		<pubDate>Tue, 08 Mar 2011 20:16:39 +0000</pubDate>
		<dc:creator>rkent</dc:creator>
				<category><![CDATA[Exchange Web Services (EWS)]]></category>
		<category><![CDATA[Mailnews development]]></category>
		<category><![CDATA[Planet Mozilla]]></category>
		<category><![CDATA[Planet MozillaMessaging]]></category>
		<category><![CDATA[Skinkglue]]></category>

		<guid isPermaLink="false">http://mesquilla.com/?p=1126</guid>
		<description><![CDATA[New account types in Javascript for Thunderbird (Part 4) <p>Now that I am essentially feature complete in adding Address Book features to my Exchange Web Services implementation ExQuilla, I&#8217;d like to discuss how SkinkGlue was used to allow this to mostly be done in JavaScript.</p> <p>As review, SkinkGlue is my attempt to add an interface layer to Thunderbird to allow new account types to be added using javascript. SkinkGlue provides the necessary C++ interfaces to allow standard Thunderbird objects to be created without writing C++ code. SkinkGlue is licensed inder the standard Mozilla licenses, so it could be used by [...]]]></description>
				<content:encoded><![CDATA[<h2>New account types in Javascript for Thunderbird (Part 4)</h2>
<p>Now that I am essentially feature complete in adding Address Book features to my Exchange Web Services implementation <a href="../extensions/exquilla/">ExQuilla</a>, I&#8217;d like to discuss how SkinkGlue was used to allow this to mostly be done in JavaScript.</p>
<p>As review, <a href="http://mesquilla.com/category/skinkglue/">SkinkGlue</a> is my attempt to add an interface layer to Thunderbird to allow new account types to be added using javascript. SkinkGlue provides the necessary C++ interfaces to allow standard Thunderbird objects to be created without writing C++ code. SkinkGlue is licensed inder the standard Mozilla licenses, so it could be used by other extensions, or implemented as a Thunderbird standard feature. The current source is available <a href="http://hg.mozilla.org/users/kent_caspia.com/skinkglue/">here</a>.</p>
<h3>Adding Exchange Server contacts to the address book</h3>
<p>While <a href="http://mesquilla.com/extensions/exquilla/">ExQuilla</a> itself is mostly written in C++, I thought I would try to do the interface to the address book mostly in javascript.</p>
<p>At first I thought that would be straightforward, as the address book interfaces are much simpler than the mail interfaces, and there was supposed to be an existing extension that already did this. But I could not make this work reliably by trying to create a full javascript implementation of the nsIAbDirectory interface.</p>
<p>The main culprit is that the address book implementation seems to require that directory objects also derive from nsRDFResource. The underlying interface nsIRdfResource has the non-scriptable method GetValueConst, which is used by core Mozilla code in accessing RDF items. Perhaps I could have figured out how to work around this, but given the work I had already done in SkinkGlue, it seemed easier to just add a SkinkGlue type that allowed me to create an nsIAbDirectory object.  Another advantage of this is that I could take advantage of the existing full  generic C++ implementations, and then only override methods that I needed to change.</p>
<p>So in the end, I created a SkinkGlue object to be used for address book directories that can be extended using javascript. The C++ implementation of this derives from both nsRDFResource as well as nsAbDirProperty, and provides the minimum needed interfaces. This is actually quite parallel to the mailnews SkinkGlue objects, as the address book object nsAbDirProperty is similar in role to the mail object nsMsgDBFolder. Both provide a generic C++ implementation of key interfaces, and are used in standard mailnews C++ objects as a parent class. By adding this to SkinkGlue, I am simply allowing javascript users to follow the same methods that C++ users employ.</p>
<p>For address book cards, this was not necessary. There is an existing object &#8220;@mozilla.org/addressbook/cardproperty;1&#8243; which works just fine.</p>
<p>The result is that the standard Exchange Server &#8220;Contacts&#8221; folder and subfolders appear in the Thunderbird address book:</p>
<p style="text-align: center;"><a href="http://mesquilla.com/wp-content/uploads/2011/03/AddressBook.jpg"><img class="aligncenter size-full wp-image-1129" style="border: 0pt none;" title="Address Book" src="http://mesquilla.com/wp-content/uploads/2011/03/AddressBook.jpg" alt="" width="579" height="402" /></a></p>
<p style="text-align: left;">Note this is a Mork-free implementation, unlike the mailnews SkinkGlue objects.</p>
<p style="text-align: left;">Since the address book interface does not support a tree of directories, I had to implement the subfolder &#8220;Test subfolder&#8221; as a top-level address book with an extended name.</p>
<p style="text-align: left;">I hope to demonstrate this publically soon by adding &#8220;address book&#8221; support  to my <a href="http://mesquilla.com/extensions/tweequilla/">TweeQuilla</a> Twitter extension, where an address directory would be  interpreted as a list of followers.</p>
<h3 style="text-align: left;">Changes needed to Address Book to make this easier</h3>
<p>The address book interfaces are much cleaner on average than the mail interfaces, but unfortunately not completely there yet. What would make this easier to do?</p>
<h4>1. Remove address book dependencies on RDF</h4>
<p>The use of RDF is ultimately what forces me to create a C++ object to backup my javascript implementation.</p>
<h4>2. Add async access capability to key interfaces</h4>
<p>Most new address book accounts that might be supported would be remote sources. While the existing LDAP implementation manages to work around that, it is not at all clear from the interfaces how this is done. Really async access needs to be thought through and applied consistently. In my implementation, I essentially end up loading all of the contacts into memory, which will not scale well to large implementations.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fmesquilla.com%2F2011%2F03%2F08%2Faddress-book-accounts%2F&amp;title=Address%20Book%20accounts" id="wpa2a_10"><img src="http://mesquilla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://mesquilla.com/2011/03/08/address-book-accounts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Twitter for Thunderbird</title>
		<link>http://mesquilla.com/2011/01/04/twitter-for-thunderbird/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=twitter-for-thunderbird</link>
		<comments>http://mesquilla.com/2011/01/04/twitter-for-thunderbird/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 00:23:45 +0000</pubDate>
		<dc:creator>rkent</dc:creator>
				<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Mailnews development]]></category>
		<category><![CDATA[Planet Mozilla]]></category>
		<category><![CDATA[Planet MozillaMessaging]]></category>
		<category><![CDATA[Skinkglue]]></category>
		<category><![CDATA[Thunderbird's future]]></category>
		<category><![CDATA[TweeQuilla]]></category>

		<guid isPermaLink="false">http://mesquilla.com/?p=1117</guid>
		<description><![CDATA[New account types in Javascript for Thunderbird (Part 3) <p>I&#8217;ve now released an initial version of my extension TweeQuilla, Twitter for Thunderbird. While the extension provides useful functionality, the main purpose of this exercise was to demonstrate how a Thunderbird account can be created using just javascript. Well almost &#8230; there are some binary files needed (called Skinkglue) which are account-independent, and presumably could be made available in the Thunderbird core code to eliminate the need for extension writers to maintain their own C++ compile environment. Unfortunately that binary extension limits this current release to only working under Windows in [...]]]></description>
				<content:encoded><![CDATA[<h2>New account types in Javascript for Thunderbird (Part 3)</h2>
<p>I&#8217;ve now released an initial version of my extension <a href="https://addons.mozilla.org/en-US/thunderbird/addon/270436/">TweeQuilla, Twitter for Thunderbird</a>. While the extension provides useful functionality, the main purpose of this exercise was to demonstrate how a Thunderbird account can be created using just javascript. Well almost &#8230; there are some binary files needed (called Skinkglue) which are account-independent, and presumably could be made available in the Thunderbird core code to eliminate the need for extension writers to maintain their own C++ compile environment. Unfortunately that binary extension limits this current release to only working under Windows in TB 3.1.x</p>
<p>There are a number of screenshots on my <a href="http://mesquilla.com/extensions/tweequilla/">instruction page</a> for TweeQuilla,  but just as an example you get standard Twitter folders in your folder pane:</p>
<p style="text-align: center;"><a href="http://mesquilla.com/wp-content/uploads/2010/12/TweeQuillaFolderPane.jpg"><img class="size-full wp-image-1110   aligncenter" title="TweeQuilla Folder Pane" src="http://mesquilla.com/wp-content/uploads/2010/12/TweeQuillaFolderPane.jpg" alt="" width="255" height="340" /></a></p>
<p>Messages are displayed in thread pane, and show website bodies where appropriate just like an RSS feed:</p>
<p style="text-align: center;"><a href="http://mesquilla.com/wp-content/uploads/2010/12/TwitterWebsite.jpg"><img class="aligncenter size-full wp-image-1114" title="Tweet with Website" src="http://mesquilla.com/wp-content/uploads/2010/12/TwitterWebsite.jpg" alt="" width="512" height="510" /></a></p>
<p style="text-align: left;">My main interest here is really to prove that this can be done, and hopefully to inspire some others to add additional account types.</p>
<p style="text-align: left;">
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fmesquilla.com%2F2011%2F01%2F04%2Ftwitter-for-thunderbird%2F&amp;title=Twitter%20for%20Thunderbird" id="wpa2a_12"><img src="http://mesquilla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://mesquilla.com/2011/01/04/twitter-for-thunderbird/feed/</wfw:commentRss>
		<slash:comments>65</slash:comments>
		</item>
		<item>
		<title>Overriding C++ xpcom objects using Javascript</title>
		<link>http://mesquilla.com/2010/12/28/overriding-c-xpcom-objects-using-javascript/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=overriding-c-xpcom-objects-using-javascript</link>
		<comments>http://mesquilla.com/2010/12/28/overriding-c-xpcom-objects-using-javascript/#comments</comments>
		<pubDate>Wed, 29 Dec 2010 00:48:38 +0000</pubDate>
		<dc:creator>rkent</dc:creator>
				<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Mailnews development]]></category>
		<category><![CDATA[Planet Mozilla]]></category>
		<category><![CDATA[Planet MozillaMessaging]]></category>
		<category><![CDATA[Skinkglue]]></category>
		<category><![CDATA[TweeQuilla]]></category>

		<guid isPermaLink="false">http://mesquilla.com/?p=1068</guid>
		<description><![CDATA[New account types in Javascript for Thunderbird (Part 2) <p>One of the more difficult challenges in adding new Javascript-based accounts to Thunderbird is the problem of overriding functions of C++ objects in Javascript. C++ objects typically rely on the object inheritance structure of C++, and do not reliably use QueryInterface to force use of xpcom and xpconnect functionality. Even if they did, Javascript does not pass a reference to the underlying Javascript xpconnect object to the C++ object when it finds a C++ object in the prototype chain of an xpcom call. Instead, it passes the C++ object from the [...]]]></description>
				<content:encoded><![CDATA[<h2>New account types in Javascript for Thunderbird (Part 2)</h2>
<p>One of the more difficult challenges in adding new Javascript-based accounts to Thunderbird is the problem of overriding functions of C++ objects in Javascript. C++ objects typically rely on the object inheritance structure of C++, and do not reliably use QueryInterface to force use of xpcom and xpconnect functionality. Even if they did, Javascript does not pass a reference to the underlying Javascript xpconnect object to the C++ object when it finds a C++ object in the prototype chain of an xpcom call. Instead, it passes the C++ object from the prototype chain, so any attempts that you make to override the C++ object with a Javascript object get lost. What all of this means is that you really cannot rely on either Javascript or C++ inheritance to work as you expect.</p>
<p>In Skinkglue (the C++ portion of my project to allow JavaScript-based accounts in Thunderbird), I get around this by adding a layer of C++ code between the underlying Skink object (such as nsMsgIncomingServer) and the js-based component that will implement functions (such as a particular nsIMsgIncomingServer method) that will allow account-type-specific functionality. I want to describe that layer here and how it is used.</p>
<h3>The C++ part of the override layer</h3>
<p>Skinkglue has a standard implementation of many of the Skink objects, which simplifies the process of adding new accounts. So, for example, the Skinkglue implementation of nsIMsgIncomingServer is in a C++ object called msqSgIncomingServer. This object derives from the base Skink C++ object nsMsgIncomingServer like this:</p>
<pre>class msqSgIncomingServer : public nsMsgIncomingServer,
                            public msqISgIncomingServer</pre>
<p>The additional interface msqISgIncomingServer adds a few small additional methods that are needed to setup the generic version of an incomingserver, but are hard coded in the original Skink design.</p>
<p>C++ users of this object then derive directly from msqSgIncomingServer without difficulty. But for javascript callers, we add an additional &#8220;overridable&#8221; layer:</p>
<pre>class msqSgIncomingServerOverridable : public msqSgIncomingServer,
                                       public msqIOverride</pre>
<p>This msqIOverride interface contains specific information that is used to override base class functionality in Javascript. That interface is:</p>
<pre>interface msqIOverride : nsISupports
{
 /// @parameter aMethodName  string name of a C++ function that
 ///                         will be overridden by javascript
 void override(in ACString aMethodName);

 /// the javascript-based xpcom object that overrides methods
 attribute nsISupports jsParent;

 /// the base class used to implement default functionality
 readonly attribute nsISupports base;
};</pre>
<p>Essentially the way this works is that the Overridable class is the most specific object type in C++, and therefore all C++ objects see it and its inherited base classes. But the Overridable class knows when it should really use a Javascript override, because you tell it specifically which classes to override. So we make C++ happy, but still allow Javascript to be used.</p>
<p>The Overridable C++ layer is rather interesting, but probably not of much interest to most users who want to create Javascipt accounts. So I won&#8217;t discuss it further here.</p>
<h3>The Javascript glue part of the override layer</h3>
<p>Typically the way that Skink works is that specific types of objects that are needed for different account types are loaded using a standard Contract Id for the object, which is defined using a single protocol type. In Skink, that type might be &#8220;imap&#8221; or &#8220;pop3&#8243;, but in the demo TweeQuilla extension I use &#8220;twitter&#8221;. So when Skink needs to create an incoming server for a &#8220;twitter&#8221; protocol, it tries to create an object using the Contract Id &#8220;@mozilla.org/messenger/server;1?type=twitter&#8221; There are many of these types of components that are needed by Skink. I also used the same concept to add a couple more additional types that are used to create Skinkglue-derived versions of objects. All of these needed objects are layed out in the file <a href="http://hg.mozilla.org/users/kent_caspia.com/tweequilla/file/4c39b9a96022/components/twitterSkinkGlue.js">twitterSkinkGlue.js</a> As an example, for the twitter incoming server, I have the component registration:</p>
<pre>type = "twitter";

function IncomingServer() {
 Cu.import("resource://tweequilla/twitterIncomingServer.jsm");
 TwitterIncomingServer.call(this);
}

IncomingServer.prototype = {
 classDescription: "Twitter Incoming Server",
 classID:          Components.ID("{A6CA1F3D-73F3-4764-A6DC-61D495618533}"),
 contractID:       "@mozilla.org/messenger/server;1?type=" + type,
 QueryInterface:   XPCOMUtils.generateQI([Ci.nsIMsgIncomingServer,
                                          Ci.msqISgIncomingServer]),
}</pre>
<p>The implementation of the object is in a separate module, because I wanted to keep the component registrations separate from the detailed implementations of each object type. That implementation needs to follow a particular pattern in order to provide all of the needed hooks between the Javascript and C++ layers. Here are the main features, using a simplified example that  is partially derived from <a href="http://hg.mozilla.org/users/kent_caspia.com/tweequilla/file/4c39b9a96022/modules/twitterIncomingServer.jsm">twitterIncomingServer.jsm</a>:</p>
<pre>function TwitterIncomingServer()
{
 let server = Cc["@mesquilla.com/sgincomingserver;1"]
                .createInstance(Ci.nsIMsgIncomingServer);
 server instanceof Ci.msqISgIncomingServer;
 server instanceof Ci.msqIOverride;
 this.__proto__.__proto__ = server;

 // define the overrides
 this.jsServer = new TwitterIncomingServerOverride(server);
 server.jsParent = this.jsServer;

 // initializations
 server.override("msqSgIncomingServerOverridable::PerformBiff");
}</pre>
<p>So when a new TwitterIncomingServer component is instantiated, the Javascript module create a base Skinkglue C++ xpcom object, and sets that object as the __proto__.__proto__ of the Javascript component.</p>
<p>A separate Javascript class TwitterIncomingServerOverride is used to describe the overridden functions, and any local functions that may be needed. An instance of this is created in the main object constructor, and a reference to that object given to the underlying C++ class so that it may use the Javascript class to override requested methods. Any C++ methods that will be overridden with Javascript must be declared with override() calls. In this example, I am overriding the nsIMsgIncomingServer method PerformBiff with a Javascript version.</p>
<h3>The Javascript Implementation part of the override layer</h3>
<p>The actual overriding functions are implemented in the Override Javascript object:</p>
<pre>function TwitterIncomingServerOverride(aIncomingServer) {
 // initialization of member variables
 this.wrappedJSObject = this;
 this.baseServer = aIncomingServer;
}

TwitterIncomingServerOverride.prototype =
{
 QueryInterface:   XPCOMUtils.generateQI([Ci.nsIMsgIncomingServer]),

 // **** nsIMsgIncomingServer overrides
 performBiff: function _performBiff(aMsgWindow)
 {
  // do something to implement Biff
  // ...

  // call the base function if needed
  base = this.baseServer.base.QueryInterface(Ci.nsIMsgIncomingServer);
  base.performBiff(aMsgWindow);
 },

 // **** local methods
 sendStatusUpdate: function _sendStatusUpdate(text)
 {
 this.serverHelper().statuses.update(this.normalCallback,
                    this.errorCallback, null, 'json', text);
 },
}</pre>
<p>When the Override function is defined, it is given a reference to the base object, that it should save for use when calling base functionality. Also, it is good practice to add this.wrappedJSObject = this;  With this, you can get access to local javascript functions in the server, when you are given an xpcom link to the the server object, like this:</p>
<pre>  server.QueryInterface(msqIOverride)
        .jsParent
        .wrappedJSObject
        .sendStatusUpdate(text);</pre>
<p>So far, all of this seems to be working for me. While the glue may seem obscure, really it is all boilerplate and not all that hard to use.</p>
<p>Of course, we still have other &#8220;interesting&#8221; issues to deal with, such as message URLs and libmime. Stay tuned.</p>
<h3>Appendix: Solvable but Annoying Problems</h3>
<p>In several cases, the underlying Skink C++ will pass a null pointer to a C++ object that is expecting to give a result to xpconnect. The C++ can be designed to handle this, but it always causes Javascript implementations of xpconnect to fail. An example is <a href="http://hg.mozilla.org/releases/comm-1.9.2/annotate/b74c2de39308/mailnews/base/util/nsMsgDBFolder.cpp#l3348">this code</a>:</p>
<pre>nsMsgDBFolder::GetChildNamed(const nsAString&amp; aName, nsIMsgFolder **aChild)
{
 NS_ENSURE_ARG_POINTER(aChild);
 GetSubFolders(nsnull);</pre>
<p>For each of these that I find, I have to put a special override in the C++ Overridable layer to prevent crashes and assertions from xpconnect. That&#8217;s a real pain &#8211; and would be unnecessary if the core code followed appropriate behavior. I hope that when Skinkglue gets implemented in core, we can fix some of these unnecessary annoyances that greatly complicate Skinkglue.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fmesquilla.com%2F2010%2F12%2F28%2Foverriding-c-xpcom-objects-using-javascript%2F&amp;title=Overriding%20C%2B%2B%20xpcom%20objects%20using%20Javascript" id="wpa2a_14"><img src="http://mesquilla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://mesquilla.com/2010/12/28/overriding-c-xpcom-objects-using-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New account types in JavaScript for Thunderbird (Part 1)</title>
		<link>http://mesquilla.com/2010/12/27/new-account-types-in-javascript-for-thunderbird-part-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=new-account-types-in-javascript-for-thunderbird-part-1</link>
		<comments>http://mesquilla.com/2010/12/27/new-account-types-in-javascript-for-thunderbird-part-1/#comments</comments>
		<pubDate>Tue, 28 Dec 2010 06:29:19 +0000</pubDate>
		<dc:creator>rkent</dc:creator>
				<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Mailnews development]]></category>
		<category><![CDATA[Planet Mozilla]]></category>
		<category><![CDATA[Planet MozillaMessaging]]></category>
		<category><![CDATA[Skinkglue]]></category>
		<category><![CDATA[TweeQuilla]]></category>

		<guid isPermaLink="false">http://mesquilla.com/?p=1044</guid>
		<description><![CDATA[<p>For the month of December, I took a reprieve from ExQuilla, my Exchange Web Services extension, and decided to tackle the issue of trying to create new account types in JavaScript in a Thunderbird extension. This blog post is an introduction to that project. More detailed posts on specific issues should follow shortly.</p> Introduction to SkinkGlue <p>I&#8217;ve learned a lot about how to create account types in an extension while working with ExQuilla. While ExQuilla is written principally in C++, many of its concepts could be adapted to javascript. I decided to write TweeQuilla, a demonstration extension in javascript that [...]]]></description>
				<content:encoded><![CDATA[<p>For the month of December, I took a reprieve from ExQuilla, my Exchange Web Services extension, and decided to tackle the issue of trying to create new account types in JavaScript in a Thunderbird extension. This blog post is an introduction to that project. More detailed posts on specific issues should follow shortly.</p>
<h3>Introduction to SkinkGlue</h3>
<p>I&#8217;ve learned a lot about how to create account types in an extension while working with ExQuilla. While ExQuilla is written principally in C++, many of its concepts could be adapted to javascript. I decided to write <a href="http://">TweeQuilla</a>, a demonstration extension in javascript that will implement Twitter as an account type in Thunderbird to test the concepts.</p>
<p>Unfortunately it is not as simple as just writing stuff in javascript, as Joshua Cranmer discovered in his never-finished <a href="http://quetzalcoatal.blogspot.com/2010/04/developing-new-account-types-part-2.html">series of blog posts</a> attempting to do just that. There are complex interactions between javascript objects, C++ objects, and xpconnect that make it difficult or impossible with the existing core code to create a new account in javascript. I have not really solved that problem completely. Instead, I have created a C++ layer that I call <a href="http://hg.mozilla.org/users/kent_caspia.com/skinkglue/">Skinkglue</a>. (Skink, as my loyal fans know, is my personal term for the mass of code that implements the basic mailnews functionality in Thunderbird and related products such as SeaMonkey.)</p>
<p>Now Skinkglue is written in C++, and needs to be available before the javascript-only TweeQuilla will work. But Skinkglue does not contain any twitter-specific functionality. In fact, the same <a href="http://hg.mozilla.org/users/kent_caspia.com/skinkglue/">Skinkglue code</a> is also used by my ExQuilla addon to implement a new account type using C++.</p>
<p>My intentions are that Skinkglue will get implemented in core as a publically available interface. For that reason, I am making that code available using the standard MPL tri-license. Hopefully that would solve the issues of trying to use a C++ layer in an extension, as it would just be a part of the core that would be available in the standard distribution, so extension writers would not need to compile the C++.</p>
<h3>Introduction to TweeQuilla</h3>
<p>I chose Twitter as a demonstration because it is likely to be useful, because it is quite simple, and because there has been a lot of work already on the Mozilla platform in developing code for basic Twitter functionality. In particular, I am indebted to the <a href="https://addons.mozilla.org/en-US/thunderbird/addon/56120/">SocialMail</a> addon for the most recent set of updates to that work, though that addon built largely on earlier contributions.</p>
<p>I am not releasing TweeQuilla for public consumption yet on AMO because it is not at all ready (though I am starting to use it myself in my standard email profile.) But the main point is really to demonstrate that this can be done at all, and the extension as it stands makes that point.</p>
<p>Here are a few images of TweeQuilla:</p>
<p>A new twitter account is added using Account Actions in the Account Manager:</p>
<p style="text-align: center;"><a href="http://mesquilla.com/wp-content/uploads/2010/12/AddTwitterAccount.jpg"><img class="aligncenter size-full wp-image-1045" style="border: 0pt none;" title="Add Twitter Account" src="http://mesquilla.com/wp-content/uploads/2010/12/AddTwitterAccount.jpg" alt="" width="250" height="164" /></a></p>
<p>When you add a new twitter account, you must fill out an OAuth screen (this one is largely borrowed from SocialMail):</p>
<p style="text-align: center;"><a href="http://mesquilla.com/wp-content/uploads/2010/12/AddTwitterAccountReally.jpg"><img class="aligncenter size-full wp-image-1046" style="border: 0pt none;" title="Add Twitter Account" src="http://mesquilla.com/wp-content/uploads/2010/12/AddTwitterAccountReally.jpg" alt="" width="596" height="227" /></a></p>
<p>When the account is created, you see different types of twitter searches as mailnews folders. Currently I only have two implemented, one a list of the items that you have sent, and the other your full timeline:</p>
<p style="text-align: center;"><a href="http://mesquilla.com/wp-content/uploads/2010/12/ThunderbirdOverview.jpg"><img class="aligncenter size-full wp-image-1047" style="border: 0pt none;" title="Twitter folders in Thunderbird" src="http://mesquilla.com/wp-content/uploads/2010/12/ThunderbirdOverview.jpg" alt="" width="598" height="347" /></a></p>
<p style="text-align: left;">For tweets that just consist of text, the &#8220;message body&#8221; and the subject are both just the text of the tweet. For tweets with embedded html links, I am currently loading the html link as the &#8220;message body&#8221;.</p>
<h3 style="text-align: left;">Getting the source</h3>
<p>Both Skinkglue and TweeQuilla are available for the curious on my <a href="http://hg.mozilla.org/users/kent_caspia.com">Mozilla mercurial site</a>. The TweeQuilla version that exists there includes a compiled version of Skinkglue  that will work if you are running Thunderbird on version 3.1.x under  windows. Others are out of luck for now. The code at the moment is not easy to understand. I hope to remedy that by some comment cleanup, as well as documenting issues in further posts on this site.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fmesquilla.com%2F2010%2F12%2F27%2Fnew-account-types-in-javascript-for-thunderbird-part-1%2F&amp;title=New%20account%20types%20in%20JavaScript%20for%20Thunderbird%20%28Part%201%29" id="wpa2a_16"><img src="http://mesquilla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://mesquilla.com/2010/12/27/new-account-types-in-javascript-for-thunderbird-part-1/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Exquilla alpha 0.2 released</title>
		<link>http://mesquilla.com/2010/11/19/exquilla-alpha-0-2-released/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=exquilla-alpha-0-2-released</link>
		<comments>http://mesquilla.com/2010/11/19/exquilla-alpha-0-2-released/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 00:43:36 +0000</pubDate>
		<dc:creator>rkent</dc:creator>
				<category><![CDATA[Exchange Web Services (EWS)]]></category>
		<category><![CDATA[Planet Mozilla]]></category>
		<category><![CDATA[Planet MozillaMessaging]]></category>

		<guid isPermaLink="false">http://mesquilla.com/?p=1038</guid>
		<description><![CDATA[<p>Today I release alpha version 0.2 of ExQuilla Exchange Web Service. This may be downloaded at the AMO site for the ExQuilla.</p> <p>This release adds support for most primary email features, but not the EWS address book or calendar. However, this is still Alpha quality code, which means that many of the features have minor glitches.</p> Major Additions since last release Cross-account message copies and moves Message Filters Junk Processing (though moves of junk messages are not working) Virtual Folders Save message as a file Show message source Message print Improvements in handling of Unicode character sets <p>Further information is [...]]]></description>
				<content:encoded><![CDATA[<p>Today I release alpha version 0.2 of ExQuilla Exchange Web Service. This may be downloaded at the <a href="https://addons.mozilla.org/en-US/thunderbird/addon/244848/">AMO site for the ExQuilla</a>.</p>
<p>This release adds support for most primary email features, but not the EWS address book or calendar. However, this is still Alpha quality code, which means that many of the features have minor glitches.</p>
<h3>Major Additions since last release</h3>
<ul>
<li>Cross-account message copies and moves</li>
<li>Message Filters</li>
<li>Junk Processing (though moves of junk messages are not working)</li>
<li>Virtual Folders</li>
<li>Save message as a file</li>
<li>Show message source</li>
<li>Message print</li>
<li>Improvements in handling of Unicode character sets</li>
</ul>
<p>Further information is available at the <a href="http://mesquilla.com/extensions/exquilla">ExQuilla page</a> on this site.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fmesquilla.com%2F2010%2F11%2F19%2Fexquilla-alpha-0-2-released%2F&amp;title=Exquilla%20alpha%200.2%20released" id="wpa2a_18"><img src="http://mesquilla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://mesquilla.com/2010/11/19/exquilla-alpha-0-2-released/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>ExQuilla alpha 0.1 released (Mailnews Exchange Support)</title>
		<link>http://mesquilla.com/2010/10/22/exquilla-alpha-0-1-released-mailnews-exchange-support/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=exquilla-alpha-0-1-released-mailnews-exchange-support</link>
		<comments>http://mesquilla.com/2010/10/22/exquilla-alpha-0-1-released-mailnews-exchange-support/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 23:28:58 +0000</pubDate>
		<dc:creator>rkent</dc:creator>
				<category><![CDATA[Exchange Web Services (EWS)]]></category>
		<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Mailnews development]]></category>
		<category><![CDATA[Planet Mozilla]]></category>
		<category><![CDATA[Planet MozillaMessaging]]></category>

		<guid isPermaLink="false">http://mesquilla.com/?p=1024</guid>
		<description><![CDATA[<p>Today I released to Mozilla&#8217;s addon site a preview release of my Exchange Web Services extension, which I am calling ExQuilla (see the addons page here to download).</p> <p>This is alpha quality software, which means it is usable if you are brave. (I have been using it for a month with my rkent@mesquilla.com email account).</p> <p>There are many, many non-implemented features. Rather than repeat all of that here, I&#8217;ll just refer you to the extension description page that I have put up. The most severe restrictions are that this is email only, and there is no attempt to support localization [...]]]></description>
				<content:encoded><![CDATA[<p>Today I released to Mozilla&#8217;s addon site a preview release of my Exchange Web Services extension, which I am calling ExQuilla (see the addons page <a href="https://addons.mozilla.org/en-US/thunderbird/addon/244848/">here</a> to download).</p>
<p>This is alpha quality software, which means it is usable if you are brave. (I have been using it for a month with my rkent@mesquilla.com email account).</p>
<p>There are many, many non-implemented features. Rather than repeat all of that here, I&#8217;ll just refer you to the <a href="http://mesquilla.com/extensions/exquilla-exchange-web-services/">extension description page</a> that I have put up. The most severe restrictions are that this is email only, and there is no attempt to support localization or internationalization (so your Russian or Thai spam will look really strange.) Also, this build only supports Windows users running Thunderbird 3.1 Use at your own risk!</p>
<p>There is one major bug that I am aware of. For reasons that I have been unable to determine, sometimes the extension quits working, and sends a variety of messages to the error console. You need to restart to solve this. Hopefully I&#8217;ll figure out soon what is causing this.</p>
<p>The initial download of messages can be quite slow, which seems to be a limitation of Exchange Server (at least for the provider that I am using). But after the initial sync of messages in a particular folder, future use is generally quite fast, so be patient.</p>
<p>I would be interested to hear people&#8217;s experience in trying to get this to work with their own Exchange implementations. It really is too early though to give detailed feedback or bug reports, but I would be interested in anything that prevents it from being used at all for your needs.</p>
<p>I&#8217;ll be away most of next week (going to a<a href="https://www.prisonfellowship.org/oregon2010"> prisoner re-entry conference</a> and visiting a <a href="http://tmtl.org/">reentry facility</a> affiliated with my church) so it may be November until I can get back to you if you have issues.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fmesquilla.com%2F2010%2F10%2F22%2Fexquilla-alpha-0-1-released-mailnews-exchange-support%2F&amp;title=ExQuilla%20alpha%200.1%20released%20%28Mailnews%20Exchange%20Support%29" id="wpa2a_20"><img src="http://mesquilla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://mesquilla.com/2010/10/22/exquilla-alpha-0-1-released-mailnews-exchange-support/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
