MailMimeParser 1.0

MimePart extends ParentHeaderPart

Represents a single part of a multi-part mime message.

A MimePart object may have any number of child parts, or may be a child itself with its own parent or parents.

The content of the part can be read from its PartStream resource handle, accessible via MessagePart::getContentResourceHandle.

Tags
author

Zaahid Bateson

Table of Contents

$charsetOverride  : string
$children  : array<string|int, MessagePart>
$contentStream  : StreamInterface
$headerContainer  : HeaderContainer
$ignoreTransferEncoding  : bool
$parent  : ParentPart
$partFilterFactory  : PartFilterFactory
$partStreamFilterManager  : PartStreamFilterManager
$stream  : StreamInterface
$streamFactory  : StreamFactory
__construct()  : mixed
Constructor
__destruct()  : mixed
Overridden to close streams.
__toString()  : string
Returns the message/part as a string.
addChild()  : mixed
Registers the passed part as a child of the current part.
addRawHeader()  : mixed
Adds a header with the given $name and $value.
attachContentStream()  : mixed
Attaches the stream or resource handle for the part's content. The stream is closed when another stream is attached, or the MimePart is destroyed.
detachContentStream()  : mixed
Detaches and closes the content stream.
getAllHeadersByName()  : array<string|int, AbstractHeader>
Returns an array of headers that match the passed name.
getAllParts()  : array<string|int, MessagePart>
Returns the current part, all child parts, and child parts of all children optionally filtering them with the provided PartFilter.
getAllPartsByMimeType()  : array<string|int, MessagePart>
Returns an array of all parts associated with the passed mime type if any exist or null otherwise.
getCharset()  : string
Returns the upper-cased charset of the Content-Type header's charset parameter if set, ISO-8859-1 if the Content-Type is text/plain or text/html and the charset parameter isn't set, or null otherwise.
getChild()  : MessagePart
Returns the direct child at the given 0-based index, or null if none is set.
getChildCount()  : int
Returns the number of direct children under this part.
getChildParts()  : array<string|int, MessagePart>
Returns all direct child parts.
getContent()  : string
Shortcut to reading stream content and assigning it to a string. Returns null if the part doesn't have a content stream.
getContentDisposition()  : string
Returns the content's disposition, defaulting to 'inline' if not set.
getContentResourceHandle()  : resource
Returns a new resource stream handle for the part's content or null if the part doesn't have a content section.
getContentStream()  : StreamInterface
Returns the StreamInterface for the part's content or null if the part doesn't have a content section.
getContentTransferEncoding()  : string
Returns the content-transfer-encoding used for this part, defaulting to '7bit' if not set.
getContentType()  : string
Returns the lower-cased, trimmed value of the Content-Type header.
getCountOfPartsByMimeType()  : int
Returns the number of parts matching the passed $mimeType
getFilename()  : string
Returns a filename for the part if one is defined, or null otherwise.
getHeader()  : AbstractHeader
Returns the AbstractHeader object for the header with the given $name.
getHeaderParameter()  : string
Returns a parameter of the header $header, given the parameter named $param.
getHeaderValue()  : string
Returns the string value for the header with the given $name.
getParent()  : MimePart
Returns this part's parent.
getPart()  : MessagePart
Returns the part at the given 0-based index, or null if none is set.
getPartByMimeType()  : MessagePart|null
Returns the part associated with the passed mime type, at the passed index, if it exists.
getPartCount()  : int
Returns the total number of parts in this and all children.
getRawHeaderIterator()  : Iterator
Returns an iterator to the headers in this collection. Each returned element is an array with its first element set to the header's name, and the second to its raw value:
getRawHeaders()  : array<string|int, array<string|int, string>>
Returns an array of all headers for the mime part with the first element holding the name, and the second its value.
getResourceHandle()  : resource
Rewrite me
getStream()  : StreamInterface
Write me
hasContent()  : bool
Returns true if there's a content stream associated with the part.
isMime()  : bool
Returns true.
isMultiPart()  : bool
Returns true if this part's mime type is multipart/*
isTextPart()  : bool
Returns true if this part's mime type is text/plain, text/html or if the Content-Type header defines a charset.
markAsChanged()  : mixed
Marks the part as changed, forcing the part to be rewritten when saved.
removeAllParts()  : mixed
Removes all parts that are matched by the passed PartFilter.
removeHeader()  : mixed
Removes all headers from this part with the passed name.
removePart()  : int
Removes the child part from this part and returns its position or null if it wasn't found.
removeSingleHeader()  : mixed
Removes a single header with the passed name (in cases where more than one may exist, and others should be preserved).
save()  : mixed
Saves the message/part as to the passed resource handle.
setCharsetOverride()  : mixed
Overrides the default character set used for reading content from content streams in cases where a user knows the source charset is not what is specified.
setContent()  : mixed
Sets the content of the part to the passed resource.
setRawHeader()  : mixed
Adds a header with the given $name and $value. An optional $offset may be passed, which will overwrite a header if one exists with the given name and offset. Otherwise a new header is added. The passed $offset may be ignored in that case if it doesn't represent the next insert position for the header with the passed name... instead it would be 'pushed' on at the next position.
getAllNonFilteredParts()  : array<string|int, MessagePart>
Returns all parts, including the current object, and all children below it (including children of children, etc...)
onChange()  : mixed
Called when operations change the content of the MessagePart.

