カテゴリー
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 の認証期間が終了しました。ページを再読み込みしてください。