下記に示す IMAP4 は IMAP4rev1 と同義となります。
IMAP4 を利用するには
「サーバー管理」「全体」の「IMAP4 を有効」にチェックを入れ設定を保存してサービスを再起動します。
「サーバー管理」「ログ」の「IMAP4 Log Level」でログレベルとログファイル名を設定します。
IMAP4 のログレベルは
メール確認間隔(旧IDLEタイム)
IDLE 時のメールの確認間隔を指定します。
1以上の値を指定すると IDLE コマンドを有効になり 0 を指定で IDLE コマンドを無効になります。
IMAP4 ではプッシュ型メールとして IDLE コマンドがあります。
IDLE コマンドに対応したメーラーを利用しますと、サーバーとのコネクションを張り続けメールボックスに変化(受信、削除)があった場合にサーバーからクライアントに対して変化を通知します。
確認時間は半角数字を使って秒単位で指定を行います。
サーバーは IDLE コマンドを受け付けた後、確認時間で指定された周期でメールボックスの確認を行います。
短い時間を指定することも可能ですが、余り短い時間を指定しますとサーバーへの負荷が増大し、且つクライアント側のメール受信の効率も悪くなります。
注意事項
アカウント作成時に利用する Ghostフォルダ機能を使う場合、フォルダ構成とフォルダに対する属性を設定することができます。
オプションが有効になっている場合、下記の処理が行われます。
imap4status.txt は IMAP4 のオプションにある SPECIAL-USE 又は XLIST が利用された場合にフォルダの属性を応答させることができます。
代表的な属性として
基本的な構成として
Ghost
+Trash ←このフォルダは存在しない場合、初回アクセス時に自動的に生成されます。
+Sended - imap4status.txt に ¥Send
+Drafts - imap4status.txt に ¥Drafts
と設定しておくと Webmail と IMAP4 クライアントの両方をユーザーが使う場合に必要な設定が少なくなります。
フォルダ属性は Webmail のオプションからユーザーが任意に設定することも可能です。
IMAP4フォルダの再構築
IMAP4版に入れ替え作業を参照。
対応しているクライアントは接続時にクライアント情報をサーバーへ通知し、またクライアントはログイン後に利用するとサーバーの情報を取得することができます。
サーバー管理者がユーザーが利用している IMAP4 クライアントの情報を収集したりする場合に利用することができます。
対応しているクライアントは接続時に各メールボックスに利用されているメールの容量とメールボックスの総容量を確認することができます。
対応しているクライアントは UNSELECT 処理を行うことができます。
がこのコマンド自体利用されることは殆ど無く、有効にする必要は余りありません。
対応しているクライアントはメールボックス内の属性を取得し、クライアントに設定を行います。
SPECIAL-USE は正式に制定されたコマンドで、XLIST SPECIAL-USE の前に Google が提案した同等の機能を利用する場合のコマンドです
対応しているクライアントはメールボックス間のメールの移動を COPY / STORE / EXPUNGE では無く、MOVE コマンドを利用して移動するようになります。
COPY / STORE / EXPUNGE は、メールをコピーして削除フラグを設定し削除する。という順番で処理が行われる為、サイズの大きなメールの移動は時間がかかりますが、MOVE は直接メールボックス間で移動を行う為、非常に高速に動作するようになります。
UIDPlus を利用
IMAP4 で UIDPlus 機能を利用するクライアントを利用する場合は on にする必要があります。
Version 2.26 まで有効のみでしたが、2.26a 以降は off がデフォルトになり、on / off の切り替えができます。
UIDPlus の応答を見ているクライアントは少ないので、通常は off でも問題は無いと思われます。
2016/03/11 の時点で確認されている現象として Windows Live Mail にて、UIDPlus が有効になっている場合、応答の解析に失敗する。という不具合を確認しております。(再現性 100%、原因も特定済み。Windows Live Mail が修正しない限り UIDPlus は利用できません。)
特定のエンコードと文字コードの組み合わせを変換
IMAP4 の仕様上でメールのエンベローブを取得する際に、特定の組み合わせ(JIS + Quoted Printable など。最近のシステムでは Quoted Printable を使うケースは少ないのですが、古いシステムや海外製のメーラーなどではこのエンコードが行われる場合があります)によりクライアントが正しく応答を解析できなくなる場合があります。
これに該当する場合、サーバー側で変換を行って送信を行うようにします。
フォルダロックウェイト
フォルダロックについて
PMailServer2 は必要に応じて処理を行うフォルダ(メールボックスのサブフォルダ)に対してロックを行います。
この処理は、IMAP4 上でメールの物理削除を行う(EXPUNGEコマンド等)を行う場合に、該当するフォルダからメールの読み出しを行うと、削除中のメールが読み出せてしまう等があるからです。
(IMAP4 のメールの削除には2種類あり、Deleted フラグを付与し論理削除を行う場合と、Deleted フラグがついているメールを削除する物理削除があります。)
他にはメールのコピー中の場合、IMAP4 はメールの指定にワイルドカードを使うことが可能ですので、コピーしている最中にメールが増えていくなどが発生する可能性があり、ID等の整合性が取れなくなります。
フォルダロックは永続的に続くものでは無く、該当処理が終了した時点でロックは解除されますが、メールクライアントによってはエラー応答を受けた時点で処理を中断する場合があります。
その場合、フォルダロックウェイトを設定することにより、該当フォルダがロックされていた場合でも、指定秒数の間、ロックが解除されるのを待ち、解除された時点で処理を続行させることができます。
0 を指定した場合は、該当フォルダがロックされたいた場合、即時エラー応答を行います。
0001 SELECT "INBOX" (メールボックスを選択)
0002 EXPUNGE (メールの物理削除を実施、この時点でロックされます)
0003 UID FETCH 〜(メールに対する処理)
0003 NO UID FETCH 〜(ロック中の為、エラー応答)
1 以上を指定した場合、その間ロック解除を待ち、解除された場合は処理を続行し、解除されなかった場合はエラー応答をします。
0001 SELECT "INBOX" (メールボックスを選択)
0002 EXPUNGE (メールの物理削除を実施、この時点でロックされます)
0003 UID FETCH 〜(メールに対する処理)
**** フォルダ INBOX のロック解除待機(1/15)
**** フォルダ INBOX のロック解除待機(2/15)
**** フォルダ INBOX のロック解除待機(3/15)
**** (EXPUNGE 処理が終了)
0003 OK UID FETCH 〜(ロックが解除され処理を続行し、正常応答)
注意事項
1回で処理できるファイル数
IMAP4 でメールのコピー(COPY コマンド又は UID COPY)を行う際に1回のコマンドで処理が行える最大メール(ファイル)数を指定します。0を指定した場合は無制限となります。
指定した数を上回るメール数を指定した場合はサーバーはエラー応答を行います。
IMAP4 にはメールの移動がありませんので、移動を行う際にはコピーを行った後に削除という順番で処理を行います。
1回で処理数通のメールを処理する分には問題ありませんが、数千ファイルをまとめて処理しますと、一時的に指定したメールが二重に存在することになり、サーバーのストレージを圧迫する場合があります。
また同様に一括でファイルのコピーが行われますと、ストレージの負荷が高まりサーバーの他の処理や他のユーザーに対して影響が出る場合があります。
メールボックスが無制限にしている場合や、ユーザー数が多い場合は、1回で処理できるファイル数を制限し、負荷の分散を推奨します。
IMAP4 クライアント側で1回で処理する最大数を制限又は分散する等の処理を入れれば良い話なんですがね・・・COPY 1:1000 Folder1 実施後に COPY 1001:2000 Folder1 と2回に分ければ良いだけなんですが、そういう所を考慮しない上にフリーズするクライアントもありまして。
EMLのタイムスタンプを代用
IMAP4 でメールの日付を取得する際に、元のメールに日付に関するヘッダーが無い場合があります。
その場合、PMailServer2 は日付が存在しない応答をしますが、特定のクライアントが受信を停止する場合があります。
受信が停止すると、それ以降のメールの読み取りが出来なくなり、新着等の確認が出来なくなる場合がありますので、日付に関するヘッダーが存在しない場合は、EML のタイムスタンプを日付をして代用します。
EMLのタイムスタンプを代用した場合、本来メールが送られてきた日付と、表示される日付にずれが生じる場合があります。
取り合えず 100% 再現するのは初代iPad 等に搭載されている、Apple MobileMail(標準メーラー)です。
メールはサーバーのみで受信されて、クライアントから APPEND されるケースなどを想定していないのだと思われます。
APPEND時に Received を追加
IMAP4 はメールクライアントからサーバーの指定したフォルダにファイルのアップロードを行うことが可能ですが、この時に、アップロードされた eml ファイルの先頭にアップロードされた日付時刻(又は APPEND コマンドで指定された日付時刻)等を記録した Received ヘッダーを追加します。
書き込まれる書式は下記の通りです。
Received: from client (PMS2_DEV-PC [127.0.0.1])
by example.com (2.31aP2) with ESMTP id xxxxxxxxxxxxxxxxxxxxxxxxx
for <test@example.com>; Wed, 15 Mar 2017 10:26:09 +0900
IMAP4でのメールの削除処理(Expunge)でファイルの確認を省略したり処理方法を変更して高速化します。
ユーザーが利用する 古いIMAP4クライアントによって影響が出る場合があります。
その場合はチェックを外してください。
IMAP4 の処理を行う際に一定サイズ以上のメールはオンメモリでは無くディスク上で処理を行う設定です。
オンメモリ処理のメリットはディスクと比較して非常に高速で解析や処理を行うことができますが、反面大量のメモリを消費します。
IMAP4 は1つのユーザーから複数接続が行うことが可能で、アクセスが重なりますと大量のメモリを消費します。
その為、一定サイズ以上のメールはディスク処理に切り替えることによりメモリ消費を抑える為の設定です。
「FETCH応答もテンポラリを利用する」を有効にした場合は元メール解析以外にサーバーからの応答も一旦ディスクへ出力してからクライアントに送ることでメモリ消費量を抑えることができます。
TempFolder はディスク処理を行う際に作成されるテンポラリファイルを生成するフォルダを指定します。
注意事項
ディスク処理を行う際は、テンポラリフォルダはできる限り高速なストレージの利用を強く推奨します。
最低でも SSD、可能であれば M.2 SSD や RamDisk の利用を推奨します。HDD を使ったディスク処理はまったく推奨しません。
設定をするドメイン名を選択した後に作成する共有フォルダ名の作成、削除を行います。
作成された共有フォルダは Webmail または IMAP4 クライアント上で #SHARED フォルダの下に登録されます。(#SHARED は変更することはできません。)
#SHARED フォルダは共有フォルダをまとめる為の特殊なフォルダです。このフォルダにメールを保存することはできません。
リスト上右クリックでサブメニューが表示されます。
"test1","263","",""
"test2","264","",""
"test2a","265","264",""
"ReadOnly","320","265","readonly"