Properties

$contentStream

protected StreamInterface $contentStream

$ignoreTransferEncoding

protected bool $ignoreTransferEncoding

Methods

__destruct()

Overridden to close streams.

public __destruct() : mixed
Return values
mixed

__toString()

Returns the message/part as a string.

public __toString() : string

Convenience method for calling getStream()->getContents().

Return values
string

addChild()

Registers the passed part as a child of the current part.

public addChild(MessagePart $part[, int $position = null ]) : mixed

If the $position parameter is non-null, adds the part at the passed position index.

Parameters
$part : MessagePart
$position : int = null
Return values
mixed

addRawHeader()

Adds a header with the given $name and $value.

public addRawHeader(string $name, string $value) : mixed

Note: If a header with the passed name already exists, a new header is created with the same name. This should only be used when that is intentional - in most cases setRawHeader should be called.

Creates a new \ZBateson\MailMimeParser\Header\AbstractHeader object and registers it as a header.

Parameters
$name : string
$value : string
Return values
mixed

attachContentStream()

Attaches the stream or resource handle for the part's content. The stream is closed when another stream is attached, or the MimePart is destroyed.

public attachContentStream(StreamInterface $stream[, string $streamCharset = MailMimeParser::DEFAULT_CHARSET ]) : mixed
Parameters
$stream : StreamInterface
$streamCharset : string = MailMimeParser::DEFAULT_CHARSET
Return values
mixed

detachContentStream()

Detaches and closes the content stream.

public detachContentStream() : mixed
Return values
mixed

getAllHeadersByName()

Returns an array of headers that match the passed name.

public getAllHeadersByName(string $name) : array<string|int, AbstractHeader>
Parameters
$name : string
Return values
array<string|int, AbstractHeader>

getAllParts()

Returns the current part, all child parts, and child parts of all children optionally filtering them with the provided PartFilter.

public getAllParts([PartFilter $filter = null ]) : array<string|int, MessagePart>

The first part returned is always the current MimePart. This is often desirable as it may be a valid MimePart for the provided PartFilter.

Parameters
$filter : PartFilter = null

an optional filter

Return values
array<string|int, MessagePart>

getAllPartsByMimeType()

Returns an array of all parts associated with the passed mime type if any exist or null otherwise.

public getAllPartsByMimeType(string $mimeType) : array<string|int, MessagePart>
Parameters
$mimeType : string
Return values
array<string|int, MessagePart>

or null

getCharset()

Returns the upper-cased charset of the Content-Type header's charset parameter if set, ISO-8859-1 if the Content-Type is text/plain or text/html and the charset parameter isn't set, or null otherwise.

public getCharset() : string
Return values
string

getChildCount()

Returns the number of direct children under this part.

public getChildCount([PartFilter $filter = null ]) : int
Parameters
$filter : PartFilter = null
Return values
int

getChildParts()

Returns all direct child parts.

public getChildParts([PartFilter $filter = null ]) : array<string|int, MessagePart>

If a PartFilter is provided, the PartFilter is applied before returning.

Parameters
$filter : PartFilter = null
Return values
array<string|int, MessagePart>

getContent()

Shortcut to reading stream content and assigning it to a string. Returns null if the part doesn't have a content stream.

public getContent([string $charset = MailMimeParser::DEFAULT_CHARSET ]) : string

The returned string is encoded to the passed $charset character encoding, defaulting to UTF-8.

Parameters
$charset : string = MailMimeParser::DEFAULT_CHARSET
Return values
string

getContentDisposition()

Returns the content's disposition, defaulting to 'inline' if not set.

public getContentDisposition([string $default = 'inline' ]) : string
Parameters
$default : string = 'inline'

pass to override the default returned disposition when not set.

Return values
string

getContentResourceHandle()

Returns a new resource stream handle for the part's content or null if the part doesn't have a content section.

public getContentResourceHandle([string $charset = MailMimeParser::DEFAULT_CHARSET ]) : resource

