extract-msg


Nameextract-msg JSON
Version 0.48.5 PyPI version JSON
download
home_pagehttps://github.com/TeamMsgExtractor/msg-extractor
SummaryExtracts emails and attachments saved in Microsoft Outlook's .msg files
upload_time2024-04-03 12:06:25
maintainerNone
docs_urlNone
authorDestiny Peterson & Matthew Walker
requires_python>=3.8
licenseGPL
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI
coveralls test coverage No coveralls.
            |License: GPL v3| |PyPI3| |PyPI2| |Read the Docs|

extract-msg
=============

Extracts emails and attachments saved in Microsoft Outlook's .msg files

The python package extract_msg automates the extraction of key email
data (from, to, cc, date, subject, body) and the email's attachments.

Documentation can be found in the code, on the `wiki`_, and on the
`Read the Docs`_ page.

NOTICE
======
0.29.* is the branch that supports both Python 2 and Python 3. It is now only
receiving bug fixes and will not be receiving feature updates.

0.39.* is the last versions that supported Python 3.6 and 3.7. Support for those
was dropped to allow the use of new features from 3.8 and because the life spans
of those versions had ended.

This module has a Discord server for general discussion. You can find it here:
`Discord`_


Changelog
---------
-  `Changelog`_

Usage
-----

**To use it as a command-line script**:

::

     python -m extract_msg example.msg

This will produce a new folder named according to the date, time and
subject of the message (for example "2013-07-24_0915 Example"). The
email itself can be found inside the new folder along with the
attachments.

The script uses Philippe Lagadec's Python module that reads Microsoft
OLE2 files (also called Structured Storage, Compound File Binary Format
or Compound Document File Format). This is the underlying format of
Outlook's .msg files. This library currently supports Python 3.8 and above.

The script was originally built using Peter Fiskerstrand's documentation of the
.msg format. Redemption's discussion of the different property types used within
Extended MAPI was also useful. For future reference, note that Microsoft have
opened up their documentation of the file format, which is what is currently
being used for development.


#########REWRITE COMMAND LINE USAGE#############
Currently, the README is in the process of being redone. For now, please
refer to the usage information provided from the program's help dialog:
::

     usage: extract_msg [-h] [--use-content-id] [--json] [--file-logging] [-v] [--log LOG] [--config CONFIGPATH] [--out OUTPATH] [--use-filename] [--dump-stdout] [--html] [--pdf] [--wk-path WKPATH] [--wk-options [WKOPTIONS ...]]
                        [--prepared-html] [--charset CHARSET] [--raw] [--rtf] [--allow-fallback] [--skip-body-not-found] [--zip ZIP] [--save-header] [--attachments-only] [--skip-hidden] [--no-folders] [--skip-embedded] [--extract-embedded]
                        [--overwrite-existing] [--skip-not-implemented] [--out-name OUTNAME | --glob] [--ignore-rtfde] [--progress] [-s]
                        msg [msg ...]

     extract_msg: Extracts emails and attachments saved in Microsoft Outlook's .msg files. https://github.com/TeamMsgExtractor/msg-extractor

     positional arguments:
       msg                   An MSG file to be parsed.

     options:
       -h, --help            show this help message and exit
       --use-content-id, --cid
                             Save attachments by their Content ID, if they have one. Useful when working with the HTML body.
       --json                Changes to write output files as json.
       --file-logging        Enables file logging. Implies --verbose level 1.
       -v, --verbose         Turns on console logging. Specify more than once for higher verbosity.
       --log LOG             Set the path to write the file log to.
       --config CONFIGPATH   Set the path to load the logging config from.
       --out OUTPATH         Set the folder to use for the program output. (Default: Current directory)
       --use-filename        Sets whether the name of each output is based on the msg filename.
       --dump-stdout         Tells the program to dump the message body (plain text) to stdout. Overrides saving arguments.
       --html                Sets whether the output should be HTML. If this is not possible, will error.
       --pdf                 Saves the body as a PDF. If this is not possible, will error.
       --wk-path WKPATH      Overrides the path for finding wkhtmltopdf.
       --wk-options [WKOPTIONS ...]
                             Sets additional options to be used in wkhtmltopdf. Should be a series of options and values, replacing the - or -- in the beginning with + or ++, respectively. For example: --wk-options "+O Landscape"
       --prepared-html       When used in conjunction with --html, sets whether the HTML output should be prepared for embedded attachments.
       --charset CHARSET     Character set to use for the prepared HTML in the added tag. (Default: utf-8)
       --raw                 Sets whether the output should be raw. If this is not possible, will error.
       --rtf                 Sets whether the output should be RTF. If this is not possible, will error.
       --allow-fallback      Tells the program to fallback to a different save type if the selected one is not possible.
       --skip-body-not-found
                             Skips saving the body if the body cannot be found, rather than throwing an error.
       --zip ZIP             Path to use for saving to a zip file.
       --save-header         Store the header in a separate file.
       --attachments-only    Specify to only save attachments from an msg file.
       --skip-hidden         Skips any attachment marked as hidden (usually ones embedded in the body).
       --no-folders          Stores everything in the location specified by --out. Requires --attachments-only and is incompatible with --out-name.
       --skip-embedded       Skips all embedded MSG files when saving attachments.
       --extract-embedded    Extracts the embedded MSG files as MSG files instead of running their save functions.
       --overwrite-existing  Disables filename conflict resolution code for attachments when saving a file, causing files to be overwriten if two attachments with the same filename are on an MSG file.
       --skip-not-implemented, --skip-ni
                             Skips any attachments that are not implemented, allowing saving of the rest of the message.
       --out-name OUTNAME    Name to be used with saving the file output. Cannot be used if you are saving more than one file.
       --glob, --wildcard    Interpret all paths as having wildcards. Incompatible with --out-name.
       --ignore-rtfde        Ignores all errors thrown from RTFDE when trying to save. Useful for allowing fallback to continue when an exception happens.
       --progress            Shows what file the program is currently working on during it's progress.
       -s, --stdin           Read file from stdin (only works with one file at a time).

