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