Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Mail Mime Parser Laravel Package

zbateson/mail-mime-parser

PSR-compliant, testable MIME email parser for PHP 8.1+ as an alternative to imap* and PEAR. Parses RFC 822/2822/5322 messages from strings, resources, or PSR-7 streams; standards-compliant yet forgiving, with a cleaned-up 4.x API.

View on GitHub
Deep Wiki
Context7
3.0.4

What's Changed

New Contributors

Full Changelog: https://github.com/zbateson/mail-mime-parser/compare/3.0.3...3.0.4

3.0.3
  • Fix to allow empty address groups #241
  • Ignore ws between rfc2047 parts in q-part #240
  • Fix PartBuilder parent parameter type

Full Changelog: https://github.com/zbateson/mail-mime-parser/compare/3.0.2...3.0.3

3.0.2

What's Changed

Full Changelog: https://github.com/zbateson/mail-mime-parser/compare/3.0.1...3.0.2

3.0.1

Fixes version constraints for php-di, guzzlehttp/psr7 and phpunit.

2.4.1

What's Changed

3.0.0
  • Logging support, pass in a LoggerInterface to the constructor or call MailMimeParser::setGlobalLogger. Not much is actually logged at this point (please submit pull requests to add useful log messages)

  • ErrorBag class -- most user classes extend ErrorBag which allows classes to keep track of errors by calling addError, and users to call getErrors or getAllErrors (to include errors in child classes).

    Additional validation on objects is not performed, but can be done by passing 'true' as the validate parameter on getErrors/getAllErrors. By default only errors encountered without additional validation are added.

    See IErrorBag class for documentation.

  • If ParserManagerService can't find a parser for a PartBuilder, CompatibleParserNotFoundException will be thrown. This would only happen if customizing the used parsers passed on to ParserManagerService since the default set includes a 'catch-all' with NonMimeParserService.

  • protected AbstractHeader::setParseHeaderValue renamed to parseHeaderValue, and signature changed.

  • Can look up comment parts in headers -- use IHeader::getAllParts to return all parsed parts including comment parts.

  • GenericHeader getValue returns a string value of the combination of all its non-comment parts. This applies to any header that doesn't have a more specialized header type (not an address, date, id, parameter, received or subject header), see HeaderFactory docs for specifics.

  • IHeader now has a getComments() method that returns a string array of comments. ReceivedHeader no longer has protected members $comments and $date ($date is now private -- still has AbstractHeader::getComments(), and ReceivedHeader::getDateTime())

  • Switched to PHP-DI, users can provide a array|string|DefinitionSource to override definitions

    • Renamed service classes to clarify: o AbstractParser -> AbstractParserService o HeaderParser -> HeaderParserService o IParser -> IParserService o MessageParser -> MessageParserService o MimeParser -> MimeParserService o NonMimeParser -> NonMimeParserService o ParserManager -> ParserManagerService o All consumer classes, e.g. AbstractConsumer -> AbstractConsumerService
  • Refactored Header classes to depend on their respective IConsumerService classes they need

  • Refactored ConsumerService classes to define which sub-ConsumerService classes they depend on. Removed ConsumerService.

  • Cleaned up method return types and parameter types.

  • Added an AbstractHeader::from which returns IHeader objects from a passed header line, or header name/value pair. Static method can be called on a sub class which returns its type, for example AddressHeader::from would return an AddressHeader regardless of the name parameter or name of header in the passed line.

  • Refactored HeaderPart classes with the following goals:

    • Token classes to be used by Consumers to convert from a string to a "part".
    • When processing a part, consumer may combine them into a 'ContainerPart' array to return to a header.
    • Non-Token classes are "ContainerParts" and contain other HeaderParts.
    • When constructing a ContainerPart, other HeaderParts can become children of it.
    • HeaderPart is an ErrorBag, so it and all its children can report errors up the chain all the way to Message.

Merged PRs

New Contributors

Full Changelog: https://github.com/zbateson/mail-mime-parser/compare/2.4.0...3.0.0

3.0.0-beta.2
  • Added missing tests
  • Added IMessage::getSubject