**To use this in your own script**, start by using:

::

     import extract_msg

From there, open the MSG file:

::

     msg = extract_msg.openMsg("path/to/msg/file.msg")

Alternatively, if you wish to send a msg binary string instead of a file
to the ``extract_msg.openMsg`` Method:

::

     msg_raw = b'\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1\x00 ... \x00\x00\x00'
     msg = extract_msg.openMsg(msg_raw)

If you want to override the default attachment class and use one of your
own, simply change the code to:

::

     msg = extract_msg.openMsg("path/to/msg/file.msg", attachmentClass = CustomAttachmentClass)

where ``CustomAttachmentClass`` is your custom class.

#TODO: Finish this section

If you have any questions feel free to contact Destiny at arceusthe [at]
gmail [dot] com. She is the co-owner and main developer of the project.

If you have issues, it would be best to get help for them by opening a
new github issue.

Error Reporting
---------------

Should you encounter an error that has not already been reported, please
do the following when reporting it: \* Make sure you are using the
latest version of extract_msg (check the version on PyPi). \* State your
Python version. \* Include the code, if any, that you used. \* Include a
copy of the traceback.

Supporting The Module
---------------------

If you'd like to donate to help support the development of the module, you can
donate to Destiny using one of the following services:

* `Buy Me a Coffee`_
* `Ko-fi`_
* `Patreon`_

Installation
------------

You can install using pip:

-  Pypi

.. code:: bash

       pip install extract-msg

-  Github

.. code:: sh

     pip install git+https://github.com/TeamMsgExtractor/msg-extractor

or you can include this in your list of python dependencies with:

.. code:: python

   # setup.py

   setup(
       ...
       dependency_links=['https://github.com/TeamMsgExtractor/msg-extractor/zipball/master'],
   )

Additionally, this module has the following extras which can be optionally
installed:

* ``all``: Installs all of the extras.
* ``mime``: Installs dependency used for mimetype generation when a mimetype is not specified.

Versioning
----------

This module uses Semantic Versioning, however it has not always done so. All versions greater than or equal to 0.40.* conform successfully. As the package is currently in major version zero (0.*.*), anything MAY change at any time, as per point 4 of the SemVer specification. However, I, Destiny, am aware of the module's usage in other packages and code, and so I have taken efforts to make the versioning more reliable.

Any change to the minor version MUST be considered a potentially breaking change, and the changelog should be checked before assuming the API will function in the way it did in the previous minor version. I do, however, try to keep the API relatively stable between minor versions, so most typical usage is likely to remain entirely unaffected.

Any change to a patch version before the 1.0.0 release SHOULD either add functionality or have no visible difference in usage, aside from changes to the typing infomation or from a bug fix correcting the data that a component created.

