Skip to main content

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

Project description

License: GPL v3 PyPI3 PyPI1 PyPI2

msg-extractor

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.

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 up to Python 2.7 and 3.4.

The script was 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, I note that Microsoft have opened up their documentation of the file format.

#########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] [--dev] [--validate] [--json]
                [--file-logging] [--verbose] [--log LOG]
                [--config CONFIG_PATH] [--out OUT_PATH] [--use-filename]
                msg [msg ...]

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

positional arguments:
msg                   An msg file to be parsed

optional arguments:
-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.
--dev                 Changes to use developer mode. Automatically enables
                     the --verbose flag. Takes precedence over the
                     --validate flag.
--validate            Turns on file validation mode. Turns off regular file
                     output.
--json                Changes to write output files as json.
--file-logging        Enables file logging. Implies --verbose
--verbose             Turns on console logging.
--log LOG             Set the path to write the file log to.
--config CONFIG_PATH  Set the path to load the logging config from.
--out OUT_PATH        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.

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 me, Matthew Walker, at mattgwwalker at gmail.com. NOTE: Due to time constraints, The Elemental of Destruction has been added as a contributor to help manage the project. As such, it may be helpful to send emails to arceusthe@gmail.com as well.

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. * State your Python version. * Include the code, if any, that you used. * Include a copy of the traceback.

Installation

You can install using pip:

  • Pypi

pip install extract-msg
  • Github

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

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

# setup.py

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

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

  • Provide a way to save attachments and messages into a custom location under a custom name

  • Implement better property handling that will convert each type into a python equivalent if possible

  • Implement handling of named properties

  • Improve README

  • Create a wiki for advanced usage information

Credits

Matthew Walker - Original developer and owner

Destiny Peterson (The Elemental of Destruction) - Principle programmer, manager, and msg file “expert”

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

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

extract_msg-0.27.2.tar.gz (61.0 kB view details)

Uploaded Source

Built Distribution

extract_msg-0.27.2-py2.py3-none-any.whl (64.7 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file extract_msg-0.27.2.tar.gz.

File metadata

  • Download URL: extract_msg-0.27.2.tar.gz
  • Upload date:
  • Size: 61.0 kB
  • 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.46.1 CPython/3.7.5

File hashes

Hashes for extract_msg-0.27.2.tar.gz
Algorithm Hash digest
SHA256 f587f63f2b813dd9d31a5aead85e4fec933eec74891871e417b4599decaa2d18
MD5 d275645cb399adae956e95fbf67a9cda
BLAKE2b-256 3122069fee8e96c25e80fd8c66fd6b73e2df4dc5f2847f9ff37df4ecad738152

See more details on using hashes here.

File details

Details for the file extract_msg-0.27.2-py2.py3-none-any.whl.

File metadata

  • Download URL: extract_msg-0.27.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 64.7 kB
  • Tags: Python 2, 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.46.1 CPython/3.7.5

File hashes

Hashes for extract_msg-0.27.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 cc975e19fb5a167372024d6ddbbab44c6fddba54ed16a61edb812ae39b14f997
MD5 38f93e5a29b943acb51d3fe50a3bb750
BLAKE2b-256 5208990046ac11e6ee0a7dcc26b3c69eda8e582eab6b8df7b583b08400969738

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