複数Account APIの利用

By Alec Flett alecf@netscape.com

Structure

account system は以下からなります。:

  • Account Manager (nsIMsgAccountManager): client の中には、account、server などの一覧を扱う1つの account manager があります。 acount に関係した新しい object の生成の責任がたいていあります。 account managerは、accountのmain の list を扱います。
  • Account (nsIMsgAccount): 1つの account は1つの single incoming server と1つ以上の identity からなります。 1つの account は、1つの imcoming server と identity を共に結びつける1つの container にすぎません。
  • Incoming Server (nsIMsgIncomingServer): 1つの incoming server は、POP,IMAP,NNTP server のような1つのremote message の保存を表現します。 それは hostname, user login name と通知の設定のような remote server から mail を集めるために必要な全ての情報を保持します。
  • Identity (nsIMsgIdentity): 1つの identity は、outgoing mail message を構成するのに必要な全ての情報を含みます。 それは、user の full name と e-mail address を含みます。
  • SMTP Server(nsISmtpServer): 1つの SMTP server は、特定のものには結びつけられず、 SMTP Service (nsISmtpService)から得ることができます。
次は、共通の設定の1つの例です。
(ありのままなのは御了承ください)
Account Manager
+- Account 1
|    +- Incoming Server 1 (imap.mywork.com IMAP Server, my work account)
|    +- Identity 1 (Alec Flett <alecf@mywork.com>)
+- Account 2
|    +- Incoming Server 2 (pop.myisp.com POP Server, my ISP account)
|    +- Identity 2 (Alec Flett <alecf@myisp.com>)
+- Account 3
|    +- Incoming Server 3 (news.myisp.com NNTP server, my ISP's server)
|    +- Identity 3 (Alec Flett <alecfNOSPAM@myisp.com>)
+- Account 4
     +- Incoming Server 4 (news.mozilla.org NNTP server, mozilla devel)
     +- Identity 2 (Alec Flett <alecf@myisp.com>)
     +- Identity 3 (Alec Flett <alecfNOSPAM@myisp.com>)
      

これは、mail client が接続する実際の構造ですが、 しかし、いくつか異なった方法でユーザーが登録されています。

(identity の2, 3はいくつかの account の間で共有されることに気がつくでしょう...詳しくは後で)

Server

Server は、新しい dialog、serarch、filter などの folder の panel や、user が一覧を見たり folder を選択する必要のある場所で、表示されます。 この view は、全ての server の同一で統一された1つの view を表示します。 上の例は、次のようです。:
alecf on imap.mywork.com
  +- INBOX
  +- Trash
  +- (etc)
alecf on pop.myisp.com
  +- INBOX
  +- Trash
  +- (etc)
news.myisp.com
  +- comp.os.linux.announce
  +- etc..
news.mozilla.org
  +- netscape.public.mozilla.announce
  +- netscape.public.mozilla.mail-news
    
関連した API call:
  • nsIMsgAccount.incomingServer
  • nsIMsgAccountManager.allServers: 全ての account によって保持されている全ての server の一覧。

Identity(送信者)

Identity はcompose window (mail 作成 window)で使われます。 もし、identity が、account の間で共有されるならば、一覧の中では一度だけその identity を見ることができるでしょう。

上の例では、identity の一覧は次のようです。:

Alec Flett <alecf@mywork.com>)
Alec Flett <alecf@myisp.com>)
Alec Flett <alecfNOSPAM@myisp.com>)
      
関連した API calls:
  • nsIMsgAccount.identities
  • nsIMsgAccountManager.allServers: 全ての account がアクセスする全ての server のリスト。

Storage

account は preference に保存されます。account, identity, server はkeyに全て link されます。Key は、それぞれの account, identity, server を一意に識別する内部的な簡単な string です。 key は object の data を保持している preference のそれぞれの名前の決定するために主に使われます。

1つの例として、上の構造は、次のようにあなたの preference で表現されるでしょう。:

user_pref("mail.accountmanager.accounts", "account1,account2,account3");
user_pref("mail.account.account1.server", "server1");
user_pref("mail.account.account1.identities", "id1");
user_pref("mail.account.account2.server", "server2");
user_pref("mail.account.account2.identities", "id3");
user_pref("mail.account.account3.server", "server3");
user_pref("mail.account.account3.identities", "id3");
user_pref("mail.account.account4.server", "server4");
user_pref("mail.account.account4.identities", "id2,id3");
user_pref("mail.server.server1.hostname", "imap.mywork.com");
user_pref("mail.server.server2.hostname", "pop.myisp.com");
user_pref("mail.server.server3.hostname", "news.myisp.com");
user_pref("mail.server.server4.hostname", "news.mozilla.org");
user_pref("mail.identity.id1.useremail", "alecf@mywork.com");
user_pref("mail.identity.id2.useremail", "alecf@myisp.com");
user_pref("mail.identity.id3.useremail", "alecfNOSPAM@myisp.com");
    