The returned resource handle is a resource stream with decoding filters appended to it. The attached filters are determined by looking at the part's Content-Transfer-Encoding and Content-Type headers unless a charset override is set. The following transfer encodings are supported:

  • quoted-printable
  • base64
  • x-uuencode

In addition, the charset of the underlying stream is converted to the passed $charset if the content is known to be text.

Parameters
$charset : string = MailMimeParser::DEFAULT_CHARSET
Return values
resource

getContentStream()

Returns the StreamInterface for the part's content or null if the part doesn't have a content section.

public getContentStream([string $charset = MailMimeParser::DEFAULT_CHARSET ]) : StreamInterface

Because the returned stream may be a shared object if called multiple times, the function isn't exposed publicly. If called multiple times with the same $charset, and the value of the part's Content-Transfer-Encoding header not having changed, the returned stream is the same instance and may need to be rewound.

Note that PartStreamFilterManager rewinds the stream before returning it.

Parameters
$charset : string = MailMimeParser::DEFAULT_CHARSET
Return values
StreamInterface

getContentTransferEncoding()

Returns the content-transfer-encoding used for this part, defaulting to '7bit' if not set.

public getContentTransferEncoding([string $default = '7bit' ]) : string
Parameters
$default : string = '7bit'

pass to override the default when not set.

Return values
string

getContentType()

Returns the lower-cased, trimmed value of the Content-Type header.

public getContentType([string $default = 'text/plain' ]) : string

Parses the Content-Type header, defaults to returning text/plain if not defined.

Parameters
$default : string = 'text/plain'

pass to override the returned value when not set

Return values
string

getCountOfPartsByMimeType()

Returns the number of parts matching the passed $mimeType

public getCountOfPartsByMimeType(string $mimeType) : int
Parameters
$mimeType : string
Return values
int

getFilename()

Returns a filename for the part if one is defined, or null otherwise.

public getFilename() : string
Return values
string

getHeader()

Returns the AbstractHeader object for the header with the given $name.

public getHeader(string $name, int $offset) : AbstractHeader

If the optional $offset is passed, and multiple headers exist with the same name, the one at the passed offset is returned.

Note that mime headers aren't case sensitive.

Parameters
$name : string
$offset : int
Return values
AbstractHeader

getHeaderParameter()

Returns a parameter of the header $header, given the parameter named $param.

public getHeaderParameter(string $header, string $param[, string $defaultValue = null ]) : string

Only headers of type \ZBateson\MailMimeParser\Header\ParameterHeader have parameters. Content-Type and Content-Disposition are examples of headers with parameters. "Charset" is a common parameter of Content-Type.

Parameters
$header : string
$param : string
$defaultValue : string = null
Return values
string

getHeaderValue()

Returns the string value for the header with the given $name.

public getHeaderValue(string $name[, string $defaultValue = null ]) : string

Note that mime headers aren't case sensitive.

Parameters
$name : string
$defaultValue : string = null
Return values
string

getPart()

Returns the part at the given 0-based index, or null if none is set.

public getPart(int $index[, PartFilter $filter = null ]) : MessagePart

Note that the first part returned is the current part itself. This is often desirable for queries with a PartFilter, e.g. looking for a MessagePart with a specific Content-Type that may be satisfied by the current part.

Parameters
$index : int
$filter : PartFilter = null
Return values
MessagePart

getPartByMimeType()

Returns the part associated with the passed mime type, at the passed index, if it exists.

public getPartByMimeType(string $mimeType, int $index) : MessagePart|null
Parameters
$mimeType : string
$index : int
Return values
MessagePart|null

getPartCount()

Returns the total number of parts in this and all children.

public getPartCount([PartFilter $filter = null ]) : int

Note that the current part is considered, so the minimum getPartCount is 1 without a filter.

Parameters
$filter : PartFilter = null
Return values
int

getRawHeaderIterator()

Returns an iterator to the headers in this collection. Each returned element is an array with its first element set to the header's name, and the second to its raw value:

public getRawHeaderIterator() : Iterator

[ 'Header-Name', 'Header Value' ]

Return values
Iterator

getRawHeaders()

Returns an array of all headers for the mime part with the first element holding the name, and the second its value.

public getRawHeaders() : array<string|int, array<string|int, string>>
Return values
array<string|int, array<string|int, string>>

getResourceHandle()

Rewrite me

public getResourceHandle() : resource
Return values
resource

the resource handle

getStream()

Write me

public getStream() : StreamInterface
Return values
StreamInterface

the resource handle

hasContent()

Returns true if there's a content stream associated with the part.

public hasContent() : bool
Return values
bool

isMime()

Returns true.