In addition to the above conditions, it must be noted that any class, variable, function, etc., that is preceded by one or more underscores, excluding items preceded by two underscores and also proceeded by two underscores, MUST NOT be considered part of the public api. These methods may change at any time, in any way.

I am aware of the F.A.Q. question that suggests that I should probably have pushed the module to a 1.0.0 release due to its usage in production, however there are a number of different items on the TODO list that I feel should be completed before that time. While some are simply important features I believe should exist, others are overhauls to sections of the public API that have needed careful fixing for quite a while, fixes that have slowly been happening throughout the versions. An important change was made in the 0.45.0 release which deprecates a large number of commonly used private functions and created more stable versions of them in the public API.

Additionally, my focus on versioning info has revealed that some of the dependencies are still in major version 0 *or* do not necessarily conform to Semantic Versioning. As such, these packages are more tightly constrained on what versions are considered acceptable, and careful consideration should be taken before extending the accepted range of versions.

Details on Semantic Versioning can be found at `semver.org`_.

Todo
----

Here is a list of things that are currently on our todo list:

* Tests (ie. unittest)
* Finish writing a usage guide
* Improve the intelligence of the saving functions
* Improve README
* Create a wiki for advanced usage information

Credits
-------

`Destiny Peterson (The Elemental of Destruction)`_ - Co-owner, principle programmer, knows more about msg files than anyone probably should.

`Matthew Walker`_ - Original developer and co-owner.

`JP Bourget`_ - Senior programmer, readability and organization expert, secondary manager.

`Philippe Lagadec`_ - Python OleFile module developer.

`Joel Kaufman`_ - First implementations of the json and filename flags.

`Dean Malmgren`_ - First implementation of the setup.py script.

`Seamus Tuohy`_ - Developer of the Python RTFDE module. Gave first examples of how to use the module and has worked with Destiny to ensure functionality.

`Liam`_ - Significant reorganization and transfer of data.

And thank you to everyone who has opened an issue and helped us track down those pesky bugs.

Extra
-----

Check out the new project `msg-explorer`_ that allows you to open MSG files and
explore their contents in a GUI. It is usually updated within a few days of a
major release to ensure continued support. Because of this, it is recommended to
install it to a separate environment (like a vitural env) to not interfere with
your access to the newest major version of extract-msg.

.. |License: GPL v3| image:: https://img.shields.io/badge/License-GPLv3-blue.svg
   :target: LICENSE.txt

.. |PyPI3| image:: https://img.shields.io/badge/pypi-0.48.5-blue.svg
   :target: https://pypi.org/project/extract-msg/0.48.5/

.. |PyPI2| image:: https://img.shields.io/badge/python-3.8+-brightgreen.svg
   :target: https://www.python.org/downloads/release/python-3810/

.. |Read the Docs| image:: https://readthedocs.org/projects/msg-extractor/badge/?version=latest
    :target: https://msg-extractor.readthedocs.io/en/stable/?badge=latest
    :alt: Documentation Status