もちろん、ここでは多くの情報を省略しています。

ここで使われているkeyは、account1、server1、id1等です。それらの key は、 "mail.accountmanager.accounts"のようなそれらの preference のいくつかの値の中でリストされ、"mail.account.account1.server"のような prefecence name を構成するために使われます。 この方法で、account は、server はどれか、それを含む identity はどれかを知ります。


new account の作成

account manager API を通して acount を生成、変更することが可能です。account manager は、全ての account、内部的な server、identity の生成の責務があります。 関連した何かの object を生成する CreateInstance() を使う必要はありません。 なぜなら、account manager は、それら object が生成されるのと同じく、その全ての過程を管理する必要があります。

その API を使って account を作るために、次のようにしなければなりません。:

  1. createIdentity() で1つ新しい identity を作りなさい。
  2. 必要なだけ様々な identity の property のために値を割り当てなさい。
  3. createIncomingServer() で新しい incoming server を作りなさい。 一覧の上から、server typeをstring で、それに渡す必要があるでしょう。
  4. 必要なだけ様々な server property のために値を割り当てなさい。 ここで最も重要な property は userName と hostname です。
  5. createAccount() で1つ新しい account を作りなさい。
  6. incomingServer 属性を持つ account のための server を割り当てなさい。
  7. AddIdentity() method を持つ account のために identity を割り当てなさい。

