====== Filtering TNEF (winmail.dat) attachments with Sieve ======
Microsoft Outlook uses the proprietary **[[wp>Transport_Neutral_Encapsulation_Format|TNEF]]** format to send attachments. With non-Microsoft email clients you will see the infamous **winmail.dat** attachment, which generally remains as a black box that you cannot open.
Here I explain a recipe to filter such mails at **Local Delivery Agent** stage, i. e. the mail is filtered before it arrives into the user mailbox, the MIME part of type **Application/MS-TNEF** is parsed and every file contained herein, is attached again as a standard MIME part.
The original TNEF attachment is retained, so **the size of the email is roughly doubled**.
===== Reference installation =====
I'm running a mail server based on **Debian 10 Buster**, the IMAP, POP3 and LDA services are provided by **Dovecot**. The Local Delivery Agent have the **Sieve** filtering enabled. You can read the configuration details in this article: **[[postfix_spamassassin_clamav_dovecot#sieve_filtering|Sieve filtering with Dovecot]]**.
===== Installing the tnef-filter script =====
First of all we need a mail filter program which does all the magic. It will receive the mail message as standard input and it will produce the //converted// message to the standard output.
You can download the **tnef-filter** script written by **Graham Edgecombe**, from his **[[https://github.com/grahamedgecombe/tnef-filter|GitHub repository]]**. I copied the binary script into **/usr/local/bin/tnef-filter**.
Running the script on my Debian 10 Buster server, requied the following libraries:
apt-get install libconvert-tnef-perl libfile-mmagic-perl libmime-tools-perl
===== The Sieve filter =====
In my installation, each user have a file called **$HOME/sieve_before.d/personal.sieve**, this is a file where I put antispam and antivirus filters, that the user is not allowed to customize. Feel free to add the Sieve filter rule in whichever file suits your needs.
require ["fileinto", "vnd.dovecot.filter", "mime", "foreverypart"];
# Filter with /usr/local/lib/dovecot/sieve-filter/tnef-filter.sh
# if there is an attachment of type Application/MS-TNEF (e.g. winmail.dat).
foreverypart
{
if header :mime :anychild :contenttype "Content-Type" "application/ms-tnef"
{
filter "tnef-filter.sh";
}
}
Notice that you need to include the **mime** and **foreverypart** plugins.
I created the shell script **tnef-filter.sh** into the **/usr/local/lib/dovecot/sieve-filter/** directory; it is a simple one-line command:
#!/bin/sh
/usr/local/bin/tnef-filter
The directory is the one declared to contains Sieve filters. You can set that location into **/etc/dovecot/conf.d/90-sieve-extprograms.conf**:
plugin {
sieve_filter_bin_dir = /usr/local/lib/dovecot/sieve-filter
}