質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

SMTP

SMTP(Simple Mail Transfer Protocol)はIPネットワークでemailを伝送する為のプロトコルです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Postfix

Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

1回答

2598閲覧

postfix header_checksの正規表現について

_I--

総合スコア4

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

SMTP

SMTP(Simple Mail Transfer Protocol)はIPネットワークでemailを伝送する為のプロトコルです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Postfix

Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2020/08/20 08:50

実現したいこと

メールヘッダにて、SPAMと判定され、なおかつこちら側から送信するものに関して、Rejectしたいと思っています。
header_checksは一行ごとに処理するため、複数行の組み合わせができないとこちらに書いてあったので、、正規表現のANDをつかってできないかと思った次第です。
https://teratail.com/questions/214107
諸事情がございまして、milterは使えません。

試してみたこと

/etc/postfix/header_checksにて、

/^(?=X-Spam-Status:\sYes.)(?=From:.@example.).$/ REJECT
/^(?=^X-Spam-Status:\sYes.$)(?=^From:.@example.$).$/ REJECT

とかを試したのですが、ダメでした。。。

片方ずつだときちんと機能するので、何が問題なのかがいまいちわかりません。
どなたかご教授いただけると幸いです。

※ちなみにORは行けました。
/^X-Spam-Status:\sYes.$|^From:.@example.*$/ REJECT

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

片方ずつだときちんと機能するので、何が問題なのかがいまいちわかりません。

/^(?=X-Spam-Status:\sYes.*)(?=From:.*@example.*).*$/

という正規表現は、「行頭の位置で、なおかつ直前に『X-Span-Status:(以下略)』が書いてある位置で、なおかつ直前に『From:(以下略)』が書いてある位置」から始まり行末まで続く任意の文字列にマッチします。

結局のところ、これがマッチすることはありませんよね。

投稿2020/08/20 09:09

Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_I--

2020/08/20 09:37

そうなんですね。。。ありがとうございます。 1行で処理することは不可能なのでしょうか?
Daregada

2020/08/20 09:52

具体的に何をしたいんでしょうか。「XとYのどちらかが条件に一致するときの処理」なら、Xの一行だけの処理、Yの一行だけの処理に分けて行なえますが、「XとYの両方が条件に一致するときの処理」を、一行ずつに分かれた処理でどうやってやれというのでしょう。
_I--

2020/08/21 00:52

すみません。誤解させるような書き方をしてしまったかもしれません。「XとYの両方が条件に一致するときの処理」を1行で処理したいのです。
Daregada

2020/08/21 01:13 編集

いいえ、誤解はしていませんよ。反語表現です。はっきり言うと、「できません」ということです。 「ヘッダーXがAAA」でなおかつ「(別の)ヘッダーYがBBB」のときだけ行なう処理を、1行単位の処理だけで行なうことはできません。 「XがAAA」であることを覚えておき、「YがBBB」のときにそれを参照する仕組みが必要です(あるいは、「YがBBB」であることを覚えておき、「XがAAA」のときにそれを参照する)。 header_checksでは「できません」。
_I--

2020/08/21 01:23

そうなのですね、よく理解できました。丁寧な解説ありがとございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問