ノリブログ?

メール自動返信プログラム2  perlでの実装

カテゴリー:Linux

前回説明したようにメール転送プログラムである.forwardの設定を行えば、メールを受信したときに他のプログラムを実行するようにできます。前回はそのプログラムにprocmailを実行するように設定したのですが、「相手の送信元のアドレスを記号化(*今回はメール文字列を16進数のアスキーコードに変換)してURLを生成」という部分の実装がprocmailよりperlを利用したほうが短時間で行えそうなのでperlでの実装を行いました。その詳細について記事にしたいと思います。

.forwardの設定

.forwardの設定を変更して、メールを受信したときにperlのプログラムを実行するように変更します。
以下の設定では/home/autoresponseディレクトリにあるreturnmail.plを実行するように設定しています。
"|IFS=' ' && exec  /usr/bin/perl /home/autoresponse/returnmail.pl || exit 75 autoresponse"

returnmail.pl

実際のコードを下記に載せておきます。
メールを送信する際にperlのEncodeモジュールを使用しています。
最初、nkfを利用して文字コードを変換して送信するプログラムを作成していましたが、文字化けの問題が起こったためperl側で変換するようにしました。この詳細に関しては次回の記事で書きたいと思います。

#/usr/bin/perl
use encoding 'utf8';
use Encode ;

#.forwardの出力からメールアドレスを取得して、さらに記号化
while (<STDIN>){
  $content .= $_;
  if ( $1 > 100000 ){ exit; }
  if ( m/^From:.*$/ ){
     $_ =~ s/From: //g;
     $_ =~ s/From: //g;
     $_ =~ s/^(.*)<(.*)>(.*)$/$2/g;
     $_ =~ s/ //g;
     $mailaddress = $_;
     $ma16 = unpack("H*",$mailaddress);
  }
}

#送信元のアドレスを指定、送信先には上で取得したアドレスを指定
$from = "autoresponse@nanbu.com";
$to   = $mailaddress;

#sendmailを利用してメールを送信
open MAIL, "| /usr/sbin/sendmail  -f $from -t $to,foo@bar.com";
print MAIL "From: $from ";
print MAIL "Subject:タイトル ";
print MAIL "To: $to ";
print MAIL " ";
print MAIL Encode::encode ( '7bit-jis' , "以下のアドレスを押してください。 ");
print MAIL Encode::encode ( '7bit-jis' ,  "http://www.foo.com/bar/foo.php?mail=".$ma16." ");
close MAIL;

 

関連記事

Track Back URL