Set out to write a simple procmail recipie that would forward the mail if it found the text "ABC Store: New Order" in the subject.
:0
* ^(To|From).*[email protected]
* ^Subject:.*ABC Store: New Order*
{
Unfortunately the subject field in the mail message coming from the mail server was in MIME encoded-word syntax.
Subject: =?UTF-8?B?QUJDIFN0b3JlOiBOZXcgT3JkZXI=?=
The above subject is utf-8 ISO-8859-1 charset, So was wondering if there are any mechanisms/scripts/utilities to parse this and convert to string format so that I could apply my procmail filter.
You may use perl one liner to decode Subject:
before assigment to procmail variable.
# Store "may be encoded" Subject: into $SUBJECT after conversion to ISO-8859-1
:0 h
* ^Subject:.*=\?
SUBJECT=| formail -cXSubject: | perl -MEncode=from_to -pe 'from_to $_, "MIME-Header", "iso-8859-1"'
# Store all remaining cases of Subject: into $SUBJECT
:0 hE
SUBJECT=| formail -cXSubject:
# trigger recipe based also on $SUBJECT content
:0
* ^(To|From).*[email protected]
* SUBJECT ?? ^Subject:.*ABC Store: New Order
{
....
}
Comment (2020-03-07): It may be better to convert to UTF-8 charset instead of ISO-8859-*.
You should use MIME::EncWords
.
Like this
use strict;
use warnings;
use 5.010;
use MIME::EncWords 'decode_mimewords';
my $subject = '=?UTF-8?B?QUJDIFN0b3JlOiBOZXcgT3JkZXI=?=';
my $decoded = decode_mimewords($subject);
say $decoded;
output
ABC Store: New Order
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With