FreeBSDのススメ

他のメールアドレス(携帯電話等)に メールを転送しちゃおう!




必要なソフトをそろえる

よく「無料メール転送サービス」などの サービスがインターネット上に無料で展開されているのを見かけます。 このサービスは私も利用させていただいているのですが、せっかく UNIXを使っているのならば、このような 「メール転送」のサービスを自分で 行ってしまおう!というわけです。UNIX上でメールに関する全ての 作業(読み書きに始まり、送信・受信から今回説明するような転送まで) をUNIX上で行うと、いろいろと便利な点があります。最大限UNIXの 良いところを利用しちゃいましょう。

今回はprocmailという、 ローカルのメール配送エージェントソフト を使ってこの転送サービスを実現します。とりあえず /stand/sysinstall等を使って promailをインストールしてください。 (このページをユーザーランド編に 分類しておきながら、root権限が必要な作業を書いてすいません)



.forwardの設定をする

さて、procmailのインストールが無事に 済んだら、次に$HOME/.forwardの 設定を行います。

これは、どんな設定かと言いますと、メールが配送されてくると、 procmailを起動してメールの転送を行います。 この「procmailの起動指示」 $HOME/.forward で行うわけです。 設定は簡単で、自分のホームディレクトリに .forward を作成します。内容は 以下のようにします。

"|IFS=' ' && exec /usr/local/bin/procmail -f- || exit 75 #ユーザ名"



ちなみに

ちなみに、今回はメール送信エージェント(MTA)に sendmailを使うことを想定していますが、 qmailを使っている方もいらっしゃると 思います。qmailを使っているかたは、 $HOME/.forward の代わりに、 $HOME/.qmail を作成し、以下の内容に します。

| preline /usr/local/bin/procmail



どちらにも共通することですが…

sendmailであれ、 qmailであれ、注意して欲しいのは、

procmailがインストールされているパスを確認する

ということです。FreeBSDの場合であれば恐らく /usr/local/bin に、インストールされていると思います。一方 Linux の場合は /usr/bin にインストールされている かもしれません。(私はLinux環境を持っていないので、はっきりしたことは 言えませんが…)

よく分からない人は which コマンドを 使えば簡単に調べられます。プロンプトから

> which procmail
/usr/local/bin/procmail
>

このように打ては、分かります。上の例では procmail /usr/local/bin ディレクトリに インストールされていることになります。この結果にしたがって、 .forward .qmail の内容を書換えてください。



.procmailrcを設定する

さて、.forwardの設定が完了したら次に $HOME/.procmailrc の設定を行います。 実際に procmail の動作を決める 設定ファイルです。

procmailはいろいろと振り分けもしてくれますが、とりあえず 全てのメールを「***@docomo.ne.jp」に転送 してしまいましょう。自分のホームディレクトリに .procmailrc を作成します。内容は以下の 通りです。

PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Mail
LOGFILE=$HOME/.mail/log
VERBOSE=off

:0
!***@docomo.ne.jp

これで完了です。このようにすれば、全てのメールが 「***@docomo.ne.jp」に転送されます。

上の例では、届いたメールが指定したメールアドレスに転送されて、 サーバー上にメールが残りません。サーバー上にメールを残しつつ 転送したい場合は c フラグ を用いることで 実現できます。

PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Mail
LOGFILE=$HOME/.mail/log
VERBOSE=off

:0   c
!***@docomo.ne.jp

c フラグ コピーを作成する 意味で、配送された メールはコピーされてそのコピーされたものが指定したアドレスに 転送されます。転送先は1つのアドレスに限らす、複数のアドレスに送信 することも可能です。

PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Mail
LOGFILE=$HOME/.mail/log
VERBOSE=off

:0   c
!***@docomo.ne.jp

:0   c
!***@geocities.co.jp

上の例では「***@docomo.ne.jp」「***@geocities.co.jp」の 二つのアドレスに転送されることになります。 注意しなければならないことは、 サーバー上にメールを残すにしろ残さないにしろ、 最後の条件以外には c フラグをつける ということです。c フラグをつけないと、その時点でサーバー上から メールが消えてしまいますので、次の条件の転送先にメールを送ることが できなくなってしまいます。



余談ですが…

上のようにすれば、メール転送サービスは実現できましたが、すこし 凝ったことをしましょう。全てのメールを転送せずに、 ある条件にマッチしなかったものだけを転送 してみましょう。例としてここでは FreeBSDのメーリングリスト(メールヘッダー 「Sender: owner-FreeBSD-users-jp@jp.freebsd.org」)からのメールは 転送せず、それ以外のメールは「***@docomo.ne.jp」に転送 することにします。

PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Mail
LOGFILE=$HOME/.mail/log
VERBOSE=off

:0   c
* !^Sender: owner-FreeBSD-users-jp@jp.freebsd.org
!***@docomo.ne.jp

このようにすれば、上の 赤い 部分の ヘッダーを持つメールは転送されずに、 それ以外のメールは転送されるようになります。ちなみに 「* !^」の部分を 「* ^」とすると、 このヘッダーを持つメールのみ転送される ということになります。他の条件もつけたければ、転送先メールアドレスの 上に次々と書いて行けば良いわけです。



最後に

procmailを使ってメールを他のメールアドレスに転送する方法を御紹介 しましたが、procmailは転送に限らず、フォルダーに振り分けする 機能なども持っています。詳しくは 「man procmail」をよく読んで、 やってみてください。自分の希望するようにメールをさばくことが できますよ。



質問等については ここ にメールを送ってください



CONTENTSに戻る