.. _Matthew Walker: https://github.com/mattgwwalker
.. _Destiny Peterson (The Elemental of Destruction): https://github.com/TheElementalOfDestruction
.. _JP Bourget: https://github.com/punkrokk
.. _Philippe Lagadec: https://github.com/decalage2
.. _Dean Malmgren: https://github.com/deanmalmgren
.. _Joel Kaufman: https://github.com/joelkaufman
.. _Liam: https://github.com/LiamPM5
.. _Seamus Tuohy: https://github.com/seamustuohy
.. _Discord: https://discord.com/invite/B77McRmzdc
.. _Buy Me a Coffee: https://www.buymeacoffee.com/DestructionE
.. _Ko-fi: https://ko-fi.com/destructione
.. _Patreon: https://www.patreon.com/DestructionE
.. _msg-explorer: https://pypi.org/project/msg-explorer/
.. _wiki: https://github.com/TeamMsgExtractor/msg-extractor/wiki
.. _Read the Docs: https://msg-extractor.rtfd.io/
.. _Changelog: https://github.com/TeamMsgExtractor/msg-extractor/blob/master/CHANGELOG.md
.. _`semver.org`: https://semver.org

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/TeamMsgExtractor/msg-extractor",
    "name": "extract-msg",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": null,
    "author": "Destiny Peterson & Matthew Walker",
    "author_email": "arceusthe@gmail.com, mattgwwalker@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/0a/68/79d080347a963a5f6e2983d0a43bc4cce0d5e338b57272dcd2364aaeb466/extract_msg-0.48.5.tar.gz",
    "platform": null,
    "description": "|License: GPL v3| |PyPI3| |PyPI2| |Read the Docs|\r\n\r\nextract-msg\r\n=============\r\n\r\nExtracts emails and attachments saved in Microsoft Outlook's .msg files\r\n\r\nThe python package extract_msg automates the extraction of key email\r\ndata (from, to, cc, date, subject, body) and the email's attachments.\r\n\r\nDocumentation can be found in the code, on the `wiki`_, and on the\r\n`Read the Docs`_ page.\r\n\r\nNOTICE\r\n======\r\n0.29.* is the branch that supports both Python 2 and Python 3. It is now only\r\nreceiving bug fixes and will not be receiving feature updates.\r\n\r\n0.39.* is the last versions that supported Python 3.6 and 3.7. Support for those\r\nwas dropped to allow the use of new features from 3.8 and because the life spans\r\nof those versions had ended.\r\n\r\nThis module has a Discord server for general discussion. You can find it here:\r\n`Discord`_\r\n\r\n\r\nChangelog\r\n---------\r\n-  `Changelog`_\r\n\r\nUsage\r\n-----\r\n\r\n**To use it as a command-line script**:\r\n\r\n::\r\n\r\n     python -m extract_msg example.msg\r\n\r\nThis will produce a new folder named according to the date, time and\r\nsubject of the message (for example \"2013-07-24_0915 Example\"). The\r\nemail itself can be found inside the new folder along with the\r\nattachments.\r\n\r\nThe script uses Philippe Lagadec's Python module that reads Microsoft\r\nOLE2 files (also called Structured Storage, Compound File Binary Format\r\nor Compound Document File Format). This is the underlying format of\r\nOutlook's .msg files. This library currently supports Python 3.8 and above.\r\n\r\nThe script was originally built using Peter Fiskerstrand's documentation of the\r\n.msg format. Redemption's discussion of the different property types used within\r\nExtended MAPI was also useful. For future reference, note that Microsoft have\r\nopened up their documentation of the file format, which is what is currently\r\nbeing used for development.\r\n\r\n\r\n#########REWRITE COMMAND LINE USAGE#############\r\nCurrently, the README is in the process of being redone. For now, please\r\nrefer to the usage information provided from the program's help dialog:\r\n::\r\n\r\n     usage: extract_msg [-h] [--use-content-id] [--json] [--file-logging] [-v] [--log LOG] [--config CONFIGPATH] [--out OUTPATH] [--use-filename] [--dump-stdout] [--html] [--pdf] [--wk-path WKPATH] [--wk-options [WKOPTIONS ...]]\r\n                        [--prepared-html] [--charset CHARSET] [--raw] [--rtf] [--allow-fallback] [--skip-body-not-found] [--zip ZIP] [--save-header] [--attachments-only] [--skip-hidden] [--no-folders] [--skip-embedded] [--extract-embedded]\r\n                        [--overwrite-existing] [--skip-not-implemented] [--out-name OUTNAME | --glob] [--ignore-rtfde] [--progress] [-s]\r\n                        msg [msg ...]\r\n\r\n     extract_msg: Extracts emails and attachments saved in Microsoft Outlook's .msg files. https://github.com/TeamMsgExtractor/msg-extractor\r\n\r\n     positional arguments:\r\n       msg                   An MSG file to be parsed.\r\n\r\n     options:\r\n       -h, --help            show this help message and exit\r\n       --use-content-id, --cid\r\n                             Save attachments by their Content ID, if they have one. Useful when working with the HTML body.\r\n       --json                Changes to write output files as json.\r\n       --file-logging        Enables file logging. Implies --verbose level 1.\r\n       -v, --verbose         Turns on console logging. Specify more than once for higher verbosity.\r\n       --log LOG             Set the path to write the file log to.\r\n       --config CONFIGPATH   Set the path to load the logging config from.\r\n       --out OUTPATH         Set the folder to use for the program output. (Default: Current directory)\r\n       --use-filename        Sets whether the name of each output is based on the msg filename.\r\n       --dump-stdout         Tells the program to dump the message body (plain text) to stdout. Overrides saving arguments.\r\n       --html                Sets whether the output should be HTML. If this is not possible, will error.\r\n       --pdf                 Saves the body as a PDF. If this is not possible, will error.\r\n       --wk-path WKPATH      Overrides the path for finding wkhtmltopdf.\r\n       --wk-options [WKOPTIONS ...]\r\n                             Sets additional options to be used in wkhtmltopdf. Should be a series of options and values, replacing the - or -- in the beginning with + or ++, respectively. For example: --wk-options \"+O Landscape\"\r\n       --prepared-html       When used in conjunction with --html, sets whether the HTML output should be prepared for embedded attachments.\r\n       --charset CHARSET     Character set to use for the prepared HTML in the added tag. (Default: utf-8)\r\n       --raw                 Sets whether the output should be raw. If this is not possible, will error.\r\n       --rtf                 Sets whether the output should be RTF. If this is not possible, will error.\r\n       --allow-fallback      Tells the program to fallback to a different save type if the selected one is not possible.\r\n       --skip-body-not-found\r\n                             Skips saving the body if the body cannot be found, rather than throwing an error.\r\n       --zip ZIP             Path to use for saving to a zip file.\r\n       --save-header         Store the header in a separate file.\r\n       --attachments-only    Specify to only save attachments from an msg file.\r\n       --skip-hidden         Skips any attachment marked as hidden (usually ones embedded in the body).\r\n       --no-folders          Stores everything in the location specified by --out. Requires --attachments-only and is incompatible with --out-name.\r\n       --skip-embedded       Skips all embedded MSG files when saving attachments.\r\n       --extract-embedded    Extracts the embedded MSG files as MSG files instead of running their save functions.\r\n       --overwrite-existing  Disables filename conflict resolution code for attachments when saving a file, causing files to be overwriten if two attachments with the same filename are on an MSG file.\r\n       --skip-not-implemented, --skip-ni\r\n                             Skips any attachments that are not implemented, allowing saving of the rest of the message.\r\n       --out-name OUTNAME    Name to be used with saving the file output. Cannot be used if you are saving more than one file.\r\n       --glob, --wildcard    Interpret all paths as having wildcards. Incompatible with --out-name.\r\n       --ignore-rtfde        Ignores all errors thrown from RTFDE when trying to save. Useful for allowing fallback to continue when an exception happens.\r\n       --progress            Shows what file the program is currently working on during it's progress.\r\n       -s, --stdin           Read file from stdin (only works with one file at a time).\r\n\r\n**To use this in your own script**, start by using:\r\n\r\n::\r\n\r\n     import extract_msg\r\n\r\nFrom there, open the MSG file:\r\n\r\n::\r\n\r\n     msg = extract_msg.openMsg(\"path/to/msg/file.msg\")\r\n\r\nAlternatively, if you wish to send a msg binary string instead of a file\r\nto the ``extract_msg.openMsg`` Method:\r\n\r\n::\r\n\r\n     msg_raw = b'\\xd0\\xcf\\x11\\xe0\\xa1\\xb1\\x1a\\xe1\\x00 ... \\x00\\x00\\x00'\r\n     msg = extract_msg.openMsg(msg_raw)\r\n\r\nIf you want to override the default attachment class and use one of your\r\nown, simply change the code to:\r\n\r\n::\r\n\r\n     msg = extract_msg.openMsg(\"path/to/msg/file.msg\", attachmentClass = CustomAttachmentClass)\r\n\r\nwhere ``CustomAttachmentClass`` is your custom class.\r\n\r\n#TODO: Finish this section\r\n\r\nIf you have any questions feel free to contact Destiny at arceusthe [at]\r\ngmail [dot] com. She is the co-owner and main developer of the project.\r\n\r\nIf you have issues, it would be best to get help for them by opening a\r\nnew github issue.\r\n\r\nError Reporting\r\n---------------\r\n\r\nShould you encounter an error that has not already been reported, please\r\ndo the following when reporting it: \\* Make sure you are using the\r\nlatest version of extract_msg (check the version on PyPi). \\* State your\r\nPython version. \\* Include the code, if any, that you used. \\* Include a\r\ncopy of the traceback.\r\n\r\nSupporting The Module\r\n---------------------\r\n\r\nIf you'd like to donate to help support the development of the module, you can\r\ndonate to Destiny using one of the following services:\r\n\r\n* `Buy Me a Coffee`_\r\n* `Ko-fi`_\r\n* `Patreon`_\r\n\r\nInstallation\r\n------------\r\n\r\nYou can install using pip:\r\n\r\n-  Pypi\r\n\r\n.. code:: bash\r\n\r\n       pip install extract-msg\r\n\r\n-  Github\r\n\r\n.. code:: sh\r\n\r\n     pip install git+https://github.com/TeamMsgExtractor/msg-extractor\r\n\r\nor you can include this in your list of python dependencies with:\r\n\r\n.. code:: python\r\n\r\n   # setup.py\r\n\r\n   setup(\r\n       ...\r\n       dependency_links=['https://github.com/TeamMsgExtractor/msg-extractor/zipball/master'],\r\n   )\r\n\r\nAdditionally, this module has the following extras which can be optionally\r\ninstalled:\r\n\r\n* ``all``: Installs all of the extras.\r\n* ``mime``: Installs dependency used for mimetype generation when a mimetype is not specified.\r\n\r\nVersioning\r\n----------\r\n\r\nThis module uses Semantic Versioning, however it has not always done so. All versions greater than or equal to 0.40.* conform successfully. As the package is currently in major version zero (0.*.*), anything MAY change at any time, as per point 4 of the SemVer specification. However, I, Destiny, am aware of the module's usage in other packages and code, and so I have taken efforts to make the versioning more reliable.\r\n\r\nAny change to the minor version MUST be considered a potentially breaking change, and the changelog should be checked before assuming the API will function in the way it did in the previous minor version. I do, however, try to keep the API relatively stable between minor versions, so most typical usage is likely to remain entirely unaffected.\r\n\r\nAny change to a patch version before the 1.0.0 release SHOULD either add functionality or have no visible difference in usage, aside from changes to the typing infomation or from a bug fix correcting the data that a component created.\r\n\r\nIn addition to the above conditions, it must be noted that any class, variable, function, etc., that is preceded by one or more underscores, excluding items preceded by two underscores and also proceeded by two underscores, MUST NOT be considered part of the public api. These methods may change at any time, in any way.\r\n\r\nI am aware of the F.A.Q. question that suggests that I should probably have pushed the module to a 1.0.0 release due to its usage in production, however there are a number of different items on the TODO list that I feel should be completed before that time. While some are simply important features I believe should exist, others are overhauls to sections of the public API that have needed careful fixing for quite a while, fixes that have slowly been happening throughout the versions. An important change was made in the 0.45.0 release which deprecates a large number of commonly used private functions and created more stable versions of them in the public API.\r\n\r\nAdditionally, my focus on versioning info has revealed that some of the dependencies are still in major version 0 *or* do not necessarily conform to Semantic Versioning. As such, these packages are more tightly constrained on what versions are considered acceptable, and careful consideration should be taken before extending the accepted range of versions.\r\n\r\nDetails on Semantic Versioning can be found at `semver.org`_.\r\n\r\nTodo\r\n----\r\n\r\nHere is a list of things that are currently on our todo list:\r\n\r\n* Tests (ie. unittest)\r\n* Finish writing a usage guide\r\n* Improve the intelligence of the saving functions\r\n* Improve README\r\n* Create a wiki for advanced usage information\r\n\r\nCredits\r\n-------\r\n\r\n`Destiny Peterson (The Elemental of Destruction)`_ - Co-owner, principle programmer, knows more about msg files than anyone probably should.\r\n\r\n`Matthew Walker`_ - Original developer and co-owner.\r\n\r\n`JP Bourget`_ - Senior programmer, readability and organization expert, secondary manager.\r\n\r\n`Philippe Lagadec`_ - Python OleFile module developer.\r\n\r\n`Joel Kaufman`_ - First implementations of the json and filename flags.\r\n\r\n`Dean Malmgren`_ - First implementation of the setup.py script.\r\n\r\n`Seamus Tuohy`_ - Developer of the Python RTFDE module. Gave first examples of how to use the module and has worked with Destiny to ensure functionality.\r\n\r\n`Liam`_ - Significant reorganization and transfer of data.\r\n\r\nAnd thank you to everyone who has opened an issue and helped us track down those pesky bugs.\r\n\r\nExtra\r\n-----\r\n\r\nCheck out the new project `msg-explorer`_ that allows you to open MSG files and\r\nexplore their contents in a GUI. It is usually updated within a few days of a\r\nmajor release to ensure continued support. Because of this, it is recommended to\r\ninstall it to a separate environment (like a vitural env) to not interfere with\r\nyour access to the newest major version of extract-msg.\r\n\r\n.. |License: GPL v3| image:: https://img.shields.io/badge/License-GPLv3-blue.svg\r\n   :target: LICENSE.txt\r\n\r\n.. |PyPI3| image:: https://img.shields.io/badge/pypi-0.48.5-blue.svg\r\n   :target: https://pypi.org/project/extract-msg/0.48.5/\r\n\r\n.. |PyPI2| image:: https://img.shields.io/badge/python-3.8+-brightgreen.svg\r\n   :target: https://www.python.org/downloads/release/python-3810/\r\n\r\n.. |Read the Docs| image:: https://readthedocs.org/projects/msg-extractor/badge/?version=latest\r\n    :target: https://msg-extractor.readthedocs.io/en/stable/?badge=latest\r\n    :alt: Documentation Status\r\n\r\n.. _Matthew Walker: https://github.com/mattgwwalker\r\n.. _Destiny Peterson (The Elemental of Destruction): https://github.com/TheElementalOfDestruction\r\n.. _JP Bourget: https://github.com/punkrokk\r\n.. _Philippe Lagadec: https://github.com/decalage2\r\n.. _Dean Malmgren: https://github.com/deanmalmgren\r\n.. _Joel Kaufman: https://github.com/joelkaufman\r\n.. _Liam: https://github.com/LiamPM5\r\n.. _Seamus Tuohy: https://github.com/seamustuohy\r\n.. _Discord: https://discord.com/invite/B77McRmzdc\r\n.. _Buy Me a Coffee: https://www.buymeacoffee.com/DestructionE\r\n.. _Ko-fi: https://ko-fi.com/destructione\r\n.. _Patreon: https://www.patreon.com/DestructionE\r\n.. _msg-explorer: https://pypi.org/project/msg-explorer/\r\n.. _wiki: https://github.com/TeamMsgExtractor/msg-extractor/wiki\r\n.. _Read the Docs: https://msg-extractor.rtfd.io/\r\n.. _Changelog: https://github.com/TeamMsgExtractor/msg-extractor/blob/master/CHANGELOG.md\r\n.. _`semver.org`: https://semver.org\r\n",
    "bugtrack_url": null,
    "license": "GPL",
    "summary": "Extracts emails and attachments saved in Microsoft Outlook's .msg files",
    "version": "0.48.5",
    "project_urls": {
        "Download": "https://github.com/TeamMsgExtractor/msg-extractor/archives/master",
        "Homepage": "https://github.com/TeamMsgExtractor/msg-extractor"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "dc837cdeb9a81e88b4c8aefe831898f612e6b13997c644293d49ad80e9c24be2",
                "md5": "e1ea842973c37361e6047474afb5a78c",
                "sha256": "36f89ee19521e1bc0f3f0f9628423f0285fde1180b62cc9e61f20d5b22e780f1"
            },
            "downloads": -1,
            "filename": "extract_msg-0.48.5-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "e1ea842973c37361e6047474afb5a78c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 330619,
            "upload_time": "2024-04-03T12:06:23",
            "upload_time_iso_8601": "2024-04-03T12:06:23.485045Z",
            "url": "https://files.pythonhosted.org/packages/dc/83/7cdeb9a81e88b4c8aefe831898f612e6b13997c644293d49ad80e9c24be2/extract_msg-0.48.5-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0a6879d080347a963a5f6e2983d0a43bc4cce0d5e338b57272dcd2364aaeb466",
                "md5": "1d3187156853d8eb8a06196bd4112a9c",
                "sha256": "16f097a6455d9d038d67d7a063bf391b33d7d1eb9684a2d04b56b13fdf3053ac"
            },
            "downloads": -1,
            "filename": "extract_msg-0.48.5.tar.gz",
            "has_sig": false,
            "md5_digest": "1d3187156853d8eb8a06196bd4112a9c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 325037,
            "upload_time": "2024-04-03T12:06:25",
            "upload_time_iso_8601": "2024-04-03T12:06:25.841097Z",
            "url": "https://files.pythonhosted.org/packages/0a/68/79d080347a963a5f6e2983d0a43bc4cce0d5e338b57272dcd2364aaeb466/extract_msg-0.48.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-03 12:06:25",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "TeamMsgExtractor",
    "github_project": "msg-extractor",
    "travis_ci": true,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "extract-msg"
}
        
Elapsed time: 0.29316s