企業のメールシステムを構成する必要が生じた場合、まずMicrosoftのソリューション-ExchangeおよびOutlookを使用することが考えられます。 残念ながら、これらのソリューションは十分な柔軟性を提供せず、さまざまな方法で多くに適していません。
さて、しかし、MAPIプロトコルが提供するメールと同じ美しく透明なユーザーエクスペリエンスが必要なため、代わりに何を使用しますか? 小さなシャッフルとライトは非常に明らかであり、実際には代替ソリューション
-IMAPはありません。 IMAPは、神に感謝します。現代世界では、ほぼすべてのメールクライアントがIMAPをサポートしているため、私たちには大きな選択肢があります。 ただし、よく見ると、1つまたは2つのアイテムの非常に控えめなセットに絞り込まれています。
だから、私たちはしたい:
- はじめに-クロスプラットフォーム。 標準化されたテクノロジーを使用するのは愚かですが、最初に1つのOSに接続する場合、すぐにExchangeを購入し、展開されたインフラストラクチャの柔軟性を永遠に忘れてしまいます。
- IMAPおよびIMAP ACLの完全サポート。 2番目のポイントは重要です。 それなしでは、共有フォルダを整理したり、メールボックスを使用したさまざまな操作の権限を他のユーザーに転送したり、企業メールシステムでそれを使用したりすることはできません。
- サーバーを介してクライアントを集中的に構成する機能。
- クライアント設定の柔軟性と使いやすさ。
インターネットでの短い検索では、近いと考えられる唯一のオプションが
Mozilla Thunderbirdであることが
わかります。 しかし、質問は次のとおりです。Thunderbirdは必要な機能をすべて提供できるので、ExchangeやOutlookを簡単に置き換えることができますか? できることだけでなく、Microsoft製品の単なる平凡な模倣以上のものを達成できることがわかります。
もちろん、最初にサーバーを決定する必要があります。そうしないと、インフラストラクチャ全体をメールクライアントに置き換えることができません。
Dovecotは、私の分野で最も信頼性が高く柔軟な製品の1つであるため使用しますが、最も重要なことは、
Dovecotは IMAPサポートを完全に
実装 する 唯一の広く使用されているサーバーです。 他のサーバーを使用できますが、最大の効率を達成するには、サーバーが少なくともIMAP ACLをサポートする必要があります。
設定の荒野で
では、Thunderbirdに直接行きましょう。 Thunderbirdはすべての設定をテキスト設定ファイルの形式で保存しますが、多くの人に愛されていますが、やや珍しい方法です。 Thunderbirdの設定は
JavaScriptスクリプトです。 また、Thunderbirdはそれらを読み取るだけでなく、実行します。 これから非常に面白い結論が得られます。JS機能の多くを使用して、必要なパラメーターを動的に生成できます。 もちろん、ThunderbirdでのJSのサポートは完全にはほど遠いですが、私たちには十分すぎるでしょう。
メインのThunderbird設定ファイルはユーザープロファイルに保存され、
prefs.jsと呼ばれ
ます 。 念のため:Thunderbirdプロファイルは、ホームフォルダー(Linuxの場合)、AppData(Windowsの場合)、またはプログラムフォルダー(Thunderbird Portableの場合)にあります。
指定されたファイルの形式は非常に単純で、すべての形式の行で構成されます
user_pref("app.update.auto", false);
, .
prefs.js , Thunderbird. ,
prefs.js.
->...,
,
...
, . - , .
Mozilla AutoConfig (aka Mission Control)
. ,
prefs.js , , Thunderbird ,
prefs.js.
JavaScript , , JavaScript .
Thunderbird.
greprefs/all.js,
/usr/lib/thunderbird-xxx/ Ubuntu Linux Thunderbird.exe Windows. :
pref("general.config.obscure_value", 0);
pref("general.config.filename", "thunderbird.cfg");
, Thunderbird, . , 0.
thunderbird.cfg. , Thunderbird. , Thunderbird Linux
which thunderbird
Windows , , .
thunderbird.cfg? JavaScript , Thunderbird. - , :
function pref(prefName, value)
function defaultPref(prefName, value)
function lockPref(prefName, value)
function unlockPref(prefName)
function getPref(prefName)
function clearPref(prefName)
function getenv(envName)
, . , ,
.
, ?
- pref — . Thunderbird, thunderbird.cfg, .
- defaultPref — . .
- lockPref — , , . , .
- unlockPref — , .
- getPref — .
- clearPref — .
- getenv — .
LDAP, , . , .
thunderbird.cfg, «» Thunderbird:
// Thunderbird Mozilla AutoConfig
try {
// , Thunderbird ( , )
if(getenv("USER") != "") {
// *NIX
var env_user = getenv("USER");
var env_home = getenv("HOME");
} else {
// Windows
var env_user = getenv("USERNAME");
var env_home = getenv("HOMEPATH");
}
// account1
defaultPref("mail.accountmanager.defaultaccount", "account1");
// account1
defaultPref("mail.accountmanager.accounts", "account1");
// account1 server1 (IMAP)
lockPref("mail.account.account1.server", "server1");
// IMAP ,
//
lockPref("mail.accountmanager.localfoldersserver", "server1");
// " "
lockPref("mail.rights.version", 1);
// . ,
// all.js Mozilla AutoConfig .
lockPref("app.update.enabled", false);
lockPref("extensions.update.enabled", false);
// IMAP
lockPref("mail.server.server1.type", "imap");
lockPref("mail.server.server1.hostname", "mail.domain.com"); // , , ,
lockPref("mail.server.server1.realhostname", "mail.domain.com"); //
lockPref("mail.server.server1.port", 143); //
lockPref("mail.server.server1.socketType", 2); // STARTLS
lockPref("mail.server.server1.name", env_user);
lockPref("mail.server.server1.userName", env_user); // ,
lockPref("mail.server.server1.realuserName", env_user); // hostname
lockPref("mail.server.server1.login_at_startup", true); // ! ;)
lockPref("mail.server.server1.isSecure", true); //
// SMTP
lockPref("mail.smtpserver.smtp1.hostname", "mail.domain.com");
lockPref("mail.smtpserver.smtp1.port", 25);
lockPref("mail.smtpserver.smtp1.description", "SMTP « »");
lockPref("mail.smtpserver.smtp1.try_ssl", 2);
lockPref("mail.smtpserver.smtp1.auth_method", 1);
lockPref("mail.smtpserver.smtp1.username", env_user);
// - ..
defaultPref("mail.identity.id1.fullName", env_user); // ,
lockPref("mail.identity.id1.useremail", env_user + "@domain.com");
lockPref("mail.identity.id1.reply_to", env_user + "@domain.com");
lockPref("mail.identity.id1.valid", true);
lockPref("mail.identity.id1.smtpServer", "smtp1");
lockPref("mail.identity.id1.organization", " « »");
// ID
lockPref("mail.account.account1.identities", "id1");
// LDAP
lockPref("ldap_2.servers.domain.uri", "ldap://dc.domain.com/OU=,OU=domain,DC=DOMAIN,DC=COM??sub?(mail=*)");
lockPref("ldap_2.servers.domain.auth.dn", "DOMAIN\\" + env_user);
lockPref("ldap_2.servers.domain.auth.saslmech", "");
lockPref("ldap_2.servers.domain.description", " ' '");
lockPref("ldap_2.servers.domain.filename", "empl.mab");
lockPref("ldap_2.servers.domain.maxHits", 300);
//
lockPref("ldap_2.autoComplete.directoryServer", "ldap_2.servers.domain");
lockPref("ldap_2.autoComplete.useDirectory", true);
} catch(e) {
displayError("lockedPref", e);
}
, , .
try , ( Thunderbird ). , , . , , ,
mail.server.server.socketType .
: - Thunderbird , Thunderbird .
Thunderbird (
all.js!), , Thunderbird , , LDAP .
Thunderbird. ,
lockPref(), «». — - .
, ,
localfoldersserver IMAP . IMAP , , , , .
, JavaScript , . ,
thunderbird.cfg . , .
Thunderbird URL. — ,
general.config.filename all.js (
thunderbird.cfg) :
lockPref("autoadmin.global_config_url", "http://mail.domain.com/thunderbird.cfg");
lockPref("autoadmin.append_emailaddr", false);
, . — , .
: Thunderbird. , JavaScript, , . — , SQL LDAP . .
, . HTTP , PHP Perl , , .
— , Thunderbird, , - . Thunderbird
getent, URL GET-. : Thunderbird - URL GET-
autoadmin.global_config_url. ,
mod_rewrite URL URL c GET- URL .
, .
thunderbird.cfg, Thunderbird, :
// Thunderbird
if(getenv("USER") != "") {
// *NIX settings
var env_user = getenv("USER");
var env_home = getenv("HOME");
} else {
// Windows settings
var env_user = getenv("USERNAME");
var env_home = getenv("HOMEPATH");
}
lockPref("autoadmin.global_config_url", "http://mail.domain.com/tb/user/"+env_user);
lockPref("autoadmin.append_emailaddr", false);
malamut Thunderbird
http://mail.domain.com/tb/user/malamut
mail.domain.com
Apache mod_rewrite mod_perl, .
tb/ mail.domain.com Perl-
conf.pl, Thunderbird,
.htaccess :
Options -Indexes +ExecCGI
AddHandler cgi-script .pl
RewriteEngine on
RewriteBase /tb
RewriteRule ^user/(.*) conf.pl?user=$1 [L]
URL
http://mail.domain.com/tb/user/malamut
URL
http://mail.domain.com/tb/conf.pl?user=malamut
Perl , GET- Thunderbird.
:
#!/usr/bin/perl
use 5.010;
use CGI qw/:standard/;
#
$smtp_server = "mail.domain.com";
$imap_server = "mail.domain.com";
$organization = " « »";
#
print header(
-type=>'application/javascript'
);
# Username - GET
$user = param('user');
unless ($user) { die "We need a user, please!\n" }
# user lovercase, IMAP . username
# , .
$user = lc $user;
#########################################################################
#
# .
# FIXME:
@mails = getEmails($user);
#
# FIXME:
$name = getName($user);
#########################################################################
#
print <<HEAD;
// Thunderbird $user ($name)
try {
HEAD
#
# SMTP SMTP
# JavaScript.
# , .
# mail.accountmanager.accounts mail.smtpservers, .
print <<SERVERS;
//
// ,
var accounts = getPref("mail.accountmanager.accounts");
var accounts_s = accounts + ",";
if (! (accounts_s.indexOf("account1,")+1) ) {
accounts = accounts + ",account1";
}
pref("mail.accountmanager.accounts",accounts);
// IMAP
lockPref("mail.server.server1.type", "imap");
lockPref("mail.server.server1.hostname", "$imap_server"); // , , ,
lockPref("mail.server.server1.realhostname", "$imap_server"); //
lockPref("mail.server.server1.port", 143); //
lockPref("mail.server.server1.socketType", 2); // STARTLS
lockPref("mail.server.server1.name", "$name");
lockPref("mail.server.server1.userName", "$user"); // ,
lockPref("mail.server.server1.realuserName", "$user"); // hostname
lockPref("mail.server.server1.login_at_startup", true); // ! ;)
lockPref("mail.server.server1.isSecure", true); //
// IMAP
lockPref("mail.account.account1.server", "server1");
// SMTP
lockPref("mail.smtpserver.smtp1.hostname", "$smtp_server");
lockPref("mail.smtpserver.smtp1.port", 25);
lockPref("mail.smtpserver.smtp1.description", "SMTP $organization");
lockPref("mail.smtpserver.smtp1.try_ssl", 2);
lockPref("mail.smtpserver.smtp1.auth_method", 1);
lockPref("mail.smtpserver.smtp1.username", "$user");
// SMTP
var smtp = getPref("mail.smtpservers");
var smtp_s = smtp + ",";
if (! (smtp_s.indexOf("smtp1,")+1) ) {
smtp = smtp + ",smtp1";
}
pref("mail.smtpservers", smtp);
SERVERS
#
print <<MISC;
// " "
lockPref("mail.rights.version", 1);
//
lockPref("app.update.enabled", false);
lockPref("extensions.update.enabled", false);
// IMAP ,
//
lockPref("mail.accountmanager.localfoldersserver", "server1");
// TB
lockPref("mail.accountmanager.defaultaccount", "account1");
// IMAP ,
//
lockPref("mail.accountmanager.localfoldersserver", "server1");
MISC
#
# , .
$i=0;
@ids = ();
foreach $mail (@mails) {
$i++;
$id = <<ID;
// $mail $user ($name)
defaultPref("mail.identity.id$i.fullName", "$name");
lockPref("mail.identity.id$i.useremail", "$mail");
lockPref("mail.identity.id$i.reply_to", "$mail");
lockPref("mail.identity.id$i.valid", true);
lockPref("mail.identity.id$i.smtpServer", "smtp1");
lockPref("mail.identity.id$i.organization", "$organization");
lockPref("mail.identity.id$i.archive_folder", "imap://$user\@$imap_server/Archives");
lockPref("mail.identity.id$i.draft_folder", "imap://$user\@$imap_server/Drafts");
lockPref("mail.identity.id$i.drafts_folder_picker_mode", 0);
lockPref("mail.identity.id$i.fcc_folder", "imap://$user\@$imap_server/Sent");
lockPref("mail.identity.id$i.fcc_folder_picker_mode", 0);
lockPref("mail.identity.id$i.stationery_folder", "imap://$user\@$imap_server/Templates");
ID
print $id;
push @ids, "id$i";
}
# TB,
$ids = join ',', @ids;
print <<IDS;
//
lockPref("mail.account.account1.identities", "$ids");
IDS
# LDAP
print <<BOOKS;
//
lockPref("ldap_2.servers.domain.uri", "ldap://dc.domain.com/OU=,OU=domain,DC=DOMAIN,DC=COM??sub?(mail=*)");
lockPref("ldap_2.servers.domain.auth.dn", "DOMAIN\\\\$user");
lockPref("ldap_2.servers.domain.auth.saslmech", "");
lockPref("ldap_2.servers.domain.description", " ' '");
lockPref("ldap_2.servers.domain.filename", "empl.mab");
lockPref("ldap_2.servers.domain.maxHits", 300);
//
lockPref("ldap_2.autoComplete.directoryServer", "ldap_2.servers.domain");
lockPref("ldap_2.autoComplete.useDirectory", true);
BOOKS
#################################################
# #
if ($user eq 'malamut') {
yandex('yandex',50);
}
#################################################
print <<TAIL;
} catch(e) {
displayError("lockedPref", e);
}
TAIL
# . id , ya_name -
sub yandex {
my ($ya_name, $id) = @_;
print <<YANDEX;
// SMTP $ya_name\@yandex.ru
lockPref("mail.smtpserver.smtp$id.hostname", "smtp.yandex.ru");
lockPref("mail.smtpserver.smtp$id.port", 465);
lockPref("mail.smtpserver.smtp$id.description", "SMTP $ya_name\@yandex.ru");
lockPref("mail.smtpserver.smtp$id.try_ssl", 3);
lockPref("mail.smtpserver.smtp$id.auth_method", 1);
lockPref("mail.smtpserver.smtp$id.username", "$ya_name\@yandex.ru");
// SMTP
var smtp = getPref("mail.smtpservers");
var smtp_s = smtp + ",";
if (! (smtp_s.indexOf("smtp$id,")+1) ) {
smtp = smtp + ",smtp$id";
}
pref("mail.smtpservers", smtp);
// IMAP $ya_name\@yandex.ru
lockPref("mail.server.server$id.type", "imap");
lockPref("mail.server.server$id.hostname", "imap.yandex.ru");
lockPref("mail.server.server$id.realhostname", "imap.yandex.ru");
lockPref("mail.server.server$id.port", 993);
lockPref("mail.server.server$id.socketType", 3);
lockPref("mail.server.server$id.name", "$ya_name\@yandex.ru");
lockPref("mail.server.server$id.userName", "$ya_name\@yandex.ru");
lockPref("mail.server.server$id.realuserName", "$ya_name\@yandex.ru");
lockPref("mail.server.server$id.check_new_mail", true);
lockPref("mail.server.server$id.login_at_startup", true);
lockPref("mail.server.server$id.isSecure", true);
lockPref("mail.server.server$id.max_cached_connections", 5);
// $ya_name\@yandex.ru
defaultPref("mail.identity.id$id.fullName", "$ya_name");
lockPref("mail.identity.id$id.useremail", "$ya_name\@yandex.ru");
lockPref("mail.identity.id$id.reply_to", "$ya_name\@yandex.ru");
lockPref("mail.identity.id$id.valid", true);
lockPref("mail.identity.id$id.smtpServer", "smtp$id");
defaultPref("mail.identity.id$id.organization", "");
lockPref("mail.account.account$id.identities", "id$id");
lockPref("mail.account.account$id.server", "server$id");
// $ya_name\@yandex.ru
accounts = getPref("mail.accountmanager.accounts");
accounts_s = accounts + ",";
if (! (accounts_s.indexOf("account$id,")+1) ) {
accounts = accounts + ",account$id";
}
pref("mail.accountmanager.accounts",accounts);
YANDEX
}
.
http://mail.domain.com/tb/user/malamut
, :
// Thunderbird malamut (Malamut)
try {
//
// ,
var accounts = getPref("mail.accountmanager.accounts");
var accounts_s = accounts + ",";
if (! (accounts_s.indexOf("account1,")+1) ) {
accounts = accounts + ",account1";
}
pref("mail.accountmanager.accounts",accounts);
// IMAP
lockPref("mail.server.server1.type", "imap");
lockPref("mail.server.server1.hostname", "mail.domain.com"); // , , ,
lockPref("mail.server.server1.realhostname", "mail.domain.com"); //
lockPref("mail.server.server1.port", 143); //
lockPref("mail.server.server1.socketType", 2); // STARTLS
lockPref("mail.server.server1.name", "Malamut");
lockPref("mail.server.server1.userName", "malamut"); // ,
lockPref("mail.server.server1.realuserName", "malamut"); // hostname
lockPref("mail.server.server1.login_at_startup", true); // ! ;)
lockPref("mail.server.server1.isSecure", true); //
// IMAP
lockPref("mail.account.account1.server", "server1");
// SMTP
lockPref("mail.smtpserver.smtp1.hostname", "mail.domain.com");
lockPref("mail.smtpserver.smtp1.port", 25);
lockPref("mail.smtpserver.smtp1.description", "SMTP « »");
lockPref("mail.smtpserver.smtp1.try_ssl", 2);
lockPref("mail.smtpserver.smtp1.auth_method", 1);
lockPref("mail.smtpserver.smtp1.username", "malamut");
// SMTP
var smtp = getPref("mail.smtpservers");
var smtp_s = smtp + ",";
if (! (smtp_s.indexOf("smtp1,")+1) ) {
smtp = smtp + ",smtp1";
}
pref("mail.smtpservers", smtp);
// " "
lockPref("mail.rights.version", 1);
//
lockPref("app.update.enabled", false);
lockPref("extensions.update.enabled", false);
// IMAP ,
//
lockPref("mail.accountmanager.localfoldersserver", "server1");
// TB
lockPref("mail.accountmanager.defaultaccount", "account1");
// IMAP ,
//
lockPref("mail.accountmanager.localfoldersserver", "server1");
// malamut@domain.com malamut (Malamut)
defaultPref("mail.identity.id1.fullName", "Malamut");
lockPref("mail.identity.id1.useremail", "malamut@domain.com");
lockPref("mail.identity.id1.reply_to", "malamut@domain.com");
lockPref("mail.identity.id1.valid", true);
lockPref("mail.identity.id1.smtpServer", "smtp1");
lockPref("mail.identity.id1.organization", " « »");
lockPref("mail.identity.id1.archive_folder", "imap://malamut@mail.domain.com/Archives");
lockPref("mail.identity.id1.draft_folder", "imap://malamut@mail.domain.com/Drafts");
lockPref("mail.identity.id1.drafts_folder_picker_mode", 0);
lockPref("mail.identity.id1.fcc_folder", "imap://malamut@mail.domain.com/Sent");
lockPref("mail.identity.id1.fcc_folder_picker_mode", 0);
lockPref("mail.identity.id1.stationery_folder", "imap://malamut@mail.domain.com/Templates");
// admin@domain.com malamut (Malamut)
defaultPref("mail.identity.id2.fullName", "Malamut");
lockPref("mail.identity.id2.useremail", "admin@domain.com");
lockPref("mail.identity.id2.reply_to", "admin@domain.com");
lockPref("mail.identity.id2.valid", true);
lockPref("mail.identity.id2.smtpServer", "smtp1");
lockPref("mail.identity.id2.organization", " « »");
lockPref("mail.identity.id2.archive_folder", "imap://malamut@mail.domain.com/Archives");
lockPref("mail.identity.id2.draft_folder", "imap://malamut@mail.domain.com/Drafts");
lockPref("mail.identity.id2.drafts_folder_picker_mode", 0);
lockPref("mail.identity.id2.fcc_folder", "imap://malamut@mail.domain.com/Sent");
lockPref("mail.identity.id2.fcc_folder_picker_mode", 0);
lockPref("mail.identity.id2.stationery_folder", "imap://malamut@mail.domain.com/Templates");
//
lockPref("mail.account.account1.identities", "id1,id2");
//
lockPref("ldap_2.servers.domain.uri", "ldap://dc.domain.com/OU=,OU=domain,DC=DOMAIN,DC=COM??sub?(mail=*)");
lockPref("ldap_2.servers.domain.auth.dn", "DOMAIN\\malamut");
lockPref("ldap_2.servers.domain.auth.saslmech", "");
lockPref("ldap_2.servers.domain.description", " ' '");
lockPref("ldap_2.servers.domain.filename", "empl.mab");
lockPref("ldap_2.servers.domain.maxHits", 300);
//
lockPref("ldap_2.autoComplete.directoryServer", "ldap_2.servers.domain");
lockPref("ldap_2.autoComplete.useDirectory", true);
// SMTP yandex@yandex.ru
lockPref("mail.smtpserver.smtp50.hostname", "smtp.yandex.ru");
lockPref("mail.smtpserver.smtp50.port", 465);
lockPref("mail.smtpserver.smtp50.description", "SMTP yandex@yandex.ru");
lockPref("mail.smtpserver.smtp50.try_ssl", 3);
lockPref("mail.smtpserver.smtp50.auth_method", 1);
lockPref("mail.smtpserver.smtp50.username", "yandex@yandex.ru");
// SMTP
var smtp = getPref("mail.smtpservers");
var smtp_s = smtp + ",";
if (! (smtp_s.indexOf("smtp50,")+1) ) {
smtp = smtp + ",smtp50";
}
pref("mail.smtpservers", smtp);
// IMAP yandex@yandex.ru
lockPref("mail.server.server50.type", "imap");
lockPref("mail.server.server50.hostname", "imap.yandex.ru");
lockPref("mail.server.server50.realhostname", "imap.yandex.ru");
lockPref("mail.server.server50.port", 993);
lockPref("mail.server.server50.socketType", 3);
lockPref("mail.server.server50.name", "yandex@yandex.ru");
lockPref("mail.server.server50.userName", "yandex@yandex.ru");
lockPref("mail.server.server50.realuserName", "yandex@yandex.ru");
lockPref("mail.server.server50.check_new_mail", true);
lockPref("mail.server.server50.login_at_startup", true);
lockPref("mail.server.server50.isSecure", true);
lockPref("mail.server.server50.max_cached_connections", 5);
// yandex@yandex.ru
defaultPref("mail.identity.id50.fullName", "yandex");
lockPref("mail.identity.id50.useremail", "yandex@yandex.ru");
lockPref("mail.identity.id50.reply_to", "yandex@yandex.ru");
lockPref("mail.identity.id50.valid", true);
lockPref("mail.identity.id50.smtpServer", "smtp50");
defaultPref("mail.identity.id50.organization", "");
lockPref("mail.account.account50.identities", "id50");
lockPref("mail.account.account50.server", "server50");
// yandex@yandex.ru
accounts = getPref("mail.accountmanager.accounts");
accounts_s = accounts + ",";
if (! (accounts_s.indexOf("account50,")+1) ) {
accounts = accounts + ",account50";
}
pref("mail.accountmanager.accounts",accounts);
} catch(e) {
displayError("lockedPref", e);
}
, Thunderbird, Perl .
, Thunderbird, , . , — , .
, , Thunderbird, .
Thunderbird . , , SMTP , Thunderbird . - , , , . - , . — , 1.
, - , , , Thunderbird , . :
lockPref("mail.account.account1.identities", "id1,id2");
Thunderbird (
account), , (
identity). , ,
mail.account.accountN, N — . , ,
mail.identity.idN, N — .
Thunderbird
mail.accountmanager.accounts. , Thunderbird. , Thunderbird, , .
N
mail.account.accountN.identities. IMAP
mail.account.accountN.server, SMTP
mail.identity.idN.smtpServer.
, , - , , .
-, JavaScript , . , :
// ,
var accounts = getPref("mail.accountmanager.accounts");
var accounts_s = accounts + ",";
if (! (accounts_s.indexOf("account1,")+1) ) {
accounts = accounts + ",account1";
}
pref("mail.accountmanager.accounts",accounts);
, , . , .
, Perl . , Yandex , . Thunderbird , , Yandex ! .
, - yandex . , , , , , , . , , .
, . Thunderbird , , - , . , , .
Thunderbird
Thunderbird . , Thunderbird , . .
, IMAP ACL
. Thunderbird
Lightning, , , .
, , ,
extensions/, Thunderbird.
, .
default/profile. , , .
!