On linux, the password database is stored in:
/home/$USER/.thunderbird/$RANDOM_STRING.default/signons.sqlite
See @Karrax's answer for Windows locations.
You can examine this file interactively using the sqlite3 CLI:
sqlite3 ~/.thunderbird/zxcv1357.default/signons.sqlite
sqlite> .tables
moz_disabledHosts moz_logins
sqlite> .schema moz_logins
CREATE TABLE moz_logins (id INTEGER PRIMARY KEY,hostname TEXT NOT NULL,httpRealm TEXT,formSubmitURL TEXT,usernameField TEXT NOT NULL,passwordField TEXT NOT NULL,encryptedUsername TEXT NOT NULL,encryptedPassword TEXT NOT NULL,guid TEXT,encType INTEGER, timeCreated INTEGER, timeLastUsed INTEGER, timePasswordChanged INTEGER, timesUsed INTEGER);
CREATE INDEX moz_logins_encType_index ON moz_logins(encType);
CREATE INDEX moz_logins_guid_index ON moz_logins(guid);
CREATE INDEX moz_logins_hostname_formSubmitURL_index ON moz_logins(hostname, formSubmitURL);
CREATE INDEX moz_logins_hostname_httpRealm_index ON moz_logins(hostname, httpRealm);
CREATE INDEX moz_logins_hostname_index ON moz_logins(hostname);
sqlite> select * from moz_logins;
3|imap://imap.example.com|imap://imap.example.com||||MEIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIQwErTyUiOp12345GmuM2KNXcZ=|MEIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIQwErTyUiOp12345GmuM2KNXcZ=|{1234abcd-beef-feed-face-0a0a0a0a0a}|1|1320123123123|1320123123123|1320123123123|1
4|smtp://smtp.example.com|smtp://smtp.example.com||||MEIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIQwErTyUiOp12345GmuM2KNXcZ=|MEIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIQwErTyUiOp12345GmuM2KNXcZ=|{1decafbad-fa11-1234-1234-abcdef0123456}|1|1320123123123|1320123123123|1320123123123|1
If you wanted to fetch usernames/passwords from code, it's as simple as:
echo "select encryptedUsername, encryptedPassword from moz_logins;" | sqlite3 ~/.thunderbird/*.default/signons.sqlite
or the equivalent in your favorite programming language with sqlite3 bindings.
Of course, if they're encrypted (as shown above) you'll need to put some effort into guessing the master password used for encryption. As a user, know that if you use a weak master password (e.g. P4ssw0rd1) it will be trivial to get the cleartext passwords.
.sqlitefiles in the mentioned folder. Glad to know that Mozilla no longer saves passwords in this manner anymore.signons.sqlitedoesn't exist anymore andmoz_loginstable couldn't be found in any of the tables. Hopefully, they are encrypting this information somewhere inside thunderbird! – Prahlad Yeri Jan 21 '16 at 19:10logins.json– ZAB Jun 10 '16 at 09:55encryptedUsernameandencryptedPassword, though I'm not so sure how strong (or weak) their encryption could be. – Prahlad Yeri Jun 10 '16 at 11:11signons.sqlite– ZAB Jun 10 '16 at 11:14