Yeraze's TNEF Stream Reader - for winmail.dat files
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib Raise size of block from 100k to 1M Aug 15, 2018
test-data BugFix - Potential OOB with Fields of Size 0 Feb 24, 2017
ytnef Only print output file when it's actually written Apr 20, 2017
ytnefprint ytnefprint: don't print if parsing failed May 29, 2018
.gitignore Unify ytnef and libytnef into the same package. Oct 18, 2016
.travis.yml Removed env var Compiler spec Aug 26, 2016
COPYING Unify ytnef and libytnef into the same package. Oct 18, 2016
ChangeLog Prepare v1.9.3 build Jul 20, 2018 Unify ytnef and libytnef into the same package. Oct 18, 2016 Rename to just ytnefprocess. Feb 22, 2017 Merge fixes for mingw64 compile Aug 1, 2018 Added `-fsanitize=address` to the LDFLAGS as well Aug 1, 2018 Unify ytnef and libytnef into the same package. Oct 18, 2016

Yerase's TNEF Stream Reader

Build Status


Simply run make, and make install. On some systems you may need to edit the Makefile to change the CC= & LINK= lines to use cc instead of gcc.


ytnef filename.dat - parse the file & print some basic information.

ytnef -v filename.dat - parse the file & print EVERYTHING. good for debugging.

ytnef -f . filename.dat - parse the file and save all of the attachments to the local directory.

ytnef -h - See these and more options and examples.

Automatic stripping of TNEF streams using procmail:

If you want to use ytnefprocess, then make sure to do the following:

  1. Build and install ytnef as described in the Installation section.

  2. Make a directory ~/.ytnef

  3. Make a directory ~/.ytnef/output

  4. Install the MIME::Parser perl module. You can do this with:

    perl -MCPAN -e shell
    (let it load)
    install MIME::Parser
  5. Create a .procmailrc something like this:

    * > 0
    | /usr/bin/ytnefprocess

and Voilà! you should be ready to go.


If you want additional information exported (to the vCalendar or vCard information), then use the -v option to try & find out where the information is. Then send the winmail.dat file, along with the -v listing to me ( along with some information & justifications. It works best if you send several data files, showing the option in various states to back up your claim. For example, if you want me to parse recurrence patterns encoded in the TNEF stream, then send yourself several meeting requests with almost identical information, and several different recurrence patterns, and (hopefully) the only fields that change will the the UID & the recurrence information.


Don't hesitate to send support requests to me at I'll do what I can to help. Also don't hesitate to post bug reports or support/feature requests to