MailMimeParser 1.2

MimeLiteralPart extends LiteralPart

Represents a single mime header part token, with the possibility of it being MIME-Encoded as per RFC-2047.

MimeLiteralPart automatically decodes the value if it's encoded.

Tags
author

Zaahid Bateson

Table of Contents

MIME_PART_PATTERN  = '=\?[^?=]+\?[QBqb]\?[^\?]+\?='
MIME_PART_PATTERN_NO_QUOTES  = '=\?[^\?=]+\?[QBqb]\?[^\?"]+\?='
$canIgnoreSpacesAfter  : bool
$canIgnoreSpacesBefore  : bool
$charsetConverter  : MbWrapper
$languages  : array<string|int, mixed>
$value  : string
__construct()  : mixed
Decoding the passed token value if it's mime-encoded and assigns the decoded value to a member variable. Sets canIgnoreSpacesBefore and canIgnoreSpacesAfter.
__toString()  : string
Returns the value of the part (which is a string).
getLanguageArray()  : array<string|int, array<string|int, string>>
Returns an array of parts mapped to languages in the header value, for instance the string:
getValue()  : string
Returns the part's value.
ignoreSpacesAfter()  : bool
Returns true if spaces before this part should be ignored.
ignoreSpacesBefore()  : bool
Returns true if spaces before this part should be ignored.
addToLanguage()  : mixed
Adds the passed part into the languages array with the given language.
convertEncoding()  : string
Ensures the encoding of the passed string is set to UTF-8.
decodeMime()  : string
Finds and replaces mime parts with their values.
decodeMatchedEntity()  : string
Decodes a matched mime entity part into a string and returns it, after adding the string into the languages array.
decodeSplitPart()  : string
Decodes a single mime-encoded entity.

Constants

MIME_PART_PATTERN

public string MIME_PART_PATTERN = '=\?[^?=]+\?[QBqb]\?[^\?]+\?='

MIME_PART_PATTERN_NO_QUOTES

public string MIME_PART_PATTERN_NO_QUOTES = '=\?[^\?=]+\?[QBqb]\?[^\?"]+\?='

Properties

$canIgnoreSpacesBefore

protected bool $canIgnoreSpacesBefore = false

$charsetConverter

protected MbWrapper $charsetConverter

Methods

__construct()

Decoding the passed token value if it's mime-encoded and assigns the decoded value to a member variable. Sets canIgnoreSpacesBefore and canIgnoreSpacesAfter.

public __construct(MbWrapper $charsetConverter, string $token) : mixed
Parameters
$charsetConverter : MbWrapper
$token : string
Return values
mixed

__toString()

Returns the value of the part (which is a string).

public __toString() : string
Return values
string

the value

getLanguageArray()

Returns an array of parts mapped to languages in the header value, for instance the string:

public getLanguageArray() : array<string|int, array<string|int, string>>

'Hello and =?UTF-8fr-be?Q?bonjour_?= =?UTF-8it?Q?mi amici?=. Welcome!'

Would be mapped in the returned array as follows:

[
    0 => [ 'lang' => null, 'value' => 'Hello and ' ],
    1 => [ 'lang' => 'fr-be', 'value' => 'bonjour ' ],
    3 => [ 'lang' => 'it', 'value' => 'mi amici' ],
    4 => [ 'lang' => null, 'value' => ' Welcome!' ]
]
Return values
array<string|int, array<string|int, string>>

getValue()

Returns the part's value.

public getValue() : string
Return values
string

the value of the part

ignoreSpacesAfter()

Returns true if spaces before this part should be ignored.

public ignoreSpacesAfter() : bool

Overridden to return $this->canIgnoreSpacesAfter which is setup in the constructor.

Return values
bool

ignoreSpacesBefore()

Returns true if spaces before this part should be ignored.

public ignoreSpacesBefore() : bool

Overridden to return $this->canIgnoreSpacesBefore which is setup in the constructor.

Return values
bool

addToLanguage()

Adds the passed part into the languages array with the given language.

protected addToLanguage(string $part[, string|null $language = null ]) : mixed
Parameters
$part : string
$language : string|null = null
Return values
mixed

convertEncoding()

Ensures the encoding of the passed string is set to UTF-8.

protected convertEncoding(string $str[, string $from = 'ISO-8859-1' ][, bool $force = false ]) : string

The method does nothing if the passed $from charset is UTF-8 already, or if $force is set to false and mb_check_encoding for $str returns true for 'UTF-8'.

Parameters
$str : string
$from : string = 'ISO-8859-1'
$force : bool = false
Return values
string

utf-8 string

decodeMime()

Finds and replaces mime parts with their values.

protected decodeMime(string $value) : string

The method splits the token value into an array on mime-part-patterns, either replacing a mime part with its value by calling iconv_mime_decode or converts the encoding on the text part by calling convertEncoding.

Parameters
$value : string
Return values
string

decodeMatchedEntity()

Decodes a matched mime entity part into a string and returns it, after adding the string into the languages array.

private decodeMatchedEntity(array<string|int, string> $matches) : string
Parameters
$matches : array<string|int, string>
Return values
string

decodeSplitPart()

Decodes a single mime-encoded entity.

private decodeSplitPart(string $entity) : string

Unfortunately, mb_decode_header fails for many charsets on PHP 5.4 and PHP 5.5 (even if they're listed as supported). iconv_mime_decode doesn't support all charsets.

Parsing out the charset and body of the encoded entity seems to be the way to go to support the most charsets.

Parameters
$entity : string
Return values
string

Search results