制作のきっかけ
エックスサーバーのメール転送機能でメンバー同報メールを運用していますが、
このメールの転送先が誰だったかな?とわからなくなった時に、
わざわざエックスサーバーの管理ログインから確認するのが面倒であったため。
※そもそもその運用では利用者に簡単に使ってくださいとは開放できないですしね。
※エックスサーバーに転送メールメンバーを返信してくれるAPIなどは無いですよね?
・・・もしありますよ?ということでしたら是非お教えください。。
エックスサーバーのメール転送設定はどこにあるか?
エックスサーバーへFTPで接続して眺めてみるのと、エックスサーバー公式のCron設定にサーバ上のローカル位置が記載されているので、それらを参考にしつつ、メール転送の設定は「.alias」ファイルに記載されることが分かりました。
/home/[エックスサーバID]/[エックスサーバ契約ドメイン(メールドメイン)]/mail/[メールドメイン]/[メールアカウント]/.alias
さっそく制作
テスト用のメールアカウントや転送をいくつか作って、それらが正しく表示できるか?を確認しました。
以下が作成した「index.php」です。
※まったくWebデザインもしていません。・・・ただ表示できるようにしただけです。。
<title>エックスサーバー メール転送(エイリアス)確認ツール</title>
<h2>エックスサーバー メール転送(エイリアス)確認ツール</h2>
<br>
【このツールについて】<br>
このメーリングリスト(転送メール/メールエイリアス)のメンバー誰だっけかな?という時に調べられます。<br>
<br>
転送先メンバーを確認したいメーリングリスト(転送メール/メールエイリアス)を入力してください。<br>
<form method="post" action="" id="inputmail">
<input type="text" name="pref[]" value="" size="30">@
<select name="pref[]" size="1" from="inputmail">
<option value="--ドメイン選択--">--ドメイン選択--</option>
<option value="[メールドメイン1]">[メールドメイン1]</option>
<option value="[メールドメイン2]">[メールドメイン2]</option>
</select>
<input type="submit" value="送信">
</form>
<br>
※このツールは社内アクセスのみ利用できます。社外からはVPN接続をしてください。<br>
---------------------------------------------------------------------------------------------------<br>
<br>
<?php
//h() 関数の定義(クロスサイトスクリプティング対策)
function h($str) {
return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}
//IPアドレス規制
$nowip = $_SERVER['REMOTE_ADDR'];
// 許可されたIPアドレスのリスト
$authip = array(
"[利用許可するグローバルIPアドレス1]",
"[利用許可するグローバルIPアドレス2]",
"[利用許可するグローバルIPアドレス3]"
);
if(!in_array($nowip, $authip)){
// 許可されているIPアドレスではない場合の処理
$noip_alert = "<script type='text/javascript'>alert('IPアドレスが社内アクセスではありません。確認結果は表示できません。');</script>";
echo $noip_alert;
exit;
}else{
// 許可されているIPアドレスであった場合の処理
if(isset($_POST['pref'][0])) {
//メールサーバのあるエックスサーバのパスを指定
$path = '/home/[エックスサーバID]/' . h($_POST['pref'][1]) . '/mail/';
$path = $path . h($_POST['pref'][1]);
//echo($path);
$mailpath = $path . '/' . h($_POST['pref'][0]) . '@' . h($_POST['pref'][1]);
//echo($mailpath);
$mailalias = $mailpath . '/' . '.alias';
//echo($mailalias);
foreach (glob($mailpath) as $maillists) {
// echo($maillists . "<br/>");
echo('【対象メールアカウント】<br/>');
echo(h($_POST['pref'][0]) . '@' . h($_POST['pref'][1]). "<br/>");
echo("<br/>");
echo('【転送先登録メンバー】<br/>');
$content = file_get_contents($mailalias);
$rows = explode("\n", $content);
foreach ($rows as $row){
echo($row . "<br/>");
}
}
}
}
?>
以上です。
参考にさせていただいたサイトなど
(Web Design Leaves)PHPフォーム
https://www.webdesignleaves.com/pr/php/php_basic_06.php?name=%E3%83%9E%E3%82%A4%E3%82%B1%E3%83%AB&age=33
(WEB制作の解決策FAQブログ)phpでIPアドレスを取得して制限を掛ける方法
http://keylopment.com/faq/1888/
(Public Constructor)【PHP】file_get_contentsでファイルを一行ずつ読み込む
https://public-constructor.com/php-file-each-row/