PHP library for parsing plain text email content.

Overview

EmailReplyParser

Build Status Total Downloads Latest Stable Version

EmailReplyParser is a PHP library for parsing plain text email content, based on GitHub's email_reply_parser library written in Ruby.

Installation

The recommended way to install EmailReplyParser is through Composer:

composer require willdurand/email-reply-parser

Usage

Instantiate an EmailParser object and parse your email:

<?php

use EmailReplyParser\Parser\EmailParser;

$email = (new EmailParser())->parse($emailContent);

You get an Email object that contains a set of Fragment objects. The Email class exposes two methods:

  • getFragments(): returns all fragments;
  • getVisibleText(): returns a string which represents the content considered as "visible".

The Fragment represents a part of the full email content, and has the following API:

<?php

$fragment = current($email->getFragments());

$fragment->getContent();

$fragment->isSignature();

$fragment->isQuoted();

$fragment->isHidden();

$fragment->isEmpty();

Alternatively, you can rely on the EmailReplyParser to either parse an email or get its visible content in a single line of code:

$email = \EmailReplyParser\EmailReplyParser::read($emailContent);

$visibleText = \EmailReplyParser\EmailReplyParser::parseReply($emailContent);

Known Issues

Quoted Headers

Quoted headers aren't picked up if there's an extra line break:

On <date>, <author> wrote:

> blah

Also, they're not picked up if the email client breaks it up into multiple lines. GMail breaks up any lines over 80 characters for you.

On <date>, <author>
wrote:
> blah

The above On ....wrote: can be cleaned up with the following regex:

$fragment_without_date_author = preg_replace(
    '/\nOn(.*?)wrote:(.*?)$/si',
    '',
    $fragment->getContent()
);

Note though that we're search for "on" and "wrote". Therefore, it won't work with other languages.

Possible solution: Remove "[email protected]" lines...

Weird Signatures

Lines starting with - or _ sometimes mark the beginning of signatures:

Hello

--
Rick

Not everyone follows this convention:

Hello

Mr Rick Olson
Galactic President Superstar Mc Awesomeville
GitHub

**********************DISCLAIMER***********************************
* Note: blah blah blah                                            *
**********************DISCLAIMER***********************************

Strange Quoting

Apparently, prefixing lines with > isn't universal either:

Hello

--
Rick

________________________________________
From: Bob [[email protected]]
Sent: Monday, March 14, 2011 6:16 PM
To: Rick

Unit Tests

Setup the test suite using Composer:

$ composer install

Run it using PHPUnit:

$ ./vendor/bin/phpunit

Contributing

See CONTRIBUTING file.

Credits

  • GitHub
  • William Durand

License

EmailReplyParser is released under the MIT License. See the bundled LICENSE file for details.

