Copied!

Parses a MIME message into an {@see IMessage} object.

The class sets up the dependency injection container (using PHP-DI) with the ability to override and/or provide specialized classes. To override you can:

  • Provide an array|string|DefinitionSource to the constructor to affect classes used on a single instance of MailMimeParser
  • Call MailMimeParser::addGlobalContainerDefinition with an array|string|DefinitionSource to to override it globally on all instances of MailMimeParser
  • Call MailMimeParser::getGlobalContainer(), and use set() to override individual definitions globally.

You may also provide a LoggerInterface on the constructor for a single instance, or override it globally by calling setGlobalLogger. This is the same as setting up Psr\Log\LoggerInterface with your logger class in a Php-Di configuration in one of the above methods.

To invoke the parser, call parse on a MailMimeParser object.

$parser = new MailMimeParser();
// the resource is attached due to the second parameter being true and will
// be closed when the returned IMessage is destroyed
$message = $parser->parse(fopen('path/to/file.txt'), true);
// use $message here
CloneableInstantiable
Constants
public ZBateson\MailMimeParser\MailMimeParser::DEFAULT_CHARSET = 'UTF-8'
 
  • var string the default charset used to encode strings (or string content like streams) returned by MailMimeParser (for e.g. the string returned by calling $message->getTextContent()).
Methods
public __construct(?Psr\Log\LoggerInterface $logger = NULL, DI\Definition\Source\DefinitionSource|array|string|?null $phpDiContainerConfig = NULL, bool $useGlobalDefinitions = true)
 

Provide custom php-di configuration to customize dependency injection, or provide a custom logger for the instance only.

Note: this only affects instances created through this instance of the MailMimeParser, or the container itself. Calling 'new MimePart()' directly for instance, would use the global service locator to setup any dependencies MimePart needs. This applies to a provided $logger too -- it would only affect instances of objects created through the provided MailMimeParser.

Passing false to $useGlobalDefinitions will cause MMP to not use any global definitions. The default definitions file MailMimeParser::DEFAULT_DEFINITIONS_FILE will still be added though.

  • see \MailMimeParser::setGlobalPhpDiConfiguration()to register configuration globally.
  • see \MailMimeParser::setGlobalLogger()to set a global logger
  • param array<string, mixed>|string|\DefinitionSource|null $phpDiContainerConfig
public static addGlobalPhpDiContainerDefinition(DI\Definition\Source\DefinitionSource|array|string $phpDiConfig) : void
 
  • param array<string, mixed>|string|\DefinitionSource $phpDiConfig
public static getGlobalContainer() : DI\Container
 

Returns the global php-di container instance.

public parse(?mixed $resource, bool $autoClose) : ZBateson\MailMimeParser\IMessage
 

Parses the passed stream handle or string into an {@see IMessage} object and returns it.

If the passed $resource is a resource handle or StreamInterface, the resource must remain open while the returned IMessage object exists. Pass true as the second argument to have the resource automatically closed when the returned IMessage is destroyed, or pass false to manage the resource lifecycle yourself.

  • param resource|\StreamInterface|string $resource The resource handle to the input stream of the mime message, or a string containing a mime message.
  • param bool $autoClose pass true to have the resource closed automatically when the returned IMessage is destroyed.
public static readPluginConfigPath(string $packageInstallPath) : ?string
 

Reads a package's composer.json and returns the absolute path to its MMP DI config file, or null if the package is not an MMP plugin.

Looks for "extra.mail-mime-parser.di_config" in the package's composer.json.

public static resetGlobalPhpDiContainerDefinitions() : void
public static setFallbackCharset(string $charset) : void
 

