0

Good day, I am working on a mozilla thunderbird addon and would like to make use of the components class. I know the current version of thunderbird is now 78+ so instead of XUL, I should be using HTML then from there make use of javascripts along with web extension APIs. I know i need to usensIMsgAccountManager to get the emails but I can`t make it work in javascript. I always get the error TypeError : Components.classes is undefined can someone help me? my javascript is below.

function populateAccounts() {
 var emails;
   try {
   var acctMgr = Components.classes["@mozilla.org/messenger/account-manager;1"].getService(Components.interfaces.nsIMsgAccountManager);
   var accounts = acctMgr.accounts;
     if (accounts.queryElementAt) {
       // Gecko 17+
       for (var i = 0; i < accounts.length; i++) {
         var account = accounts.queryElementAt(i, Components.interfaces.nsIMsgAccount);
         emails += account.key;
       }
     } else {
       // Gecko < 17
       for (var i = 0; i < accounts.Count(); i++) {
         var account = accounts.QueryElementAt(i, Components.interfaces.nsIMsgAccount);
         emails += account.key;
       }
     }
   } catch (e) {
   console.log(e);
   emails = e;
   }
 return emails;
 }
kenjiro jaucian
  • 391
  • 1
  • 3
  • 10

1 Answers1

1

*Support for extensions using XUL/XPCOM or the Add-on SDK was removed in Firefox 57, released November 2017.Add-ons using the techniques described in this document are considered a legacy technology in Firefox. Don't use these techniques to develop new add-ons. Use WebExtensions instead. * nsIMsgAccountManager is an XPCOM object so it is no longer support in Thunderbird 78, instead of using XPCOM objects WebExtensions APIs should be used. There is a webextension API called accounts which returns a promise that can be used to get information for the user`s account including email.

For more info about XPCOM please open the link below

https://developer.mozilla.org/en-US/docs/Archive/Mozilla/XUL/Tutorial/XPCOM_Interfaces

Fore more info about Thunderbird Web Extensions API please open the link below

https://developer.thunderbird.net/add-ons/mailextensions

https://thunderbird-webextensions.readthedocs.io/en/78/

Fore more info about Promise please open the link below

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

kenjiro jaucian
  • 391
  • 1
  • 3
  • 10
  • It is technically possible to access the legacy components through so-called “experiment” add-ons, but with an increased risk of breakage in the future if those components are removed from Thunderbird. I'm mentioning this just for completeness, but would not recommend using the legacy parts for new add-ons. As you describe, WebExtensions should be favoured. – Qeole Nov 24 '20 at 13:41