Skip to content

alfonsrv/mail-parser-reply

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

51 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Mail Reply Parser ๐Ÿ“ง๐Ÿ

Python Version

Multi-language email reply parsing for international environments ๐ŸŒ

Mail clients handle reply formatting differently, making reliable parsing difficult. Thank god we have standards. This library splits text-based emails into separate replies based on common headers produced by different, multilingual clients usually indicating separation.

Replies can either present the whole mail message body, or strip headers, signatures and common disclaimers if required. Currently supported languages are:

  • Dutch (nl) ๐Ÿ‡ณ๐Ÿ‡ฑ
  • English (en) ๐Ÿ‡ฌ๐Ÿ‡ง
  • French (fr) ๐Ÿ‡ซ๐Ÿ‡ท
  • German (de) ๐Ÿ‡ฉ๐Ÿ‡ช
  • Italian (it) ๐Ÿ‡ฎ๐Ÿ‡น
  • Japanese (ja) ๐Ÿ‡ฏ๐Ÿ‡ต
  • Polish (pl) ๐Ÿ‡ต๐Ÿ‡ฑ

๐Ÿณ๏ธโ€๐ŸŒˆ Adding more languages is quite easy!

This is an improved Python implementation of GitHub's Ruby-based email_reply_parser and an adaptation of Zapier's email-reply-parser which both split the mails in fragments instead of distinct replies. They also only support English.

โญ Features

โญ Easy to implement
โญ Multilanguage Support
โญ Text-based mail parsing
โญ Detect headers, signatures and disclaimers
โญ Fully type annotated
โญ Easy-to-read code and well-tested

Overview ๐Ÿ”ญ

This library makes it easy to split an incoming mail into replies, making working with emails much more manageable and easily providing the text content for each reply โ€“ with or without signatures, disclaimers and headers.

For example, it can turn the following email:

Awesome! I haven't had another problem with it.

Thanks,
alfonsrv

On Wed, Dec 20, 2023 at 13:37, RAUSYS <info@rausys.de> wrote:

> The good news is that I've found a much better query for lastLocation.
> It should run much faster now. Can you double-check?

Into just the replied text content:

Awesome! I haven't had another problem with it.

Get started ๐Ÿ‘พ

Installation

pip install mail-parser-reply

Parse Replies

from mailparser_reply import EmailReplyParser

mail_body = 'foobar'; languages = ['en', 'de']
mail_message = EmailReplyParser(languages=languages).read(text=mail_body)
print(mail_message.replies)

Or get only the latest reply using:

latest_reply = EmailReplyParser(languages=languages).parse_reply(text=mail_body)

Parser API

EmailMessage.text:              Mail body
EmailMessage.languages:         Languages to use for parsing headers
EmailMessage.replies:           List of EmailReply; single parsed replies
EmailMessage.include_english:   Always include English language for parsing
EmailMessage.default_language:  Default language to use if language dictionary 
                                doesn't include any other language codes

EmailMessage.HEADER_REGEX:      RegEx for identifying headers, separating mails
EmailMessage.SIGNATURE_REGEX:   RegEx for identifying signatures
EmailMessage.DISCLAIMERS_REGEX: RegEx for identifying disclaimers

EmailMessage.read():             Parse EmailMessage.text to EmailReply which
                                 are then stored in EmailMessage.replies
EmailReply.content:              Unprocessed mail body with headers, signatures, disclaimers
EmailReply.body:                 Mail body without headers, signatures, disclaimers
EmailReply.full_body:            Mail body; just without headers

EmailReply.headers:              Identified Headers
EmailReply.signatures:           Identified Signatures
EmailReply.disclaimers:          Identified disclaimers

Buy me a Coffee