理想的な企業メールクライアント

企業のメールシステムを構成する必要が生じた場合、まずMicrosoftのソリューション-ExchangeおよびOutlookを使用することが考えられます。 残念ながら、これらのソリューションは十分な柔軟性を提供せず、さまざまな方法で多くに適していません。



さて、しかし、MAPIプロトコルが提供するメールと同じ美しく透明なユーザーエクスペリエンスが必要なため、代わりに何を使用しますか? 小さなシャッフルとライトは非常に明らかであり、実際には代替ソリューション-IMAPはありません。 IMAPは、神に感謝します。現代世界では、ほぼすべてのメールクライアントがIMAPをサポートしているため、私たちには大きな選択肢があります。 ただし、よく見ると、1つまたは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)
      
      





, . , , .



, ?

  1. pref — . Thunderbird, thunderbird.cfg, .
  2. defaultPref — . .
  3. lockPref — , , . , .
  4. unlockPref — , .
  5. getPref — .
  6. clearPref — .
  7. 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. , , .



!



All Articles