カテゴリー
Internet

XSERVER のメールフィルタでメール転送してみよう

メールフィルタというと迷惑メールのフィルタリングなどを連想されるかと思いますが、今回はXSERVERのサーバー側の mailfilter を使って実践的な条件を指定して携帯メールなどへ受信通知をやってみようというネタです。
きっと、仕事の効率アップに繋がるはず!

メールの転送通知!?

多くのレンタルサーバーやプロバイダメールで転送が行えます。
ただ、すべてを一括して指定のアドレスに転送はできても、着信通知やいわゆる GUI 的な操作でコントロールパネルなどから細かい条件でフィルタリングする機能は見受けられません。
メールクライアントの転送機能を利用する方法もありますが、その場合はパソコンを随時起動させておく必要があります。
また、メールの受信をトリガーにできる IFTTT も悪くありませんが、こちらは若干のタイムラグが発生します。

以前、さくらインターネットのレンタルサーバーで同じような mailfilter 転送を行う方法を紹介しましたが、今回は人気の XSERVER バージョンです。
Gmail も Google Apps Script で柔軟な転送処理が行えますが、mailfilter を使う方法なら独自ドメインのアドレスで送信元件名などの条件でメールを転送することが可能です。

さくらのレンタルサーバーで mailfilter を使ってメール転送

mailfilter を使う

XSERVER の.mailfilter では.fillter というファイルをインクルードしており、今回はその.fillter に自前の send_mail.php という PHP プログラムを読み込むという形を取りました。
作業は目的に合わせた send_mail.php の作成とその読み込み指定の2点のみです。
細かい技術的な解説は行いませんが、手順に沿って作業すれば、問題なく転送通知が行えるはずです。
ただし、サーバー内のファイル変更、追加が必要なため、FTPなどの接続環境は必要です。

.mailfilter の場所

メールアカウントを設定していると以下の場所に.mailfilter が設置されています。
example.com(第一階層)/mail/example.com/設定アドレス(info@example.net)
補足情報として解説しましたが、こちらは今回の作業において意識する必要はありません。

.fillter で自前のプログラムを読み込む

.fillter の場所は下記となります。
example.com(第一階層)/mail/.fillter
デフォルト状態では.fillter には基本なにも記述はないと思いますが、FTP などを使い下記を挿入します。

cc "| /usr/bin/php /home/seous/seous.info/mail/send_mail.php"

send_mail.php

上記で指示した.fillter と同じ階層、つまり、example.com(第一階層)/mail/に以下のプログラムを send_mail.php として作成してアップします。
パーミッションは644、文字コードは UTF-8N とします。

<?php
mb_language('Japanese');
mb_internal_encoding('UTF-8');

$mail = file_get_contents('php://stdin');
preg_match('/^Subject:(.*)$/ium', $mail, $subject); 
preg_match('/^From:.*$/ium', $mail, $from);
$subject = mb_decode_mimeheader($subject[0]);

switch(true){
	case strpos($from[0],'jonny@example.com') !== false:
		$title = 'メール受信通知';
		$text = 'Jonny さんからメールが届いています';
		$address = 'myadress@ezweb.ne.jp';
	break;
	case strpos($subject,'緊急') !== false:
		$title = '急ぎのメールが届いています';
		$text = '至急、確認ください。https://webmail.xserver.ne.jp/?_task=mail&_mbox=INBOX';
		$address = 'myadress@ezweb.ne.jp';
	break;
	default:
		$title = false;
	break;
}

if($title !== false){
	mb_send_mail(
		$address,
		$title,
		$text,
		'From: info@example.net'."\r\n"
	);
}
?>

case strpos でメールの転送条件を設定しています。
ひとつめの case strpos は jonny@example.com からの受信メールをキャリアメールの myadress@ezweb.ne.jp に通知しています。
つまり、「特定の人からのメール受信を通知する」ということです。
ふたつめの case strpos はメールの件名に「緊急」という文字が含まれていれば、同じく myadress@ezweb.ne.jp に通知します。
こちらは「特定の件名のメール受信を通知する」です。
サンプルとしてすぐに内容を確認できるよう XSERVER のウェブメールの URL を追記しています。

最後の From は送信元となるため、対象のメールアドレス(転送元)を設定しておくのが無難です。

適時、必要に応じて変更ください。

件名や本文をそのまま転送することも可能ですが、そこから返信してしまうとスマホのアドレスになってしまいます。
また、メールの送受信自体はウェブメールを使えばよく、本記事ではメールの通知を知るということが目的のため、上記のような内容としています。

profile image

執筆:R3098

WEB サービス構築・監修が生業です。WordPress 関連では Aurora Heatmap などプラグイン開発も行っています。悩めるサイト運営者の無料相談受付けます!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトは reCAPTCHA によって保護されており、Google のプライバシーポリシー および 利用規約 に適用されます。

reCaptcha の認証期間が終了しました。ページを再読み込みしてください。