それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Sieve で正規表現マッチの後方参照を使う。

Sieve で正規表現マッチの後方参照を使う。

DovecotのSieve正規表現によるマッチングを使ってメールボックスへ配送するまえに処理を挟むことができる。

sieve (Dovecot)の書式を使って、特定のメールをフィルタリングしたり転送したいなと思ったんだけど。 後方参照がうまく取れないので悩んだ。

require "regex";
if anyof ( address :regex ["to"] "([a-z0-9_.-]+)@([a-z0-9.-]+\.[a-z0-9]{2,})") {
redirect "${1}@example.com";
}

後方参照を使うにはvariables が必要

色々調べると、後方参照をするには、require 'variables' が必要だとわかった。

https://stackoverflow.com/questions/45821462/regex-capture-groups-in-sieve-script

Match group variables are not part of the regex capability, but the variables capability. Also require ["variables"]; to be able to use them.

これで動いた。

require ["regex", "variables"];
if anyof ( address :regex "to" "([a-z0-9_.-]+)@([a-z0-9.-]+\.[a-z0-9]{2,})" ) {
redirect "${1}@${2}";
}

後方参照を使えると、メールのマッチングをうまく使うことが出来て、gmail の +フラグが除外されるようなサイトを相手にする際でも、takuya_aaaaa,takuya_aabbb などをメールアドレスに使うことが出来て便利になりそうです。

参考資料

https://stackoverflow.com/questions/45821462/regex-capture-groups-in-sieve-script

https://www.ietf.org/archive/id/draft-ietf-sieve-regex-01.html#rfc.section.7.1