Dovecot Sieve - How to retrieve part of message as a variable

468 views Asked by At

I need to retrieve some parts of a message which looks like

Subject: Test message
Message-Id: <[email protected]>
Mime-Version: 1.0
Content-Type: multipart/report; boundary="----=_Part_fba0c199dfcd4d60ae506b37a6320a84"; report-type=notification
To: [email protected]
Date: Mon, 17 Sep 2018 16:21:45 -0400 (EDT)
From: [email protected]


------=_Part_fba0c199dfcd4d60ae506b37a6320a84
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

BTW, this is the correct notification ... it should be "failed" not "failure".
------=_Part_fba0c199dfcd4d60ae506b37a6320a84
Content-Type: message/notification
Content-Transfer-Encoding: 7bit

Final-Recipient: rfc822; [email protected]
Original-Message-ID: <[email protected]>

------=_Part_fba0c199dfcd4d60ae506b37a6320a84—

for an example I need to grab what is after Final-Recipient: rfc822; and Original-Message-ID: and store them as variables

I have tried to do something like

if body :raw :contains ["Original-Message-ID:"] {
  set "Original-Message-ID" "${0}";
}

but variable set as Original-Message-ID doesn't contain what is after it in the message.

1

There are 1 answers

0
JackTheKnife On BEST ANSWER

It came up that the body test will definitely not work with match variables:

https://www.rfc-editor.org/rfc/rfc5173#section-6

Wildcard expressions used with "body" are exempt from the side effects described in [VARIABLES]. That is, they MUST NOT set match variables (${1}, ${2}...) to the input values corresponding to wildcard sequences in the matched pattern.

The MIME Sieve extensions will likely provide what is needed https://www.rfc-editor.org/rfc/rfc5703 or pipe message to a script and process it there, what I have done in my case.