{"library":"msg-parser","title":"MSG Parser","description":"The `msg-parser` module enables reading, parsing, and converting Microsoft Outlook MSG E-Mail files. It facilitates extracting email properties, handling nested MSG/EML attachments, and outputting message content as JSON strings or EML files. The library is currently at version 1.2.0 (last released December 2019) and is compatible with Python 3.4 and higher.","language":"python","status":"maintenance","last_verified":"Mon May 18","install":{"commands":["pip install msg_parser","pip install msg_parser[rtf]"],"cli":null},"imports":["from msg_parser import MsOxMessage"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom msg_parser import MsOxMessage\n\n# Create a dummy MSG file path for demonstration\n# In a real scenario, replace 'path/to/your/email.msg' with your actual file.\nmsg_file_path = os.environ.get('MSG_FILE_PATH', 'path/to/your/email.msg')\n\nif not os.path.exists(msg_file_path):\n    print(f\"Warning: MSG file not found at '{msg_file_path}'. Cannot run quickstart.\")\n    print(\"Please provide a valid MSG file path via MSG_FILE_PATH environment variable or directly.\")\nelse:\n    try:\n        msg_obj = MsOxMessage(msg_file_path)\n\n        # Get message properties as a dictionary\n        properties = msg_obj.get_properties()\n        print(f\"Subject: {properties.get('subject')}\")\n        print(f\"From: {properties.get('sender_name')}\")\n\n        # Get message body (plain text, html, or rtf)\n        # The library tries to provide the 'cleanest' body available.\n        body = msg_obj.body\n        if body:\n            print(\"\\nBody snippet:\")\n            print(body[:200] + '...' if len(body) > 200 else body)\n\n        # Iterate and save attachments\n        print(f\"\\nAttachments found: {len(msg_obj.attachments)}\")\n        for i, attachment in enumerate(msg_obj.attachments):\n            # Ensure an output directory exists for attachments\n            output_dir = 'attachments_output'\n            os.makedirs(output_dir, exist_ok=True)\n            attachment_path = os.path.join(output_dir, attachment.long_filename)\n            attachment.save(attachment_path)\n            print(f\"Saved attachment {i+1}: {attachment_path}\")\n\n        # Convert message to EML format and save\n        output_eml_path = os.path.join(output_dir, 'output_email.eml')\n        msg_obj.save_email_file(output_eml_path)\n        print(f\"Converted MSG to EML: {output_eml_path}\")\n\n        # Get message as JSON string\n        # json_string = msg_obj.get_message_as_json()\n        # print(\"\\nMessage as JSON (first 500 chars):\")\n        # print(json_string[:500] + '...')\n\n    except Exception as e:\n        print(f\"Error processing MSG file: {e}\")","lang":"python","description":"This quickstart demonstrates how to load an MSG file, access its properties (subject, sender), retrieve the message body, iterate through and save attachments, and convert the MSG file to EML format. It includes basic error handling for file existence.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-18","installed_version":"1.2.0","pypi_latest":"1.2.0","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.6,"avg_import_s":0.18,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"msg_parser","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.17,"mem_mb":9.3,"disk_size":"19.2M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"rtf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.17,"mem_mb":9.3,"disk_size":"19.3M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"msg_parser","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.14,"mem_mb":9.3,"disk_size":"20M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"rtf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.12,"mem_mb":9.3,"disk_size":"20M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"msg_parser","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.21,"mem_mb":9.7,"disk_size":"21.1M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"rtf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.22,"mem_mb":9.7,"disk_size":"21.2M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"msg_parser","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.19,"mem_mb":9.7,"disk_size":"22M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"rtf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.19,"mem_mb":9.7,"disk_size":"22M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"msg_parser","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.2,"mem_mb":10,"disk_size":"13.0M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"rtf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.21,"mem_mb":10,"disk_size":"13.1M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"msg_parser","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.2,"mem_mb":10,"disk_size":"13M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"rtf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.5,"import_time_s":0.2,"mem_mb":10,"disk_size":"14M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"msg_parser","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.21,"mem_mb":9.6,"disk_size":"12.7M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"rtf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.18,"mem_mb":9.6,"disk_size":"12.8M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"msg_parser","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.18,"mem_mb":9.4,"disk_size":"13M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"rtf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.6,"import_time_s":0.17,"mem_mb":9.4,"disk_size":"13M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"msg_parser","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.17,"mem_mb":9.1,"disk_size":"18.7M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"rtf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.16,"mem_mb":9.1,"disk_size":"18.8M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"msg_parser","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.14,"mem_mb":9.1,"disk_size":"19M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"rtf","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.14,"mem_mb":9.1,"disk_size":"19M"}]}}