3.0.0-beta
  • Logging support, pass in a LoggerInterface to the constructor or call MailMimeParser::setGlobalLogger. Not much is actually logged at this point (please submit pull requests to add useful log messages)

  • ErrorBag class -- most user classes extend ErrorBag which allows classes to keep track of errors by calling addError, and users to call getErrors or getAllErrors (to include errors in child classes).

    Additional validation on objects is not performed, but can be done by passing 'true' as the validate parameter on getErrors/getAllErrors. By default only errors encountered without additional validation are added.

    See IErrorBag class for documentation.

  • If ParserManagerService can't find a parser for a PartBuilder, CompatibleParserNotFoundException will be thrown. This would only happen if customizing the used parsers passed on to ParserManagerService since the default set includes a 'catch-all' with NonMimeParserService.

  • protected AbstractHeader::setParseHeaderValue renamed to parseHeaderValue, and signature changed.

  • Can look up comment parts in headers -- use IHeader::getAllParts to return all parsed parts including comment parts.

  • GenericHeader getValue returns a string value of the combination of all its non-comment parts. This applies to any header that doesn't have a more specialized header type (not an address, date, id, parameter, received or subject header), see HeaderFactory docs for specifics.

  • IHeader now has a getComments() method that returns a string array of comments. ReceivedHeader no longer has protected members $comments and $date ($date is now private -- still has AbstractHeader::getComments(), and ReceivedHeader::getDateTime())

  • Switched to PHP-DI, users can provide a array|string|DefinitionSource to override definitions

    • Renamed service classes to clarify: o AbstractParser -> AbstractParserService o HeaderParser -> HeaderParserService o IParser -> IParserService o MessageParser -> MessageParserService o MimeParser -> MimeParserService o NonMimeParser -> NonMimeParserService o ParserManager -> ParserManagerService o All consumer classes, e.g. AbstractConsumer -> AbstractConsumerService
  • Refactored Header classes to depend on their respective IConsumerService classes they need

  • Refactored ConsumerService classes to define which sub-ConsumerService classes they depend on. Removed ConsumerService.

  • Cleaned up method return types and parameter types.

  • Added an AbstractHeader::from which returns IHeader objects from a passed header line, or header name/value pair. Static method can be called on a sub class which returns its type, for example AddressHeader::from would return an AddressHeader regardless of the name parameter or name of header in the passed line.

  • Refactored HeaderPart classes with the following goals:

    • Token classes to be used by Consumers to convert from a string to a "part".
    • When processing a part, consumer may combine them into a 'ContainerPart' array to return to a header.
    • Non-Token classes are "ContainerParts" and contain other HeaderParts.
    • When constructing a ContainerPart, other HeaderParts can become children of it.
    • HeaderPart is an ErrorBag, so it and all its children can report errors up the chain all the way to Message.
2.3.0

What's Changed

New Contributors

Full Changelog: https://github.com/zbateson/mail-mime-parser/compare/2.2.3...2.3.0

Huge thank you to @phpfui for this release and migration to php 7.1+.

2.2.3

What's Changed

New Contributors

Full Changelog: https://github.com/zbateson/mail-mime-parser/compare/2.2.2...2.2.3

2.2.2

#189 fixes a documentation error thanks to @naitsirch #197 Fix PHP 8.1 return type deprecation notices. @alexei-bykovski

2.2.1

Fix for #160 : empty utf8 quoted not parsed correctly, thanks @jszaszi

2.2.0

Fixes:

  • References header decoding problem #186 - IdHeader can now accept a mix of mime-encoded and non-mime-encoded parts
  • Issue with parsing ReceivedHeaders #183
2.1.1

#184 Adding #[\ReturnTypeWillChange] for PHP8.1 compatibility

Thanks @phpfui

2.1.0

Fixes #165 -- separates email address parsing into its own consumer so invalid characters can be ignored within an '<' and '>' chars representing the email address.

2.0.1

Fix an issue parsing long RFC2231 header values #182

1.3.3

Fixes #182

2.0.0

Huge thank you to the project sponsors who helped make this release happen.

  • Use pimple/pimple for di, refactor initialization:
    • Reconfigure the dependency container entirely, call MailMimePaser::setDependencyContainer
    • Add providers, call MailMimeParser::configureDependencyContainer with an array of providers
  • Parser improvements:
    • Modular parsing separated into classes for better extensibility
    • Dynamic/proxied parsing based on user requests (looking at message headers won't parse all content/children and is therefore very very fast even on larger messages)
    • Stream is no longer copied first, but must be closed after the message object is destroyed (or can be attached to the message)
  • Define and use interfaces instead of concrete classes for better extensibility, change of internal hierarchy that didn't make sense
    • IMessagePart instead of MessagePart, IMimePart instead of MimePart, IUUEncodedPart instead of UUEncodedPart, IMultiPart is new, IMessage instead of Message. HeaderPart and ParentHeaderPart no longer exist.
  • Remove deprecated resource handle methods:
    • Removes IMessage::getTextResourceHandle, IMessage::getHtmlResourceHandle and IMessagePart::getContentResourceHandle
  • Filtering parts is now done with simple callbacks. PartFilter is now just a convenience class with static methods that provides filtering callbacks instead of a concrete class used for filtering.
  • Other minor changes of note:
    • MimePart::getContentDisposition for a MimePart is now limited to returning 'inline' or 'attachment' even if the header has a different value.
    • IMultiPart::removeAllParts now returns the number of parts removed.
2.0.0-beta.1

Proxy parser refactor/fix, testing, documentation.

2.0.0-beta

Thanks to my sponsors @SecuMailer, @mxguardian and @ericlbarnes

Changes and progress (and any issues you find) in #171

1.3.2

Adds support for guzzlehttp/psr7 v2, thanks to @Nielsvanpach

1.3.1

Fixes "SplFixedArray usage is incompatible with PHP 8.0" #151 thanks to @phpfui in #154

1.3.0
1.2.3

Return-Path should be handled as an AddressHeader ( #138 thanks @mariuszkrzaczkowski )

1.2.2

Defaults to multipart/mixed for any multipart type that isn't known #115

1.2.1
  • Deprecate getContentResourceHandle #106
  • Use latest zbateson/stream-decorators
  • Mime-encoded headers for IdHeader #109
  • Travis testing for php 7.4
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
milesj/emojibase
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport