メールを受信すると整形せず(添付ファイルも保持)そのまま指定したアドレスaaa@hogehoge.comに転送。ただし転送時に差出人アドレス(from:)をbbb@hogehoge.comに書き直す処理を行う「perlやrubyなどのスクリプト」「サーバ上で動作するソフトウェア」あるいは「procmailやsendmailなどのサーバの設定方法」はないでしょうか?いわゆるリメーラ的な処理です。


誰でも投稿可能な画像投稿掲示板を作成したのですが、登録を受け付けるメールアドレスを指定せねばならず、上記のような処理を行うものを求めています。

通常のメーラでフィルタ処理→転送すれば可能なのですが、あくまでサーバ上で動作するものを求めています。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/12/20 07:54:34
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:tanukichi800 No.2

回答回数31ベストアンサー獲得回数3

ポイント80pt

.forwardを使って特定ユーザーに来たメールをperlに食わせ、From:行を書き換えてやれば簡単に行えます。


自動転送を行うユーザー名をhogeと、転送先のアドレスをfoo@example.jp、perlスクリプトを/home/user/tools/forward.plに置くと仮定します。


.forwardに

\hoge, "|/usr/bin/perl /home/user/tools/forward.pl"

と記述します。


/home/user/tools/forward.plの内容は例えば下記の通りです。

(実際に運用される際は環境依存の部分もありますので、スクリプトを十分にテストして下さい)

#!/usr/bin/perl


$flg = 0; # From行を既に書き換えたことを覚えておくフラグ

$buffer = ""; # メール本文を蓄えておくバッファ


while(<>){

  if(/^From:/ and !$flg){

    $buffer.= "From: foo@example.jp\n";

    $flg++;

  }else{

    $buffer = $_;

  }

}


open(MAIL,"| mail");

print MAIL $buffer;

close(MAIL);


exit;

参考:

http://www.hayagui.com/mail.html

その他の回答2件)

id:hsada No.1

回答回数48ベストアンサー獲得回数1

ポイント10pt

一番簡単なのはgmailを新規取得してそのメールを受信先とし

gmailの設定で特定のアドレスを転送先に設定するといいと思います。

http://mail.google.com

rubyのスクリプトでメールを扱う場合は送受信はnet/pop,net/smtpを使ったサンプルが標準マニュアルに載っています。

オンライン版は良くしぬので以下をDLしてmailで検索してみてください。

http://elbereth-hp.hp.infoseek.co.jp/ruby.html

転送であれば、受信したのをそのまま転送すればいいと思います。

送信先などを書き換える場合はtmailライブラリを使うといいと思います。

http://i.loveruby.net/ja/projects/tmail/

gem install tmail でインストールできるはずです。

id:hwtnv

gmailで自動転送すると差出人アドレスがそのまま保持されてしまいますので、今回の目的には合致していません。

またrubyのマニュアルやサンプルではなく、実際に動く実例を求めています。

よろしくお願いします。

2007/12/19 10:12:39
id:tanukichi800 No.2

回答回数31ベストアンサー獲得回数3ここでベストアンサー

ポイント80pt

.forwardを使って特定ユーザーに来たメールをperlに食わせ、From:行を書き換えてやれば簡単に行えます。


自動転送を行うユーザー名をhogeと、転送先のアドレスをfoo@example.jp、perlスクリプトを/home/user/tools/forward.plに置くと仮定します。


.forwardに

\hoge, "|/usr/bin/perl /home/user/tools/forward.pl"

と記述します。


/home/user/tools/forward.plの内容は例えば下記の通りです。

(実際に運用される際は環境依存の部分もありますので、スクリプトを十分にテストして下さい)

#!/usr/bin/perl


$flg = 0; # From行を既に書き換えたことを覚えておくフラグ

$buffer = ""; # メール本文を蓄えておくバッファ


while(<>){

  if(/^From:/ and !$flg){

    $buffer.= "From: foo@example.jp\n";

    $flg++;

  }else{

    $buffer = $_;

  }

}


open(MAIL,"| mail");

print MAIL $buffer;

close(MAIL);


exit;

参考:

http://www.hayagui.com/mail.html

id:tanukichi800 No.3

回答回数31ベストアンサー獲得回数3

ポイント60pt

すみません、先ほどのスクリプト、凡ミスがありました。


11行目

誤:$buffer = $_;

正:$buffer.= $_;

でした。


ダミーURLをつけるのも何なので、別の参考URLをつけておきます。

http://oshiete1.goo.ne.jp/qa2930662.html

送信部分をいじる際に役立つと思います。

id:hwtnv

ありがとうございます!さっそくトライしてみます。

2007/12/19 15:46:52

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません