Metadata-Version: 2.1
Name: tnefparse
Version: 1.4.0
Summary: a TNEF decoding library written in Python, without external dependencies
Home-page: https://github.com/koodaamo/tnefparse
Author: Petri Savolainen
Author-email: petri.savolainen@koodaamo.fi
License: LGPL
Keywords: TNEF MAPI decoding mail email microsoft
Classifier: Topic :: Communications :: Email
Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: End Users/Desktop
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
License-File: LICENSE
Provides-Extra: optional
Requires-Dist: compressed-rtf; extra == "optional"

tnefparse - TNEF decoding and attachment extraction
===================================================

.. image:: https://github.com/koodaamo/tnefparse/workflows/CI/badge.svg?branch=master
   :target: https://github.com/koodaamo/tnefparse/actions?workflow=CI
   :alt: CI Status

.. image:: https://codecov.io/gh/koodaamo/tnefparse/branch/master/graph/badge.svg
  :target: https://codecov.io/gh/koodaamo/tnefparse

.. image:: https://img.shields.io/pypi/v/tnefparse.svg
  :target: https://pypi.org/project/tnefparse/

.. image:: https://img.shields.io/pypi/pyversions/tnefparse.svg
  :target: https://pypi.org/project/tnefparse/

This is a pure-python library for decoding Microsoft's Transport Neutral Encapsulation Format (TNEF), for Python
versions 3.6+ and PyPy3. The last version to support Python2 was 1.3.1. For more information on TNEF, see for example 
`wikipedia <http://en.wikipedia.org/wiki/Transport_Neutral_Encapsulation_Format>`_. The full TNEF specification
is also available as a `PDF download <https://interoperability.blob.core.windows.net/files/MS-OXTNEF/[MS-OXTNEF].pdf>`_.

A :code:`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
   -z, --zip              extract attachments into a single zip file, 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.**

.. _tox: https://tox.readthedocs.io/



tnefparse 1.4.0 (2021-01-24)
=============================

- drop Python 2 support
- drop Python 3.5 support (jugmac00)
- add Python 3.9 support (jugmac00)
- command-line support for zipped export of attachments (Beercow)
- introduce using type annotations (jugmac00)
- remove deprecated parseFile & raw_mapi functions
- fix str representation for TNEF class (jugmac00)
- prefer `getattr` over `eval` (eumiro)
- fix `test_zip` deprecation warning for bytes (1nF0rmed)
- correctly handle attachments of embedded objects (jrideout)
- add expirimental support for parsing embedded message objects (jrideout)
- zipped output now uses long filename when possible (jrideout)
- run GitHub Actions CI for pull requests and once a week (eumiro)
- use pathlib instead of os.path (eumiro)
- change logger name for mapi to the package name (jrideout)
- add unit tests for mapi attribute parsing (jrideout)
- do not use Travis CI any more (jugmac00)


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)