いくつかの sample code: (accountManager が account manager です。

var identity = accountManager.createIdentity();
identity.email="fred@myisp.com";

var server = accountManager.createIncomingServer("pop3");


z|y6qィyи舍アq鑷レqウqサ!

er.hostname = "pop.myisp.com";

var account = accountManager.createAccount();
account.incomingServer = server;
account.AddIdentity(identity);

そうです。今、あなたは1つの有効な account, identity, server を得たのです。

server と identity の key を伴ったいくつかの仕掛けを通して、 account の間で server と identity を共有することは可能です。 preference の中の同じ identity あるいは server key を参照すること、あるいは、よりうまくは、account manager を呼ぶことで、これを行うことができます。 (読者のために1つ課題として残します。) これは動作するでしょうが、しかし、support されません。 account の間で情報を共有する時、 UI は、わずかに不思議な振舞をするでしょう。 現在の計画は、UI を使っている account の間で情報の共有をさせません。

関連する API call:

  • nsIMsgAccount nsIMsgAccountManager.createAccount()
  • nsIMsgAccount nsIMsgAccountManager.getAccount(in string key)
  • nsIMsgIncomingServer nsIMsgAccountManager.createIncomingServer(in string type)
  • nsIMsgIncomingServer nsIMsgAccountManager.getIncomingServer(in string key)

SMTP Servers

SMTP Server は、ほかの全ての account management の要素から、分けて保持されます。 user の SMTP server は、今のところ、その account の設定の何にも依存していません。 user がどの SMTP server を使う必要があるか決定するのは、その internet への物理的な接続だけです。 例えば、user が MyISP Inc. を通して internet へ接続する場合、 彼、あるいは、彼女は、MyISP の SMTP server を使わなければなりません。たとえ彼らがどんな identity で mail を送っていてもです。

SMTP server list は、SMTP Service を通してアクセス可能です。server を加え(または、実際に削除し)、1つの default server を持つことができます。

SMTP server は、account のようにf、1つのルールの中であなたの preference へ保存されます。:

user_pref("mail.smtpservers", "server1,server2");
user_pref("mail.smtpserver.server1.hostname", "smtp.myisp.com");
user_pref("mail.smtpserver.server2.hostname", "smtp.mywork.com");
    

SMTP service を使って新しい SMTP server を加えることができます。

var server = smtpService.createSmtpServer();
server.hostname = "smtp.myisp.com";
    

default SMTP server は、あなたの preference の list の中の始めの server です。 現在、smtpService の defaultServer property を設定することで何か他のものに default SMTP server を設定できますが、 それは disk へ保存さえないでしょう。 session default server と permenant default server の概念があります。

関連する API call:
  • nsISmtpService.smtpServers: SMTP server の list
  • nsISmtpService.createSmtpServer(): 1つ新しい SMTP server を生成します。
  • nsISmtpServer.hostname, nsISmtpServer.username: SMTP server の有効な property

付録 A: 全ての property の list

(brendan の idldoc がこちらに来たら, それに link するでしょう。)

全ての preference は string で、別の方法で記載されません。

Account Manager

Pref: mail.accountmanager.accounts

Account

Preference: mail.account.account.server
IDL: nsIMsgAccount.incomingServer
この account に結びつけられた incoming server。 preference は、"server1"のような preference "key"が使われます。


Preference: mail.account.account.identities
IDL: nsIMsgAccount.identities
この account に結びつけられた identity の list。preference は、"identity1,identity2"のような preference "keys"のコンマで区切られた list です。

Incoming Servers

Preference: mail.server.server.type
: server type の string id: pop3, nntp, imap, or local
Preference: mail.server.server.hostname - server の hostname
Preference: mail.server.server.username - user login name
Preference: mail.server.server.password - user login password
Preference: mail.server.server.check_new_mail - boolean, 定期的に新しい mail を check する必要がありますか?
Preference: mail.server.server.check_time - integer, 新しい mail を check する間隔(分)
Preference: mail.server.server.remember_password - boolean, password を保存する必要がありますか?
Preference: mail.server.server.download_on_biff. - boolean, 新着確認で新しい message を download するなら true、user に新しい mail があることを通知するなら false。
Preference: mail.server.server.directory - message と folder の index を保存する local な platform に特化した path
Preference: mail.server.server.name - server の user への表示名
次は IMAP に特化しています:
Preference: mail.server.server.admin_url - server のための URL の管理
Preference: mail.server.server.using_subscription - boolean, 申し込みを使う必要がありますか? (LIST の代わりとして LSUB を使いなさい)
Preference: mail.server.server.cleanup_inbox_on_exit - boolean, 終了するとき、inbox を clean up しますか?
Preference: mail.server.server.dual_use_folders - boolean - 1つの folder は folder や message の両方を含みますか?
Preference: mail.server.server.empty_trash_on_exit
boolean, (imap に特化する必要はありません) - 終了するとき、この server の trash を空にする必要がありますか??
Preference: mail.server.server.offline_download - boolean, この server は offline で download されるように mark されていますか?
Preference: mail.server.server.override_namespaces - boolean, この server で namespace を override する必要がありますか?
Preference: mail.server.server.max_cached_connections - integer, server へ open した connect の最大の数
Preference: mail.server.server.empty_trash_threshhold
integer, (imap に特化する必要はありません) 1つの folder を clean up する前のゴミ箱の disk space の最大 kB。
Preference: mail.server.server.delete_model - integer, 削除model (ゴミ箱、へ移す、IMAP 削除する、直ちに clean up する、値は未定)
Preference: mail.server.server.timeout - integer, 切断までの接続が idle 状態の間隔(分)
Preference: mail.server.server.capability - この server の能力の list
Preference: mail.server.server.namespace.public - public folder のこの server の namespace
Preference: mail.server.server.namespace.personal - personal folders のための server の namespace
Preference: mail.server.server.namespace.other_users - 別の user の folder の server の namespace

次は POP に特化しています:

Preference: mail.server.server.leave_on_server - boolean, message を download し終った後に、server に message を残す必要がありますか?
Preference: mail.server.server.delete_mail_left_on_server - boolean, local にある1つの message を削除するとき、server にあるその message を削除する必要がありますか?

次は news に特化しています:

Preference: mail.server.server.newsrc.file - newsrc file の platform に特化した file path

Identities

Preference: mail.identity.identity.fullName - user の full name, 例えば、John Smith
Preference: mail.identity.identity.useremail - user の e-mail address, 例えば、jsmith@isp.com
Preference: mail.identity.identity.reply_to - useremail 以外の場合のみ使われる必要がある message の作成の中の reply to address。 (mail message の ReplyTo: header)
Preference: mail.identity.identity.organization - User の organization (mail message の Organization: header)
Preference: mail.identity.identity.compose_html - boolean, message を、HTML で(true)、plain text で(false)で、作成する必要がありますか?
Preference: mail.identity.identity.attach_vcard - boolean, vCard を添付する必要がありますか?
Preference: mail.identity.identity.attach_signature - boolean, signature を添付する必要がありますか?
Preference: mail.identity.identity.fcc - boolean, sent folderにmessageのcopyを作る必要がありますか?
Preference: mail.identity.identity.fcc_folder - sent message がおかれる folder の URI
Preference: mail.identity.identity.bcc_self - boolean, このidentity と送られるそれぞれの e-mail の identity を blind carbon copy(BCC)扱いする必要がありますか?
Preference: mail.identity.identity.bcc_other - boolean, この identity と送られるそれぞれの mail とその他の e-mail address を BCC 扱いしますか?
Preference: mail.identity.identity.bcc_other_list - BCC のためのその他の addresse のコンマで区切られた list
Preference: mail.identity.identity.draft_folder - drafts のために使う folder の URI
Preference: mail.identity.identity.stationary_folder - stationary のために使う folder の URI (4.xではTemplatesと呼ばれていたもの)
Preference: mail.identity.identity.spam_folder - SPAM のために使う folder の URI (これは削除されると思います。)
このドキュメントのオリジナルはmozilla.orgにおいて英語で公布されています。
またドキュメントの管理の言語は現在も英語です。この日本語訳は、
利用者の利便のためにmozilla.org 和訳プロジェクトによって提供されたものです。
フィードバックは英語で、元の著者に送って下さい。
翻訳された文書の一覧は、現在以下のURLで見ることが出来ます。
http://www.mozilla-japan.org/jp/td/index.html