とりあえず、物覚えが悪いので、記録、記録・・・と。。。^^; (前回と一緒のくだりだ:笑)
今回は 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 を再起動すれば出来上がりです。