public function match(array $criterias)
{
foreach ($criterias as $type => $value) {
switch ($type) {
case self::FROM_CRITERIA:
if (!$this->getSender()->match($value)) {
return false;
}
break;
case self::SUBJECT_CRITERIA:
if (false === strpos($this->getSubject(), $value)) {
return false;
}
break;
case self::TO_CRITERIA:
$foundTo = false;
foreach ($this->getRecipients() as $recipient) {
if ($recipient->match($value)) {
$foundTo = true;
break;
}
}
if (!$foundTo) {
return false;
}
break;
case self::CONTAINS_CRITERIA:
if (false === strpos($this->getContent(), $value)) {
return false;
}
break;
case self::FORMAT_CRITERIA:
if (!$this->hasFormat($value)) {
return false;
}
break;
case self::ATTACHMENTS_CRITERIA:
if (!is_bool($value)) {
throw new \InvalidArgumentException(sprintf('Expected a boolean, got a "%s".', gettype($value)));
}
if ($value != $this->hasAttachments()) {
return false;
}
break;
default:
throw new \InvalidArgumentException(sprintf('Unexpected type of criteria: "%s".', $type));
}
}
return true;
}