Skip to main content

a TNEF decoding library written in Python, without external dependencies

Project description

tnefparse - TNEF decoding and attachment extraction

https://travis-ci.org/koodaamo/tnefparse.png?branch=master https://codecov.io/gh/koodaamo/tnefparse/branch/master/graph/badge.svg https://img.shields.io/pypi/v/tnefparse.svg https://img.shields.io/pypi/pyversions/tnefparse.svg

This is a pure-python library for decoding Microsoft’s Transport Neutral Encapsulation Format (TNEF), for Python versions 2.7, 3.5+ and PyPy. For more information on TNEF, see for example wikipedia. The full TNEF specification is also available as a PDF download.

A tnefparse command-line utility is provided for listing contents of TNEF files, extracting attachments found inside them and so on:

usage: tnefparse [-h] [-o] [-a] [-p PATH] [-b] [-hb]
                 [-l LEVEL] [-c]
                 file [file ...]

Extract TNEF file contents. Show this help message if no arguments are given.

positional arguments:
  file                  space-separated list of paths to the TNEF files

optional arguments:
  -h, --help             show this help message and exit
  -o, --overview         show (possibly long) overview of TNEF file contents
  -a, --attachments      extract attachments, by default to current dir
  -p PATH, --path PATH   optional explicit path to extract attachments to
  -b, --body             extract the body to stdout
  -hb, --htmlbody        extract the HTML body to stdout
  -rb, --rtfbody         extract the RTF body to stdout
  -l LEVEL, --log LEVEL  set log level to DEBUG, INFO, WARN or ERROR
  -c, --checksum         calculate checksums (off by default)
  -d, --dump             extract a json dump of the tnef contents

The library can also be used as a basis for applications that need to parse TNEF. To parse a TNEF attachment, run eg. :

>>> from tnefparse import TNEF
>>> with open("tests/examples/one-file.tnef", "rb") as tneffile:
...    tnefobj = TNEF(tneffile.read())

The parsed attachment contents are then available as TNEF object attributes:

  • signature - TNEF file signature

  • key - generated by TNEF enabled transports before using the TNEF implementation to generate a TNEF stream

  • codepage - a Windows code page string

  • objects - a collection of TNEFObject instances

  • attachments - a collection of TNEFAttachment instances

  • mapiprops - a collection of MAPI properties represented by TNEFMAPI_Attribute instances

  • body - message body (may contain both HTML and RTF)

  • htmlbody - a string containing just the HTML message body

  • rtfbody - just the RTF body

Some of the above properties may be empty, depending on what’s contained in the attachment that was parsed.

Tests

To run the test suite, all you need is tox. tox will run all tests on all supported Python versions.

If you want to run the tests only for e.g. Python 3.8, just enter tox -e py38.

You also can run a subset of tests in a specific environment by invoking e.g. tox -e py38 – -k test_cmdline.

With tox -e coverage you can generate a coverage report. The output will be shown in the terminal and a HTML coverage report will be generated in the htmlcov directory.

Contributing

Issues and pull requests welcome. Please however always provide an example TNEF file that can be used to demonstrate the bug or desired behavior, if at all possible.

Note: If you have understanding of TNEF and/or MIME internals or just need this package and want to help with maintaining it, I am open to giving you commit rights. Just let me know.

tnefparse 1.3.1 (2020-09-30)

  • heuristics to decode binary body and filenames when possible (jrideout)

  • JSON export for TNEF contents tnefparse (jrideout)

  • add support for Python 3.8 (jugmac00)

  • modernize package and test setup (jugmac00)

  • apply Flake8 on the code and enforce rules on CI (jugmac00)

tnefparse 1.3.0 (2018-12-01)

  • drop Python 2.6 & 3.3 support

  • Python 2/3 compatibility fixes

  • more tests & example files (jrideout)

  • overall improved testing & start tracking coverage

  • lots of parsing improvements (jrideout)

  • turn some unnecessary warnings into debug messages

  • add tnefparse -p | –path option for setting attachment extraction path

  • support more MAPI (PidTag) properties (jrideout)

  • support RTF body extraction (jrideout)

  • support extracting top level object attributes in msgprops (jrideout)

  • util.raw_mapi & tnefparse.parseFile functions will be deprecated after 1.3

tnefparse 1.2.3, 2018-11-14

  • misc. fixes

tnefparse 1.2.2, 2017

  • have TNEF init raise ValueError on invalid TNEF signature, rather than calling sys.exit()

  • parseFile convenience function should not expect a self parameter, removed

  • other misc. fixes

tnefparse 1.2.1, 2013

  • Python 3 compatibility; tests pass on Python 2.6/2.7/3.2/3.3

  • add package to travis ci

  • add tox.ini for testing using https://testrun.org/tox

tnefparse 1.2, 2013

  • performance improvements & bug fixes (Dave Baggett)

  • added to_zip function for converting TNEF attachments into ZIPped ones (Dave Baggett)

  • tnefparse is now used in the inky email client from Arcode

tnefparse 1.1.1, 08/2012 (unreleased)

  • fixed entry point bug that caused ‘tnefparse’ cmd-line invocation to fail

tnefparse 1.1, 03/2012

  • Repackaged and renamed the library

  • Code moved to github

  • Use the stdlib logging module

  • Further bug fixes and enhancements to pure-python code

  • Add a command-line script

  • Drop the unix tnef command-line tool wrapper

pytnef 0.2.1-Novell, circa 2010

  • Bug fixes/enhancements to pure-python code (Tom Doman)

pytnef 0.2, circa 2005

  • Added a wrapper for the unix tnef command-line tool (Petri Savolainen)

  • Pure-python code not very useful yet

pytnef 0.1 - circa 2005

  • First version (pure-python) created as a conversion of a Ruby TNEF decoder by Trevor Scheroeder (Petri Savolainen)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tnefparse-1.3.1.tar.gz (2.4 MB view details)

Uploaded Source

Built Distribution

tnefparse-1.3.1-py3-none-any.whl (30.8 kB view details)

Uploaded Python 3

File details

Details for the file tnefparse-1.3.1.tar.gz.

File metadata

  • Download URL: tnefparse-1.3.1.tar.gz
  • Upload date:
  • Size: 2.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.5

File hashes

Hashes for tnefparse-1.3.1.tar.gz
Algorithm Hash digest
SHA256 89be51925d4528da5db351f96ed1618aabd489b2150eebb5f63a05c68523b4d0
MD5 fff5291e500d6cae5ae25e7d37edc6be
BLAKE2b-256 8c954f826aa38136763f96885081f8154d0468414d531e0ca63778f54595bece

See more details on using hashes here.

File details

Details for the file tnefparse-1.3.1-py3-none-any.whl.

File metadata

  • Download URL: tnefparse-1.3.1-py3-none-any.whl
  • Upload date:
  • Size: 30.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.5

File hashes

Hashes for tnefparse-1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1e48df6652c2a667f45bf19acdf00f60dead6bc042f83d6ff408d05d5a08909e
MD5 f672ef5ccee5c2dfe254d7033ffd400c
BLAKE2b-256 d72300fb59b22a60974f53042dd241f13ddf74870140659a6177831416626bb8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page