Sets the fallback charset used for text/* content parts that don't declare a charset. Defaults to 'ISO-8859-1' per RFC 2045.

Many modern messages omit the charset and are actually UTF-8, so you may want to set this to 'UTF-8'.

public static setGlobalLogger(Psr\Log\LoggerInterface $logger) : void
 

Registers the provided logger globally.

public static setGlobalPhpDiConfigurations(array $phpDiConfigs, bool $useDefaultDefinitionsFile = true) : void
 

Sets global configuration for php-di. Overrides all previously set definitions. You can optionally not use the default MMP definitions file by passing 'false' to the $useDefaultDefinitionsFile argument.

  • param array<array<string, mixed>|string|\DefinitionSource> $phpDiConfigs array of definitions
Properties
protected DI\Container $container
 
  • var \Container The instance's dependency injection container.
protected ZBateson\MailMimeParser\Parser\MessageParserService $messageParser
 
  • var \MessageParserService for parsing messages
Constants
private ZBateson\MailMimeParser\MailMimeParser::DEFAULT_DEFINITIONS_FILE = '/homepages/18/d179646520/htdocs/PHPFUIWebsite/ZBateson/MailMimeParser/di_config.php'
 
  • var string the default definition file.
private ZBateson\MailMimeParser\MailMimeParser::PLUGIN_EXTRA_KEY = 'mail-mime-parser'
 

The key in a package's composer.json "extra" section that MMP looks for to auto-discover plugin DI configurations.

Properties
private static ?DI\Container $globalContainer = NULL
 
  • var \Container The static global container
private static array $globalDefinitions = ['/homepages/18/d179646520/htdocs/PHPFUIWebsite/ZBateson/MailMimeParser/di_config.php']
 
  • var array<array<string, mixed>|string|\DefinitionSource> an array of global definitions being used.
Methods
private static discoverPluginConfigs() : array
 

Discovers plugin DI config files from installed Composer packages.

Uses Composer's InstalledVersions runtime API to enumerate installed packages and reads each package's composer.json for the "extra.mail-mime-parser.di_config" entry.

Returns an empty array in non-Composer environments.

  • return string[] Absolute paths to discovered config files
private static getGlobalContainerBuilder() : DI\ContainerBuilder
 

Returns the default ContainerBuilder with default loaded definitions.

  • return \ContainerBuilder<\Container>
Properties
private static ?DI\Container $globalContainer = NULL
 
  • var \Container The static global container
private static array $globalDefinitions = ['/homepages/18/d179646520/htdocs/PHPFUIWebsite/ZBateson/MailMimeParser/di_config.php']
 
  • var array<array<string, mixed>|string|\DefinitionSource> an array of global definitions being used.
Methods
public static addGlobalPhpDiContainerDefinition(DI\Definition\Source\DefinitionSource|array|string $phpDiConfig) : void
 
  • param array<string, mixed>|string|\DefinitionSource $phpDiConfig
private static discoverPluginConfigs() : array
 

Discovers plugin DI config files from installed Composer packages.

Uses Composer's InstalledVersions runtime API to enumerate installed packages and reads each package's composer.json for the "extra.mail-mime-parser.di_config" entry.

Returns an empty array in non-Composer environments.

  • return string[] Absolute paths to discovered config files
public static getGlobalContainer() : DI\Container
 

Returns the global php-di container instance.

private static getGlobalContainerBuilder() : DI\ContainerBuilder
 

Returns the default ContainerBuilder with default loaded definitions.

  • return \ContainerBuilder<\Container>
public static readPluginConfigPath(string $packageInstallPath) : ?string
 

Reads a package's composer.json and returns the absolute path to its MMP DI config file, or null if the package is not an MMP plugin.

Looks for "extra.mail-mime-parser.di_config" in the package's composer.json.

public static resetGlobalPhpDiContainerDefinitions() : void
public static setFallbackCharset(string $charset) : void
 

Sets the fallback charset used for text/* content parts that don't declare a charset. Defaults to 'ISO-8859-1' per RFC 2045.

Many modern messages omit the charset and are actually UTF-8, so you may want to set this to 'UTF-8'.

public static setGlobalLogger(Psr\Log\LoggerInterface $logger) : void
 

Registers the provided logger globally.

public static setGlobalPhpDiConfigurations(array $phpDiConfigs, bool $useDefaultDefinitionsFile = true) : void
 

Sets global configuration for php-di. Overrides all previously set definitions. You can optionally not use the default MMP definitions file by passing 'false' to the $useDefaultDefinitionsFile argument.

  • param array<array<string, mixed>|string|\DefinitionSource> $phpDiConfigs array of definitions
© 2026 Bruce Wells
Search Namespaces \ Classes
Configuration