この記事はアップデート、続きの予定がありません。調べ物のとっかかりとしてお使いください。
時代遅れのツールになってもなかなか切り捨てられないのがメール。そしてデスクトップPCやノートPCだけではなく、スマートフォンやタブレットでもネットを見たりメールを書いたりといったことができるのが当たり前の時代。
「外からでもPCと同じようにメールをみたいんだけど、自動で振り分けとかして」
IT担当者にとって散々聞かされたうんざりするようなセリフの一つじゃないでしょうか。
普段からサーバー管理をしている人にとってはなんてことはないことでしょうが、ホスティングサービスにおんぶに抱っこな会社ではなかなか思うように行かないのが実際のところ。それをなんとかしてみようというシリーズです。
第一回は用語と、数時間検索してやっとたどり着いたなんとかするための方法の紹介です。
こんな人におすすめ
- ホスティングサービスに届いたメールをWebメールで便利に閲覧したい
- 振り分けなどの機能は使いたいけれど、Gmailなどは使えない、使いたくない
- Gmailでもいいけどスマホなどでの遅延が気になる
- 現状のサーバーは移転したくない(できない)
- サーバー管理の手間はできるだけ少なくしたい
Webメーラーについて
これがそもそも振り分けに対応していたらいいのですが、インターネット初期のメーラーならともかく、今時のAjaxで気持ちよく動くものは軒並みメールの振り分け(フィルタリング)に対応していません。
昔ながらのSquirrelMailなどを導入するのもひとつの手ですが、今時わざわざWebメールを導入する理由の一つといえば、マルチデバイス対応もあるでしょうから(あったので)難しいです。
最も手軽なのはGmailやInboxでPOP3受信させることですが、色々な理由でできない場合も多いと思います。
Webメーラーが振り分けできない理由?
これは正確にはWebメーラーが、というよりはIMAPクライアントが出来ないといった方が正しいです。
通常のメールソフトはPOP3という形式で、サーバーからメールをコピーして「受信」します。ブラウザで言えば、毎回メールのファイルをダウンロードしてそれを見ている形になります。
一方IMAPはサーバーに届いて溜まっているメールを直接閲覧しています。ですので、容量の少ないスマートフォンのアプリなどでも気軽に見ることができます。
そして、今回の主題の「振り分け」「フィルタリング」についてですが、普通のPOP3を用いたメールソフトの場合、受信時にメールの内容をチェックして振り分けています。これをIMAPで行おうとすると……困りました、「受信時」がありません。
もちろん、機能として受信箱に溜まっているメール全てをチェックして振り分けするボタンをつける……といったことは出来るのでしょうが、同じメールを何度もチェックすることになってしまうので、サーバーの負担を考えて実装していないのでしょう。
サーバー上での振り分けについて
さて、先ほど【IMAPでは「受信時」がないので振り分けができない】と書きました。確かにIMAPクライアントには受信という動作がありませんが、それをIMAPで見ている場所、つまりサーバーとして考えると受信時はあります。
つまり、サーバーにメールが届いた瞬間ですね。
実は、この時に大体のレンタルサーバーでも、あるメールフィルターが動いています。もちろん、「迷惑メールフィルター」です(ウィルスチェックも広い意味では含まれるかもしれません)。
動作としては、「ヘッダーを付ける」「タイトルに定型文を入れる」「削除してしまう」といったものが代表的ですが、サーバー上の迷惑メールフォルダーに入れるというのもあります。
そして迷惑メールフィルター以外にも、条件を設定できるサーバー上のメールフィルター機能があります。
procmail
昔からあるメールフィルターです。今のようにSkypeやその他のグループウェア、コラボレーションツールが出る前、メールがコミュニケーションの最先端だった時代からあるだけあって、機能は非常に多機能です。
大体のPOP3のメールソフトで搭載されている振り分け、フィルター機能は実現できます。むしろ、それよりももっと複雑な条件も設定できます。
また、これに限った話ではないですがサーバー上で設定するメールフィルターの利点として、メールの自動転送に関するものが挙げられます。POP3でも自動転送できるソフトはありますが、メールソフトを起動して「受信」した際に初めて動きます。
ですが、サーバー上でのフィルターであれば、メールサーバーにメールが配信された段階で転送することができます。これを利用すれば休暇中に届いた特定のメールだけ転送させる……といったことができます(やりたくはないですが)。
欠点としては「専用の設定ファイルを書かないといけないこと」「設定ファイルをFTPなどでサーバーにアップロードしないといけないこと」といったことが挙げられます。個人で使うだけならともかく、一般ユーザーに使ってもらうには少し敷居が高いです。
Sieve
こちらはprocmailよりは大分新しいソフトというか、フィルター用の「言語」で、RFCで規定されています(RFCとは凄く大雑把に言ってしまえばインターネットにおける標準の仕様をまとめたもの)。そのため、多分今後はprocmailよりこちらが主流になると思います。
そして、procmailと比べるとまだまだ機能が少なく、普通のメールソフトでは出来たことが出来なかったりするのですが、大きな利点として「設定ファイルをサーバーに適用する仕組みがある」ということが挙げられます。
これがどういうことかというと、IMAPとSieve(の設定)対応のメールソフトを使うと、メールソフト上からPOP3のときのようにメールの振り分け設定を行えるということです。更に、設定ファイルをスクリプトで書かれていますが、大体のソフトは文法のチェック機能やGUIで簡単なフィルターを設定できるようになってします。
そのため、procmailよりは各ユーザーがメールフィルターを自分で設定しやすくなっています。
今回は、このSieveでIMAPで閲覧するメールを自動的に振り分けてみたいと思います。
サーバー上でのメールの振り分けの注意点
ここで注意が必要なのは、procmailにしろSieveにしろ、標準のフォルダ以外に振り分けられたメールは、IMAPクライアント上では閲覧出来ますが、POP3のメールソフトでは受信されなくなります。
そのため、POP3でもメールを受信したい場合は、通常迷惑メールを振り分ける程度にしたほうが無難です。多分、ホスティングサービスがSieveなどによるメールフィルタを解放していないのはこの部分でトラブルが起きやすいからではないでしょうか。
このシリーズではメールサーバーを別に用意することで併用を可能にしています。
レンタルサーバー上のメールサーバーで振り分け
さて、では通常のホスティングサービスでこのsieveが利用できるところはというと……少し調べてみた限りでは見当たりませんでした……。
実際、やるとしたらドメインのmxレコードを書き換えてメールサーバーだけVPSなどに移管するというのが妥当な選択になると思います(あるいは専門の管理会社に委託など)。ただ、今回は
- 試験的導入(結果本導入はならず……)
- POP3でもメールを受信したい
- 全ユーザーに必要な訳ではない
- 出来れば複数のメールアカウントを1画面で管理したい
- 可能な限り管理コストや移管コストはかけたくない
と言った理由から別の方法をとることにしました。
特に、ホスティングサービスでWebサーバーやメールサーバーを運用していると、サーバー変更時のドメイン周りが非常に面倒臭いです。また、POP3でのローカル保存もしたいという欲張りな要望にも対応したいです。
ですので、今回は別にメールサーバーをたてて、それをIMAP専用の中継サーバーとして利用することにしました。
導入するもの
- Ubuntu(on VMWare)
- Dovecot + Sieve, SieveManager
- Fetchmail
- Rainloop
Ubuntu
いつものLinuxディストリビューションです。
Dovecot
今のメールサーバーの主流(?)のようなのでこれを選びました。情報が豊富というのは非常にありがたいです。
IMAP、SieveやSieveManager(外部から設定する仕組み)に対応しているので、これを使ってメールを振り分けます。
Fetchmail
これはサーバーではなく、メールを受信してLinux上に配信するツールです。これを使えば、複数のメールアドレスを受信して、1ユーザーにメールを集めることもできます。
Rainloop
見た目が非常に綺麗で操作しやすいWebメールソフトです。Sieveの設定もまだbetaながら一応できるので、これにしました。
メールサーバーの仕組み上、Rainloopで設定したフィルターは他のIMAPクライアントで閲覧しても有効(サーバー上で振り分け済み)なので、スマートフォンのアプリなどで閲覧しても問題ありません。
やること(計画)
Fetchmailを使ってレンタルサーバーからメールを受信、Dovecotのメール配送サービスを使ってメールを配信、その際にSieveで振り分けます。
Sieveの設定やIMAPでの受信はRainloopで行います。
なお、RainloopをインストールするWebサーバーと本来のメールを受信するサーバー、そしてFetchmailでメールを受信してDovecotに配信するサーバーはそれぞれ別のサーバーでも構いません。というより、今回はそれぞれ別にしました。
特にDovecot(+Fetchmail)を導入するサーバーは自分で管理しないといけないので、HTTPdなど余計なサービスを導入してセキュリティリスクを増したくなかったのが理由です。
次回は簡単なRainloopの導入から行っていきたいと思います。