Comments
  • Blockquote considered visible

    Blockquote considered visible

    I receive quite a lot of emails with blockquoted text which is in fact the whole original email that's being replied to.

    Quickly looking at the source of this package, I don't think <blockquote> is being search for. Imho this should be a non-visible part.

    What do you think?

    opened by philippejadin 8
  • $fragment->getContent() removes newlines returning a modified fragment from the original text.

    $fragment->getContent() removes newlines returning a modified fragment from the original text.

    Hey. i noticed that the parser "cleans" the text from new lines.

    This is problematic since it modifies the input.

    For example if you want to print the output to html nl2br will not work. This is a huge problem.

    Compare the fragment extracted:

    "2015-06-18 10:40 GMT+02:00 REDACTED : > Bounce! > > 2015-06-18 10:06 Cristobal Wetzig : >> > > >> > >> > Reply >> 2015-06-18 10:38 GMT+02:00 REDACTED : >> >> ok >> 2015-06-18 10:06 Centerpartiet :\n>>> Reply"
    

    From the original

    "Pong\r\n\r\n2015-06-18 10:40 GMT+02:00 REDACTED :\r\n> Bounce!\r\n>\r\n> 2015-06-18 10:06 Cristobal Wetzig :\r\n>> > >\r\n>> >\r\n>> > Reply\r\n>> 2015-06-18 10:38 GMT+02:00 REDACTED :\r\n>>\r\n>> ok\r\n>> 2015-06-18 10:06 REDACTED :\r\n>>> Reply"
    
    Bug 
    opened by cristobal-wetzig 8
  • Committing CRLF line separators to the Git repository

    Committing CRLF line separators to the Git repository

    Hi, I was attempting to commit the EmailReplyParser library in Git when I got the following error:

    You are about to commit CRLF line separators to the Git repository. It is recommended to set the core.autocrlf Git attribute to input and and avoid line separator issues.

    I've done a bit of a Google and I can't find any conclusive advice.

    Based on the limited understanding of email that I have, formatting and line endings are crucial, so I'd rather not proceed without some guidance first.

    opened by OctaneInteractive 7
  • Failed in parsing email thread

    Failed in parsing email thread

    I just found some real world scenario where this lib fails to preserve formatting. Basically the problem is where we have a whole email thread as a content. All new lines are replaced with one space here. I made in commit https://github.com/perajovic/EmailReplyParser/commit/79aebccd4dac497066b5a151dc19906b9b2025c6 failing test with an example. Here is also a diff from test:

    1) EmailReplyParser\Tests\Parser\EmailParserTest::testEmailThreadPreservesNewLines
    Failed asserting that two strings are equal.
    --- Expected
    +++ Actual
    @@ @@
    -'On Nov 21, 2014, at 10:18, John Doe <[email protected]> wrote:
    -
    -> Ok. Thanks.
    ->
    -> On Nov 21, 2014, at 9:26, Jim Beam <[email protected]> wrote:
    ->
    ->>> On Nov 20, 2014, at 11:03 AM, John Doe <[email protected]> wrote:
    +'On Nov 21, 2014, at 10:18, John Doe <[email protected]> wrote:  > Ok. Thanks. > > On Nov 21, 2014, at 9:26, Jim Beam <[email protected]> wrote: > >>> On Nov 20, 2014, at 11:03 AM, John Doe <[email protected]> wrote:
     >>>
     >>> if you take a look at a short video from attachment, why full-typed filename does not stay in CMD+T pane?
     >>> When I type last character, it is not shown anymore.
     >>
     >> We think we’ve tracked down the cause of this issue, write back if you see the issue after the next update. (Which will be out shortly.)
     >>
     >> --
     >> Jim Beam – Acme Corp
     >>
     >'
    

    I'm aware that with this line we can normalize some poorly formatted emails, but here this is not the case.

    I hope I can fix this issue later today, but if someone have any idea how to do this right now, please write a comment.

    Bug 
    opened by perajovic 6
  • EmailReplyParser::parseReply issue

    EmailReplyParser::parseReply issue

    Hello,

    I just got a bug on EmailReplyParser::parseReply. In some specific case, the reply is truncated in the middle.

    I tried to reduce at maximum a case, here it is :

    Bonjour ​Test​,
    
    ​Text paragraph 1​
    
    
    Le paragraphe qui pose problème.
    
    ​Text paragraph 2​
    
    
    - Le 2021-04-09 23:25, ​Test a écrit :
    

    The correct result should be :

    Bonjour ​Test​,
    
    ​Text paragraph 1​
    
    
    Le paragraphe qui pose problème.
    
    ​Text paragraph 2​
    

    The current result is :

    Bonjour ​Test​,
    
            ​Text paragraph 1​
    

    Context :

    • This is french. If I remove the first "Le" : problem solved. If I remove "écrit" : problem solved.
    • Le paragraphe qui pose problème means The paragraph which provoke issue.
    • Le 2021-04-09 23:25, ​Test a écrit : means On 2021-04-09 23:25, ​Test wrote :

    So the issue is here :

    '/^\s*(Le(?:(?!^>*\s*Le\b|\bécrit:).){0,1000}écrit(\s|\xc2\xa0):)$/ms', // Le DATE, NAME <EMAIL> a écrit :
    

    If I change it to have the same format as the english work : problem half solved (not truncated).

    '/^\s*(Le(?:(?!^>*\s*Le\b|\bécrit:).){0,1000}écrit:)$/ms', // Le DATE, NAME <EMAIL> a écrit :
    

    But I think that (\s|\xc2\xa0) was here for some reason ? @Spone ?

    see also : https://github.com/willdurand/EmailReplyParser/commit/e888d795f277916ec62c2e812b9a10a9614682e8#diff-5e5f4da6cc02b271ae11752a0b5e45ecb842d913728f7b7d9756d88d9219a0f8 https://github.com/willdurand/EmailReplyParser/commit/b71d9983c07b0455cb5b9727b90642a32bc11ae0#diff-5e5f4da6cc02b271ae11752a0b5e45ecb842d913728f7b7d9756d88d9219a0f8

    opened by Nuranto 5
  • Update readme with latest Composer tips

    Update readme with latest Composer tips

    1. composer install --dev is the default for some time now and the --dev flag is deprecated.
    2. Composer 1.0.0-alpha.9 comes with an important update to composer require. When you don't specify a version, Composer would automatically choose the latest stable version according to SemVer.
    opened by hkdobrev 5
  • Removing the need to write quote regex backwards for custom quote header

    Removing the need to write quote regex backwards for custom quote header

    With this pull request we don't need to duplicate our custom quote regex by have to write it backward.. Regular expression is already annoying as it is. =x

    Let me know if you see any problem. =]

    opened by creativej 5
  • Fix regexp to handle datetime lines starting wih a few characters before `On...`

    Fix regexp to handle datetime lines starting wih a few characters before `On...`

    This fixes #77

    The rule is more permissive for prefixes, however more strict and secure as I disabled the s modifier which allowed multiline for some reason.

    Important Note : I only fixed FR. I prepared (commented) a failing test for EN, which failed. But if I do the same change for EN regexp, other tests are failing and I don't want to mess up things, so I'll let you have a look at this.

    opened by Nuranto 4
  • Additional signature and quote catches

    Additional signature and quote catches

    Catches signature and quotes for Windows 10 Mail.

    I've probably made this too generalized, but I needed to catch signature and quotes coming from Mail for Windows 10. They look like this...

    My reply here.
    
    Sent from Mail for Windows 10
    
    From: John Doe
    Sent: Tuesday, November 13, 2018 12:30 PM
    To: [email protected]
    Cc: [email protected]
    Subject: Subject Line Here
    
    The quoted message.
    

    Unfortunately, the existing regex's miss both the signature and the quote. The signature is missed because it lacks a "my" after "Sent from", so I just went ahead and removed the "my" requirement. The quote is missed because the "From:" line only includes a name and lacks an email address in brackets. I loosened it up to only bother checking for a line beginning with "From:".

    This is probably related to Issue #66. I haven't run the unit tests, and I'm pretty sure these fixes loosen things up too much, so not exactly suggesting this be merged in as-is. Hoping someone better at regex's comes up with a more proper fix, honestly :)

    opened by gazugafan 4
  • Improve support

    Improve support

    Hello,

    I write a additionnal regex because a mail does not be good parsed. This is a yahoo mail in French with space before HeaderQuoted and between keyword (here De) and colon ( : )

    I had a test from the email received which don't work. I have of course anonymized the data in.

    Thanks for your Lib, It's very useful. I wait for your reviews if needed

    opened by jewome62 4
  • make SIG_REGEXP forward way

    make SIG_REGEXP forward way

    more understandable if you need to debug something

    mentioned here: https://github.com/willdurand/EmailReplyParser/pull/42#issuecomment-184572081

    ps: tests pass!

    opened by glensc 4
  • Allow multiple signature regexes & add Dutch send from  my iPhone sig…

    Allow multiple signature regexes & add Dutch send from my iPhone sig…

    In this PR:

    1. Use an array of signature regexes instead of a single one. This is similar to how it works for quote headers.
    2. Added the Dutch "sent from my iPhone" signature.

    Breaking changes:

    1. setQuoteHeadersRegex and getQuoteHeadersRegex use arrays instead of strings. Applications using these methods must be updated.

    Related to https://github.com/willdurand/EmailReplyParser/issues/69 but I went in a different direction.

    opened by MarkKremer 0
  • Fragment isHidden and isSignature always true?

    Fragment isHidden and isSignature always true?

    I'm trying to send email from my server and then get a reply, in reply email when I get fragments there is always isHidden and isSignature as true.

    Doese somebody has idea what could be wrong? I assume in my HTML code is something wrong. How should I form my HTML content?

    opened by mastermaeco1993 0
  • Add localization (and reduce regex duplication)

    Add localization (and reduce regex duplication)

    Hello again,

    While working and searching in the Parser/EmailParser.php file, I thought about something:


    Instead of having things like

    private $quoteHeadersRegex = array(
        '/^.{0,5}(On(?:(?!\bOn\b|\bwrote(\s|\xc2\xa0)?:).){0,1000}wrote(\s|\xc2\xa0)?:)$/ms', // On DATE, NAME <EMAIL> wrote:
        '/^.{0,5}(Le\b(?:(?!\bLe\b|\bécrit(\s|\xc2\xa0)?:).){0,1000}écrit(\s|\xc2\xa0)?:)$/ms', // Le DATE, NAME <EMAIL> a écrit :
        '/^.{0,5}(El(?:(?!\bEl\b|\bescribió\s?:).){0,1000}escribió\s?:)$/ms', // El DATE, NAME <EMAIL> escribió:
        '/^.{0,5}(El(?:(?!\bEl\b|\bha escrit\s?:).){0,1000}ha escrit\s?:)$/ms', // El DATE, NAME <EMAIL> ha escrit:
        '/^.{0,5}(Il(?:(?!\bIl\b|\bscritto(\s|\xc2\xa0)?:).){0,1000}scritto(\s|\xc2\xa0)?:)$/ms', // Il DATE, NAME <EMAIL> ha scritto:
        [...]
        '/^\s*(From\s?:.+\s?(\[|<).+(\]|>))/mu', // "From: NAME <EMAIL>" OR "From : NAME <EMAIL>" OR "From : NAME<EMAIL>"(With support whitespace before start and before <)
        '/^\s*(发件人\s?:.+\s?(\[|<).+(\]|>))/mu', // "发件人: NAME <EMAIL>" OR "发件人 : NAME <EMAIL>" OR "发件人 : NAME<EMAIL>"(With support whitespace before start and before <)
        '/^\s*(De\s?:.+\s?(\[|<).+(\]|>))/mu', // "De: NAME <EMAIL>" OR "De : NAME <EMAIL>" OR "De : NAME<EMAIL>"  (With support whitespace before start and before <)
        '/^\s*(Van\s?:.+\s?(\[|<).+(\]|>))/mu', // "Van: NAME <EMAIL>" OR "Van : NAME <EMAIL>" OR "Van : NAME<EMAIL>"  (With support whitespace before start and before <)
        '/^\s*(Da\s?:.+\s?(\[|<).+(\]|>))/mu', // "Da: NAME <EMAIL>" OR "Da : NAME <EMAIL>" OR "Da : NAME<EMAIL>"  (With support whitespace before start and before <)
        [...]
    );
    

    couldn't we have only one variabilized line for each "type" of reply like that (of course it's only a draft):

    private $quoteHeadersRegex = array(
        '/^.{0,5}($on(?:(?!\b$on\b|\b$wrote(\s|\xc2\xa0)?:).){0,1000}$wrote(\s|\xc2\xa0)?:)$/ms', // On DATE, NAME <EMAIL> wrote:
        [...]
        '/^\s*($from\s?:.+\s?(\[|<).+(\]|>))/mu', // "From: NAME <EMAIL>" OR "From : NAME <EMAIL>" OR "From : NAME<EMAIL>"(With support whitespace before start and before <)
        [...]
    );
    

    Then we would run these Regex checks using a list of language files, so for example $wrote would be checked with "wrote", then "a écrit", then "escribió", ...


    Here are the advantages I see in that modification:

    • Adding a new language or variation is easier
    • You don't have to duplicate X times the same Regex, modifying one or two words each time
    • You're less likely to make a mistake in a Regex

    That was my two cents, thanks for reading 😉

    opened by TBG-FR 0
  • Handle O365 Outlook replies

    Handle O365 Outlook replies

    Hello there !

    While using a Mantis BT plugin which is using your awesome lib, I noticed the that the <EMAIL> is no longer present, and From : is prefixed with **, that's why I modified the according regex.


    Outlook O365 replies are formatted as follows:

    * * *
    
    **From :** Firstname LASTNAME 
    
    **Sent :** mardi 3 août 2021 18:41
    
    **To :** Firstname LASTNAME ; Firstname LASTNAME 
    
    **Object :** RE: Nouveau ticket par mail [0000051] 
    

    I still have some questions to improve this PR

    • Should I include * * * and the line-breaks to the regex (making them optional probably) ?
    • Should I check for ** after the From : ? (adding a second [\*]{0,2})
    • Should I replace [\*]{0,2} with [\*]* ? (So if Microsoft or another mailer decides to use more than two * it'll be handled)

    I didn't modified or ran the tests yet.

    Thanks in advance for your reviews !

    opened by TBG-FR 1
  • Still seeing my signature in parsed emails

    Still seeing my signature in parsed emails

    I'm not sure what is classed as a 'signature' from the point of view of this module. I'm assuming, based on my testing, that it expects at least a single dash or underscore underneath the email content? My company emails do not include this, but have my name, job role and then some 'small print' about the confidentiality.

    Basically, I'm assuming that if there's no visible separator between email content and signature, the whole this is classed as 'visible content' ?

    opened by mjemerson 0
  • Add some variations to signature Regex

    Add some variations to signature Regex

    @willdurand I would like to add "Sent via the", "Sent from the", and "Sent from" to the signature Regex. These are standard Android/Galaxy signatures.

    /(?:^\s*--|^\s*__|^-\w|^-- $)|(?:^Sent (from|via) (my|the )?(?:\s*\w+){1,4}$)|(?:^={30,}$)$/s

    Is this acceptable?

    opened by mcki0127 3
Releases(2.10.0)
  • 2.10.0(Jan 30, 2022)

    What's Changed

    • Added: add support for getting visible reply text from Windows 10 Mail messages by @AlbinoDrought in https://github.com/willdurand/EmailReplyParser/pull/74
    • Added: support for Catalan reply structure by @SL-Gundam in https://github.com/willdurand/EmailReplyParser/pull/76
    • Fixed: fix regexp to handle datetime lines starting wih a few characters before On... by @Nuranto in https://github.com/willdurand/EmailReplyParser/pull/79
    • Fixedi: switch to github actions by @willdurand in https://github.com/willdurand/EmailReplyParser/pull/88

    New Contributors

    • @AlbinoDrought made their first contribution in https://github.com/willdurand/EmailReplyParser/pull/74
    • @Nuranto made their first contribution in https://github.com/willdurand/EmailReplyParser/pull/79

    Full Changelog:

    See: https://github.com/willdurand/EmailReplyParser/compare/2.9.0...2.10.0

    Source code(tar.gz)
    Source code(zip)
  • 2.9.0(Mar 24, 2020)

    • Refactor processing order, #64
    • Update dutch signature, add present perfect, #71, #70
    • Add PHP 7.2 in Travis, #67
    • Change French regex to accept nbsp before colon character, #73
    Source code(tar.gz)
    Source code(zip)
  • 2.8.0(Feb 7, 2018)

  • 2.7.0(Nov 30, 2017)

    • add getSignatureRegex/setSignatureRegex (Elan Ruusamäe, #45)
    • parse email with simplified chinese headers (9 weeks ago) (Sofiane SADOUD, #61)
    • Fix from quote headers regexes (Rénald Casagraude, #60)
    Source code(tar.gz)
    Source code(zip)
  • 2.6.0(May 24, 2017)

    Hi there! After more than a year, it is time for a new (minor) version: 2.6.0 is out! This is a huge release with tons of new supported email formats/languages 💪 . Thank you to all contributors ❤️

    Changelog

    • Added: quote header regex for Norwegian Gmail and tests for those
    • Added: test for outlook in English
    • Added: support "sent from my" with 4 word after
    • Added: test for Polish
    • Added: support mail "From: Name" in Italian
    • Added: support mail "From: Name" in Dutch
    • Added: support for optional whitespace between From and : Support squared bracket for email
    • Added: allow whitespace before common header
    • Added: support some Hotmail header
    • Added: support character "=" for signature
    • Added: support for Yahoo mail
    • Added: support for Japanese, Simplified Chinese and Korean
    Source code(tar.gz)
    Source code(zip)
  • 2.5.0(Feb 25, 2016)

  • v2.4.1(Oct 1, 2015)

  • v2.4.0(Jul 31, 2015)

  • v2.3.1(May 13, 2015)

  • v2.3.0(Apr 13, 2015)

  • 2.2.2(Oct 21, 2014)

  • 2.2.1(Sep 30, 2014)

  • 2.2.0(Aug 7, 2014)

    • Added: quote header regex for spanish
    • Added: optimized regexes by removing useless capturing groups
    • Added: test parsing 2 emails with the same parser
    • Fixed: made the EmailParser reusable by clearing its internal state
    • Fixed: improved the phpdoc in the library
    Source code(tar.gz)
    Source code(zip)
  • 2.1.0(Jul 16, 2014)

  • 2.0.1(Jan 30, 2014)

  • 2.0.0(Dec 3, 2013)

  • 2.0.0-alpha1(Nov 28, 2013)

    • Move plain old Email class to Parser\EmailParser — this class is now responsible for parsing emails and creating Email/Fragment objects (see below)
    • Move plain old Fragment class to Parser\FragmentDTO — it holds data to build Fragment objects
    • Refactor EmailParser code (simplification, more typehints)
    • Add (new) Email class that contains a set of Fragment objects, with a read only API => it is a value object
    • Add (new) Fragment class — it is a value object
    • Refactor tests to fit the new API, however nothing has been broken
    • Update README and Composer config
    • Extract method to create Email/Fragment objects
    Source code(tar.gz)
    Source code(zip)
📧 Handy email creation and transfer library for PHP with both text and MIME-compliant support.

?? Handy email creation and transfer library for PHP with both text and MIME-compliant support.

Nette Foundation 401 Dec 22, 2022
This package adds support for verifying new email addresses: when a user updates its email address, it won't replace the old one until the new one is verified.

Laravel Verify New Email Laravel supports verifying email addresses out of the box. This package adds support for verifying new email addresses. When

Protone Media 300 Dec 30, 2022
Magento 2 Email Catcher or Email Logger Module.

Magento 2 Module Experius email catcher / - logger

Experius 49 Dec 16, 2021
SendPortal - Open-source self-hosted email marketing, subscriber and list management, email campaigns and more

SendPortal includes subscriber and list management, email campaigns, message tracking, reports and multiple workspaces/domains in a modern, flexible and scalable application.

Mettle 1.2k Jan 4, 2023
Cross-language email validation. Backed by a database of over 38 000 throwable email domains.

Cross-language temporary (disposable/throwaway) email detection library. Covers 38038+ fake email providers.

Francois-Guillaume Ribreau 1.4k Jan 9, 2023
The classic email sending library for PHP

PHPMailer – A full-featured email creation and transfer class for PHP Features Probably the world's most popular code for sending email from PHP! Used

PHPMailer 19k Jan 1, 2023
Small PHP library to valid email addresses using a number of methods.

Email Validator Small PHP library to valid email addresses using a number of methods. Features Validates email address Checks for example domains (e.g

James Jackson 154 Dec 31, 2022
Library for using online Email providers

Stampie Stampie have been moved to the "Flint" organization in order to get a better collaborative flow. Stampie is a simple API Wrapper for different

Henrik Bjørnskov 32 Oct 7, 2020
Library for using online Email providers

Stampie Stampie is a simple API Wrapper for different email providers such as Postmark and SendGrid. It is very easy to use and to integrate into your

Stampie 288 Dec 31, 2022
Fetch is a library for reading email and attachments, primarily using the POP and IMAP protocols

Fetch Fetch is a library for reading email and attachments, primarily using the POP and IMAP protocols. Installing N.b. A note on Ubuntu 14.04 (probab

Tedious Developments 501 Jan 4, 2023
PHPMailer – A full-featured email creation and transfer class for PHP

PHPMailer – A full-featured email creation and transfer class for PHP Features Probably the world's most popular code for sending email from PHP! Used

PHPMailer 19.1k Jan 2, 2023
A ready-to-use PHP script for sending Emails with an HTML Template will use a Gmail account as the sender and you will not need any email server. Powered by PHPMailer.

Gmail Email Sender by PHP A ready-to-use PHP script for sending Emails with an HTML Template will use a Gmail account as the sender and you will not n

Max Base 4 Oct 29, 2022
Send email across all platforms using one interface

Send email across all platforms using one interface. Table Of Content Requirements Installation Providers AmazonSES Mailgun Mailjet Mandrill Postmark

Omnimail 329 Dec 30, 2022
Mail sending module for Mezzio and Laminas MVC with support for file attachment and template email composition

This module provides an easy and flexible way to send emails from Mezzio and Laminas MVC applications (formerly known as Zend Expressive and Zend MVC). It allows you to pre-configure emails and transports, and then send those emails at runtime.

null 82 Jan 16, 2022
Omnisend: Ecommerce Email Marketing and SMS Platform

Omnisend Omnisend: Ecommerce Email Marketing and SMS Platform Version v1.x Support all PHP Version >=5.6 v2.x Support all PHP Version >=7.0 Installati

Hung Nguyen 3 Jan 6, 2022
Sending Email via Microsoft Exchange Web Services made Easy!

Send Mail via Exchange Web Services! Sending Email via Microsoft Exchange Web Services (EWS) made easy! Installation Install via Composer composer req

Raju Rayhan 19 Jul 19, 2022
Mailcoach is a self-hosted email list manager - in a modern jacket.

Welcome to Mailcoach Mailcoach is a self-hosted email list manager - in a modern jacket. It features: Subscribers and lists management Subscribe, doub

Spatie 3 Jan 31, 2022
An AngularJS / Laravel app - Keyword Based Email forwarder | read/write emails through IMAP

@MailTree Simple mail forwarder. Based on the specific email body/subject keywords forward mails to the list of predefined users. Install Imap Install

Dren Kajmakchi 4 Aug 21, 2018
Disposable email address validator for Laravel

Laravel Disposable Email Adds a validator to Laravel for checking whether a given email address isn't originating from disposable email services such

null 332 Dec 29, 2022