さくらのレンタルサーバのメールを条件指定で転送する方法(.mailfilter)
さくらのレンタルサーバ
では、受信したメールを別のメールアドレスへ自動転送できます。
ただし、すべてのメールを同じ宛先へ転送するのではなく、細かな条件を指定して、
- メール本文に特定のキーワードが含まれている場合だけ転送先を変更したい
- 条件に一致しないメールは複数の宛先へ転送したい
- メール本文から認証コードを取得して転送先アドレスに含めたい
という場合も、まれにあるかと思います。というか実際にありました。
さくらのレンタルサーバでは、コントロールパネルからメールの転送を設定すると.mailfilterという設定ファイルが自動的に生成されます。
このファイルを直接編集すると、コントロールパネルだけでは設定できない複雑な条件を指定して、メールを転送できるようになります。
今回は、受信したメールの内容に応じて転送先を変更する方法を紹介します。
「.mailfilter」の編集
.mailfilterファイルは、次の場所に生成されています。
/home/アカウント名/MailBox/メールアカウント/.mailfilter
コントロールパネルで転送先メールアドレスを1件追加した状態ではこのようになっています。
cc "!email_1@example.jp"
exit
ccは、受信したメールを指定したメールアドレスへ転送する命令です。転送先メールアドレスの先頭には、!を付けます。exitでメールの振り分け処理を終了します。
本文にキーワードが含まれていたら宛先を変える
メール本文に特定のキーワードが含まれている場合のみ、転送先を変更するには次のように記述します。
FROM="$LOGNAME"
# 本文にKEYWORDが含まれていたら
if (/KEYWORD/:b)
{
cc "!email_1@example.jp"
exit
}
# その他のメールは両方に転送
cc "!email_1@example.jp"
cc "!email_2@example.jp"
exitKEYWORDの部分を判定に使用する文字列へ変更します。日本語を指定する場合は、UTF-8で保存します。
この例では、本文にKEYWORDが含まれているメールはemail_1@example.jpだけに転送し、それ以外のメールは2つのメールアドレスへ転送します。
FROM=”$LOGNAME”について
この行では、メールサーバーが使用する送信元アドレスを、さくらのレンタルサーバの受信先メールアカウントに変更しています。
この設定はキーワードの判定には直接関係ありませんが、転送先でSPF認証に失敗しにくくするため、先頭に記述しておきます。
特にGmailでは、SPF認証に失敗すると不審なメールと判定され、警告が表示される場合があります。
Gmailのプラスアドレスに認証コードを含める
サンプルでは、メールアドレスに@example.jpを使用しています。
実際の転送先にGmailのメールアドレスを指定する場合は、プラスアドレスを利用できます。
プラスアドレスを利用すると、条件に一致した結果や、メール本文から取得した認証コードを転送先メールアドレスに含めることができます。
FROM="$LOGNAME"
if (/ワンタイム認証コード/:b)
{
if (/([0-9]{6})/:b)
{
CODE="$MATCH1"
# 抽出したコードをDelivered-Toで確認
cc "!email_1+code-${CODE}@example.jp"
exit
}
else
{
cc "!email_1+code@example.jp"
exit
}
}
cc "!email_1@example.jp"
cc "!email_2@example.jp"
exit実際に使用する場合は、サンプルのメールアドレスを自分のGmailアドレスに合わせて変更します。
Gmailで受信したメールのヘッダーにあるDelivered-Toを確認すると、転送先メールアドレスに含めた認証コードを確認できます。
何に使えるかといえば、メールを受信した時点で本文を解析し、その結果を転送先メールアドレスに含めることができます。
転送先ではメール本文を改めて解析しなくても、宛先を見るだけで条件に一致したことや、抽出した認証コードを確認できます。
まとめ
今回は、メール本文に特定のキーワードが含まれているかを判定し、条件に一致したメールだけ転送先を変更する方法を紹介しました。
かなり特殊な使い方ではありますが、メールを受信した時点で振り分けや簡単な解析を行いたい場合には便利です。
なお、コントロールパネルから転送設定を変更すると.mailfilterが上書きされるため、編集前のファイルは必ずバックアップしておきましょう。

