MailMimeParser 4.0

ParserMimePartProxy extends ParserPartProxy
in package

A bi-directional parser-to-part proxy for MimeParser and IMimeParts.

Tags
author

Zaahid Bateson

Table of Contents

$allChildrenParsed  : bool
$children  : array<string|int, mixed>
$childrenStack  : array<string|int, mixed>
$endBoundaryFound  : bool
$lastAddedChild  : ParserPartProxy|null
$parentBoundaryFound  : bool
$parser  : IParserService
$partBuilder  : PartBuilder
$headerContainer  : PartHeaderContainer
$liveBoundaryLines  : array<string|int, mixed>
$messageHandle  : mixed
$messageStream  : StreamInterface|null
$mimeBoundary  : string|null
$mimeBoundaryQueried  : bool
$ownBoundaryLines  : array<string|int, mixed>|null
$parent  : ParserPartProxy|null
$part  : IMessagePart
$root  : ParserMimePartProxy|null
$streamContentEndPos  : int|null
$streamContentStartPos  : int|null
$streamPartEndPos  : int
$streamPartStartPos  : int
$topParent  : ParserMimePartProxy|null
__construct()  : mixed
__destruct()  : mixed
addError()  : ParserPartProxy
getAddedChildAt()  : ParserPartProxy|null
Returns the added child at the provided index, useful for looking at previously parsed children.
getContentType()  : ParameterHeader|null
Returns a ParameterHeader representing the parsed Content-Type header for this part.
getHeaderContainer()  : PartHeaderContainer
Returns this part's PartHeaderContainer.
getLastAddedChild()  : ParserPartProxy|null
Returns the last part that was added.
getLastLineEndingLength()  : int
Returns the length of the last line ending read by MimeParser (e.g. 2 for '\r\n', or 1 for '\n').
getMessageResourceHandle()  : resource
Returns the resource handle for a the message's stream, getting it from the parent part if this is a child part.
getMessageResourceHandlePos()  : int
Shortcut for calling ftell($partBuilder->getMessageResourceHandle()).
getMimeBoundary()  : string|null
Returns the parsed boundary parameter of the Content-Type header if set for a multipart message part.
getParent()  : ParserPartProxy|null
The ParserPartProxy parent of this PartBuilder.
getPart()  : IMessagePart
Returns the IMessagePart associated with this proxy.
getPartCount()  : int
Returns the number of parts created so far while parsing the message this part belongs to.
getStream()  : StreamInterface
Returns the raw message StreamInterface for a message, getting it from the parent part if this is a child part.
getStreamContentLength()  : int
Returns the length of this part's content stream.
getStreamContentStartPos()  : int|null
Returns the byte offset start position of the content of this part within the main raw message stream, or null if not set.
getStreamPartLength()  : int
Returns the number of raw bytes this part has.
getStreamPartStartPos()  : int
Returns the byte offset start position for this part within the message stream.
incrementPartCount()  : static
Increments the number of parts created while parsing the message this part belongs to.
isContentParsed()  : bool
Returns true if the byte offset positions for this part's content have been set.
isEndBoundaryFound()  : bool
Returns true if an end boundary was found for this part.
isMime()  : bool
Returns true if this part, or any parent, have a Content-Type or MIME-Version header set.
isParentBoundaryFound()  : bool
Returns true if the parser passed an input line to setEndBoundary that matches a parent's mime boundary, and the following input belongs to a new part under its parent.
parseAll()  : static
Parses all content and children for this part.
parseContent()  : static
Requests the parser to parse this part's content, and call setStreamContentStartPos/EndPos to setup this part's boundaries within the main message's raw stream.
popNextChild()  : IMessagePart|null
Returns the next child part if one exists, popping it from the internal 'stack' of children, attempting to parse a new one if the stack is empty, and returning null if there are no more children.
setEndBoundaryFound()  : bool
Returns true if the passed $line of read input matches this part's mime boundary, or any of its parent's mime boundaries for a multipart message.
setEof()  : static
Called once EOF is reached while reading content. The method sets the flag used by isParentBoundaryFound() to true on this part and all parent parts.
setLastLineEndingLength()  : static
Sets the length of the last line ending read by MimeParser (e.g. 2 for '\r\n', or 1 for '\n').
setPart()  : static
Sets the associated part.
setStreamContentStartPos()  : static
Sets the byte offset start position of the content in the raw message stream.
setStreamPartAndContentEndPos()  : static
Overridden to set a 0-length content length, and a stream end pos of -2 if the passed end pos is before the start pos (can happen if a mime end boundary doesn't have an empty line before the next parent start boundary).
setStreamPartEndPos()  : static
Sets the byte offset end position of the part in the raw message stream, and also calls its parent's setParentStreamPartEndPos to expand to parent PartBuilders.
setStreamPartStartPos()  : static
Sets the byte offset start position of the part in the raw message stream.
ensureLastChildParsed()  : static
Ensures that the last child added to this part is fully parsed (content and children).
parseNextChild()  : static
Parses the next child of this part and adds it to the 'stack' of children.
getOwnBoundaryLines()  : array<string|int, string>
Returns this part's boundary lines, registering them as live in the root part on first use.
getRoot()  : ParserMimePartProxy
getTopParent()  : ParserMimePartProxy
Returns the topmost ancestor of this part, normally the ParserMessageProxy, which is what stores the last line ending length.
releaseBoundaryLines()  : void
Called once this part is finished parsing, so its boundary lines no longer count as live.

Properties

$allChildrenParsed

protected bool $allChildrenParsed = false

true once all children of this part have been parsed.

$children

protected array<string|int, mixed> $children = []

Array of all parsed children.

$childrenStack

protected array<string|int, mixed> $childrenStack = []

Parsed children used as a 'first-in-first-out' stack as children are parsed.

$endBoundaryFound

protected bool $endBoundaryFound = false

set to true once the end boundary of the currently-parsed part is found.

$parentBoundaryFound

protected bool $parentBoundaryFound = false

set to true once a boundary belonging to this parent's part is found.

$liveBoundaryLines

private array<string|int, mixed> $liveBoundaryLines = []

used on the root part only: the boundary lines of every part still being parsed, mapped to how many such parts own them, so a body line matching none of them is rejected without walking the parent chain.

$messageHandle

private mixed $messageHandle = null

the raw message input stream handle constructed from $messageStream or null for a child part

$messageStream

private StreamInterface|null $messageStream = null

the raw message input stream for a message, or null for a child part.

$mimeBoundary

private string|null $mimeBoundary = null

NULL if the current part does not have a boundary, and otherwise contains the value of the boundary parameter of the content-type header if the part contains one.

$mimeBoundaryQueried

private bool $mimeBoundaryQueried = false

FALSE if not queried for in the content-type header of this part and set in $mimeBoundary.

$ownBoundaryLines

private array<string|int, mixed>|null $ownBoundaryLines = null

this part's own boundary lines ('--boundary' and '--boundary--'), empty if it has no boundary, null until first needed. Registered in the root part's $liveBoundaryLines while this part is being parsed.

$parent

private ParserPartProxy|null $parent = null

The parent proxy part if one is set, or null if the part being built doesn't have a parent.

$streamContentEndPos

private int|null $streamContentEndPos = null

The offset read end position in the message's stream for the end of this part's content (body).

$streamContentStartPos

private int|null $streamContentStartPos = null

The offset read start position in the message's stream for the beginning of this part's content (body).

$streamPartEndPos

private int $streamPartEndPos

The offset read end position for this part. If the part is a multipart mime part, the end position is after all of this parts children.

$streamPartStartPos

private int $streamPartStartPos

The offset read start position for this part (beginning of headers) in the message's stream.

Methods

__destruct()

public __destruct() : mixed
Return values
mixed —

getAddedChildAt()

Returns the added child at the provided index, useful for looking at previously parsed children.

public getAddedChildAt(int $index) : ParserPartProxy|null
Parameters
$index : int
Return values
ParserPartProxy|null —

getLastLineEndingLength()

Returns the length of the last line ending read by MimeParser (e.g. 2 for '\r\n', or 1 for '\n').

public getLastLineEndingLength() : int

The line ending may not belong specifically to this part, so ParserMimePartProxy simply calls getLastLineEndingLength on its topmost parent, a ParserMessageProxy which actually keeps the length and returns it.

Return values
int —

the length of the last line ending read

getMessageResourceHandle()

Returns the resource handle for a the message's stream, getting it from the parent part if this is a child part.

public getMessageResourceHandle() : resource
Return values
resource —

getMessageResourceHandlePos()

Shortcut for calling ftell($partBuilder->getMessageResourceHandle()).

public getMessageResourceHandlePos() : int
Return values
int —

getMimeBoundary()

Returns the parsed boundary parameter of the Content-Type header if set for a multipart message part.

public getMimeBoundary() : string|null
Return values
string|null —

getPartCount()

Returns the number of parts created so far while parsing the message this part belongs to.

public getPartCount() : int

The count is message-wide, so ParserMimePartProxy simply calls getPartCount() on its parent, which must eventually reach a ParserMessageProxy which actually keeps the count and returns it.

Return values
int —

the number of parts created for this message so far

getStream()

Returns the raw message StreamInterface for a message, getting it from the parent part if this is a child part.

public getStream() : StreamInterface
Return values
StreamInterface —

getStreamContentLength()

Returns the length of this part's content stream.

public getStreamContentLength() : int

This method does not perform checks on whether the start pos and end pos of this part's content have been set, and so could cause errors if called before being set and are still null.

Return values
int —

getStreamContentStartPos()

Returns the byte offset start position of the content of this part within the main raw message stream, or null if not set.

public getStreamContentStartPos() : int|null
Return values
int|null —

getStreamPartLength()

Returns the number of raw bytes this part has.

public getStreamPartLength() : int

This method does not perform checks on whether the start pos and end pos of this part have been set, and so could cause errors if called before being set and are still null.

Return values
int —

getStreamPartStartPos()

Returns the byte offset start position for this part within the message stream.

public getStreamPartStartPos() : int
Return values
int —

incrementPartCount()

Increments the number of parts created while parsing the message this part belongs to.

public incrementPartCount() : static

The count is message-wide, so ParserMimePartProxy simply calls incrementPartCount() on its parent, which must eventually reach a ParserMessageProxy which actually stores the count.

Return values
static —

isContentParsed()

Returns true if the byte offset positions for this part's content have been set.

public isContentParsed() : bool
Return values
bool —

true if set.

isEndBoundaryFound()

Returns true if an end boundary was found for this part.

public isEndBoundaryFound() : bool
Return values
bool —

isMime()

Returns true if this part, or any parent, have a Content-Type or MIME-Version header set.

public isMime() : bool
Return values
bool —

true if it's a mime message or child of a mime message.

isParentBoundaryFound()

Returns true if the parser passed an input line to setEndBoundary that matches a parent's mime boundary, and the following input belongs to a new part under its parent.

public isParentBoundaryFound() : bool
Return values
bool —

parseAll()

Parses all content and children for this part.

public parseAll() : static
Return values
static —

parseContent()

Requests the parser to parse this part's content, and call setStreamContentStartPos/EndPos to setup this part's boundaries within the main message's raw stream.

public parseContent() : static

The method first checks to see if the content has already been parsed, and is safe to call multiple times.

Return values
static —

popNextChild()

Returns the next child part if one exists, popping it from the internal 'stack' of children, attempting to parse a new one if the stack is empty, and returning null if there are no more children.

public popNextChild() : IMessagePart|null
Return values
IMessagePart|null —

the child part.

setEndBoundaryFound()

Returns true if the passed $line of read input matches this part's mime boundary, or any of its parent's mime boundaries for a multipart message.

public setEndBoundaryFound(string $line) : bool

If the passed $line is the ending boundary for the current part, $this->isEndBoundaryFound will return true after.

Parameters
$line : string
Return values
bool —

setEof()

Called once EOF is reached while reading content. The method sets the flag used by isParentBoundaryFound() to true on this part and all parent parts.

public setEof() : static
Return values
static —

setLastLineEndingLength()

Sets the length of the last line ending read by MimeParser (e.g. 2 for '\r\n', or 1 for '\n').

public setLastLineEndingLength(int $length) : static

The line ending may not belong specifically to this part, so ParserMimePartProxy simply calls setLastLineEndingLength on its topmost parent, a ParserMessageProxy which actually stores the length.

Parameters
$length : int
Return values
static —

setStreamContentStartPos()

Sets the byte offset start position of the content in the raw message stream.

public setStreamContentStartPos(int $streamContentStartPos) : static
Parameters
$streamContentStartPos : int
Return values
static —

setStreamPartAndContentEndPos()

Overridden to set a 0-length content length, and a stream end pos of -2 if the passed end pos is before the start pos (can happen if a mime end boundary doesn't have an empty line before the next parent start boundary).

public setStreamPartAndContentEndPos(int $streamContentEndPos) : static
Parameters
$streamContentEndPos : int
Return values
static —

setStreamPartEndPos()

Sets the byte offset end position of the part in the raw message stream, and also calls its parent's setParentStreamPartEndPos to expand to parent PartBuilders.

public setStreamPartEndPos(int $streamPartEndPos) : static
Parameters
$streamPartEndPos : int
Return values
static —

setStreamPartStartPos()

Sets the byte offset start position of the part in the raw message stream.

public setStreamPartStartPos(int $streamPartStartPos) : static
Parameters
$streamPartStartPos : int
Return values
static —

ensureLastChildParsed()

Ensures that the last child added to this part is fully parsed (content and children).

protected ensureLastChildParsed() : static
Return values
static —

parseNextChild()

Parses the next child of this part and adds it to the 'stack' of children.

protected parseNextChild() : static
Return values
static —

getOwnBoundaryLines()

Returns this part's boundary lines, registering them as live in the root part on first use.

private getOwnBoundaryLines() : array<string|int, string>
Return values
array<string|int, string> —

releaseBoundaryLines()

Called once this part is finished parsing, so its boundary lines no longer count as live.

private releaseBoundaryLines() : void
Return values
void —

Search results