とりあえず、物覚えが悪いので、記録、記録・・・と。。。^^; (前回と一緒のくだりだ:笑)

今回は Tips4 で紹介した postfix と MySQL の連携に加えて、それを更新するためのインターフェースを PHP を使って行おうというものです。

まず、前提条件が必要になります。
・Apache が動いていること(私のシステムは Apache/1.3.14 です)
・Apache から PHP が使えること(私のシステムは PHP Version 4.0.6 です)
・ PHP から MySQL が使えること
です。

では、PHP のプログラムを紹介します。

プログラム名は mailforward.php です。

<html>
<head>
  <title>メール転送設定画面</title>
  <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<h2><font color="#FF0000">転送設定</font></h2>
<font color="#000000">宛先と転送</font>先を指定します。 <br>
<form name="form2" method="post" action="">
<input type="text" name="alias" size="15">
@applabo.com 宛のメールを
<input type="text" name="forw_addr" size="50">
へ転送する。
<input type="submit" name="AddButton" value="実行">
<br>
<br>
例)endo@applabo.com 宛のメールを endo@hogehoge.net へ転送する。<br>
  どちらも endo にすると、サーバユーザにも届く(複数転送先となる)
</form>
<hr>
<h2><font color="#FF0000">現在の転送設定状況</font></h2>
転送先に「@...」が付いていないものはこのサーバ自身のユーザに送信します。<br>
<form name=form1 method=post action=mailforward.php>
<?php
$hostname="localhost";
if( !$my_con=mysql_connect($hostname, "mailalias", "hogehoge"    )) {
  print "Fail to connect on localhost<br>";
  exit;
}
$row=mysql_select_db("mailalias", $my_con );
if (isset($AddButton)) {
  if(!$result=mysql_query("insert into mxaliases set alias='$alias', forw_addr='$forw_addr'"))
  {
    print "Fail code =".mysql_errno()."<br>";
    exit;
  }
}
if (isset($DeleteButton)) {
   for ( $i = 0; $i < count($del); $i++ ) {
     if (isset($del[$i])) {
       if(!$result=mysql_query("delete from mxaliases where Number=$del[$i]"))
       {
         print "Fail code =".mysql_errno()."<br>";
         exit;
       }
     }
   }
}
if(!$result=mysql_query("select * from mxaliases order by alias"))
{
  print "Fail code =".mysql_errno()."<br>";
  exit;
}
if (mysql_num_rows($result) == 0) {
   print "転送設定無し";
   print "</form>\n</body>\n</html>";
   exit;
}
?>
<TABLE border="0">
<?php
$i = 1;
print "<TR><TD>削除</TD><TD></TD><TD></TD><TD></TD><TD></TD><TD></TD></TR>\n";
while($row=mysql_fetch_array($result)) {
  print "<TR>\n";
  print "<TD><input type=\"checkbox\" name=\"del[]\"    value=" . $row[0] . "></TD>";
  print "<TD><font color=\"RED\"><B>" .    $row[1]."@applabo.com</B></FONT></TD>\n";
  print "<TD> にメールが届いたら </TD>\n";
  print "<TD><font color=\"RED\"><B>" .    $row[2] . "</B></FONT></TD>\n";
  print "<TD> へ転送します。 </TD>\n";
  print "</TR>";
  $i += 1;
}
mysql_free_result($result);
if (!mysql_close($my_con)) {
  print "Fail to disconnect on localhost<br>";
}
?>

</TABLE>
<br>
<input type="submit" name="DeleteButton" value="削除">
</form>
</body>
</html>
 

これで出来上がりです。簡単でしょ。

これにプラスして、/usr/local/etc/apache/httpd.conf の <Directory "/usr/local/www/data"> エントリの AllowOverride に Limit を加え、.htaccess を同じファイルに置きます。内容は以下のような物です。

<Limit GET POST>
   order deny,allow
   deny from all
   allow from 192.168.
</Limit>
 

これを入れると 192.168.0.0/16 以外(うちの環境では local 環境以外)のアクセスが抑制されます。
つまり、社外からこのアドレスにアクセスしても表示されないんです。社内からのみのアクセスが許可されます。
だって、社外から転送設定いじられたら困るもんね(笑)。

あとは、Apache を再起動すれば出来上がりです。


2002/10/08 更新:
PHPのバージョンが上がってPOSTされたデータを直接$で取れなくなりました。
詳しくは php_flag register_globals on をキーワードに調べてください。