〜画期的な変換転送メール〜

このコンテンツの概要
簡潔にいうと http://xxne.jp/ みたいなことです。
転送メールなのですが、ただエイリアスで飛ばす「一方通行」ではなく逆も双方的に可能です。

たとえば・・・
a@domain.jp というアドレスからfw@dom2.jpに送信したとします。
ここで差出人をa@domain.jpから 「fw+a=domain.jp@dom2.jp」 に変換して携帯電話へ送信します。

そして携帯で見た後、そのままアドレスを変更せずに返信します。すると・・・
サーバ側で、送信先のアドレスの書式を基にして送信先を割り出します。
そして、あて先をa@domain.jp、差出人をfw@dom2.jpにして送信します。
つまり、相手には「あたかもfw@dom2.jpから送信された」ように見える訳です。

携帯向けだと9mail、xxneがこれにあたりますが夜間は込んでいたり何より広告が邪魔です。
自宅サーバを使うと
・フィルタリング等のアレンジが色々できる(SPAM排除設定や、特定時間のみ送る、サイズ制限など)
・自分のドメインで使える。
・携帯電話のアドレスを教えたくない相手にも送れる。でもサービス提供会社にも教えたくない(漏洩しそう)
・まずらわしい広告がない。
・夜間でも込み合うことはない。なにせ自分用のサーバですから
・カスタマイズすれば携帯から送信専用もできなくはない。
・(やろうと思えば)レンタル可

といった数々の多くの利点があります。
これが私はやりたくて実験してみた結果できたので紹介いたします。
Vine Linux 2.5でPostfixをお使いのかたならアドレスの部分を置き換えるだけで出来ます。
(Vine3.2上での動作も確認しています)

ちなみにPCむけに発行もできますが、おそらくは使い道がないとおもいます。
(メールアカウントを1個用意するだけで、そもそも変換する必要がありません)
ですが、携帯と共用することも設定カスタマイズで可能です。
auの場合になりますが、自動転送先にパソコンのアドレスを入れておけばメールはPCにも届きます。
それに返信しても、変換して送信するようにすればPCから送ってるのに携帯(の転送アドレス)から送ってるように
見えますので、場合によって便利に使えます。

前提条件
VineLinux2.5(〜3.2)を使っていますが他のLinuxやUNIXでも基本的にOKだと思います。。
プログラムパスが違う場合は個々に置き換えて使ってください。

あえて書けばPostfix、Procmail、Formailが必要ですが
Vineにはもともと入っているでしょうから割愛します。

なお、説明上としてここでは
転送アドレス: fw@domain.jp
転送先アドレス:k-tai@ezweb.ne.jp

とします。

携帯電話側で成りすまし拒否している場合は引っかかりますのでOFFにして下さい
また、アドレス・ドメイン指定受信ならば自宅サーバのアドレスを追加してください。
自宅サーバと携帯間で連絡している方ならすでにやってると思いますが、一応。
注)携帯規制は厳しいですのでお使いのプロバイダによって無条件拒否
  される場合もあります。(ドメイン認証も採用されています。)

まずは準備
delimiterを使います。初期設定ではコメントアウト(#)されているので、はずします。
見つからなければ追記します。
# vi /etc/postfix/main.cf

recipient_delimiter = +
:wq

# /etc/rc.d/init.d/postfix reload

また、ここではメールを転送するためにユーザアカウントを1個ほど使うのでaddusrなどで追加しておいてください。
ちなみに、ここの例では「fw」です。

Procmailへ渡す
.forwardを使って、Procmailへ引き渡します。
この方法は各ディストリビューション共に参考文献があるかと思います
ホームディレクトリにして全て作業してください。
$ vi .forward

"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #fw"
:wq

呼び出しシェルの作成
メールアドレス変換に関してはProcmail以外のシェルで行います。(2つ作成)

$ vi deliver.sh

#!/bin/sh
perl -n -e 'if (/^Delivered-To:\s.*?\+(.*?)\@.*?/i){$_=$1;s/=/\@/;print;exit;}'

:wq

$ vi from.sh


#!/bin/sh formail -rt -xTo: | perl -l -n -e 's/\s//gi;s/\@/=/; print "fw+" . $_ . "\@domain.jp"'

:wq
$ chmod 700 *.sh

Procmailでの処理
以下のようなファイルを「.procmailrc」として保存します。

$ vi .procmailrc

SENDMAIL=/usr/sbin/sendmail
PATH=$HOME/bin:/usr/bin:/usr/local/bin
DEFAULT=$MAILDIR
LOCKFILE=$HOME/procmail.lock
formail=/usr/bin/formail

# うまくいかなかったときの原因究明用に詳細なログをとる
VERBOSE=ON

DELIVER=`deliver.sh`
FROM=`from.sh`

# Functions
FORWARD=k-tai@ezweb.ne.jp
ADDRESS=fw@domain.jp

#Sending

:0
* !^X-Loop: $ADDRESS
* ^To: fw\+.*\@scne\.jp$
| formail -A "X-Loop: $ADDRESS" \
-I "To: $DELIVER" \
-I "From: $ADDRESS" \
-I "Reply-To: $ADDRESS" \
-I "Received:" \
-I "X-System: SCNe.jp Extension Transfer" \
| $SENDMAIL -i $DELIVER

#Recieved

:0
*
| formail -A "X-Loop: $ADDRESS" \
-I "Delivered-To: $FORWARD" \
-I "To: $FORWARD" \
-I "From: $FROM" \
-I "Return-Path: $FROM" \
-I "Reply-To: $FROM" \
| $SENDMAIL -i $FORWARD


:wq

確認
以上で設定は終わったので試してみましょう。
できれば外部のプロバイダのアドレスなどからfw@domain.jpに送って
携帯に届くかを確認します。
返信して、ちゃんと元の場所に届くかエラーしないかも確認しましょう

使用方法?
転送アドレスから送る方法は何だ?となりますよね。
これも使うと思うので一応、書いておきます。

たとえば「account@mail.ne.jp」という人に送りたくて、転送アドレスは「fw@domain.jp」だとします。

まずはじめに転送アドレスの@より左、fwを書きます。次に+を書き、
相手の@より左のaccountを書きます。次に@を=に置き換えるのでこれを書き、mail.ne.jp、次に@domain.jp。

そうすると"fw+account=mail.ne.jp@domain.jp"に送信すればいいわけです。
ややこしいですが、数回やってみれば覚えると思います。

カスタムしたものについては、機会があれば増やそうと思います。


Linuxサーバへ戻る


Copyright(C)2002-06.Suzuaki All Rights Reserved.
情報の無断転載・直リンクはご遠慮下さい
(リンクする場合はTOPページにお願いします。)