public isMime() : bool
Return values
bool

isMultiPart()

Returns true if this part's mime type is multipart/*

public isMultiPart() : bool
Return values
bool

isTextPart()

Returns true if this part's mime type is text/plain, text/html or if the Content-Type header defines a charset.

public isTextPart() : bool
Return values
bool

markAsChanged()

Marks the part as changed, forcing the part to be rewritten when saved.

public markAsChanged() : mixed

Normal operations to a MessagePart automatically mark the part as changed and markAsChanged() doesn't need to be called in those cases.

The function can be called to indicate an external change that requires rewriting this part, for instance changing a message from a non-mime message to a mime one, would require rewriting non-mime children to insure suitable headers are written.

Internally, the function discards the part's stream, forcing a stream to be created when calling getStream().

Return values
mixed

removeAllParts()

Removes all parts that are matched by the passed PartFilter.

public removeAllParts([PartFilter $filter = null ]) : mixed

Note: the current part will not be removed. Although the function naming matches getAllParts, which returns the current part, it also doesn't only remove direct children like getChildParts. Internally this function uses getAllParts but the current part is filtered out if returned.

Parameters
$filter : PartFilter = null
Return values
mixed

removeHeader()

Removes all headers from this part with the passed name.

public removeHeader(string $name) : mixed
Parameters
$name : string
Return values
mixed

removePart()

Removes the child part from this part and returns its position or null if it wasn't found.

public removePart(MessagePart $part) : int

Note that if the part is not a direct child of this part, the returned position is its index within its parent (calls removePart on its direct parent).

Parameters
$part : MessagePart
Return values
int

or null if not found

removeSingleHeader()

Removes a single header with the passed name (in cases where more than one may exist, and others should be preserved).

public removeSingleHeader(string $name, mixed $offset) : mixed
Parameters
$name : string
$offset : mixed
Return values
mixed

save()

Saves the message/part as to the passed resource handle.

public save(resource|StreamInterface $streamOrHandle) : mixed
Parameters
$streamOrHandle : resource|StreamInterface
Return values
mixed

setCharsetOverride()

Overrides the default character set used for reading content from content streams in cases where a user knows the source charset is not what is specified.

public setCharsetOverride(string $charsetOverride[, bool $onlyIfNoCharset = false ]) : mixed

If set, the returned value from MessagePart::getCharset is ignored.

Note that setting an override on a Message and calling getTextStream, getTextContent, getHtmlStream or getHtmlContent will not be applied to those sub-parts, unless the text/html part is the Message itself. Instead, Message:getTextPart() should be called, and setCharsetOverride called on the returned MessagePart.

Parameters
$charsetOverride : string
$onlyIfNoCharset : bool = false

if true, $charsetOverride is used only if getCharset returns null.

Return values
mixed

setContent()

Sets the content of the part to the passed resource.

public setContent(string|resource|StreamInterface $resource[, string $charset = MailMimeParser::DEFAULT_CHARSET ]) : mixed
Parameters
$resource : string|resource|StreamInterface
$charset : string = MailMimeParser::DEFAULT_CHARSET
Return values
mixed

setRawHeader()

Adds a header with the given $name and $value. An optional $offset may be passed, which will overwrite a header if one exists with the given name and offset. Otherwise a new header is added. The passed $offset may be ignored in that case if it doesn't represent the next insert position for the header with the passed name... instead it would be 'pushed' on at the next position.

public setRawHeader(string $name, string $value, int $offset) : mixed
$part = $myParentHeaderPart;
$part->setRawHeader('New-Header', 'value');
echo $part->getHeaderValue('New-Header');        // 'value'

$part->setRawHeader('New-Header', 'second', 4);
echo is_null($part->getHeader('New-Header', 4)); // '1' (true)
echo $part->getHeader('New-Header', 1)
     ->getValue();                               // 'second'

A new \ZBateson\MailMimeParser\Header\AbstractHeader object is created from the passed value. No processing on the passed string is performed, and so the passed name and value must be formatted correctly according to related RFCs. In particular, be careful to encode non-ascii data, to keep lines under 998 characters in length, and to follow any special formatting required for the type of header.

Parameters
$name : string
$value : string
$offset : int
Return values
mixed

getAllNonFilteredParts()

Returns all parts, including the current object, and all children below it (including children of children, etc...)

protected getAllNonFilteredParts() : array<string|int, MessagePart>
Return values
array<string|int, MessagePart>

onChange()

Called when operations change the content of the MessagePart.

protected onChange() : mixed

The function causes calls to getStream() to return a dynamic MessagePartStream instead of the read stream for this MessagePart and all parent MessageParts.

Return values
mixed

Search results