Files
itflow/plugins/vendor/zbateson/mail-mime-parser/src/Header/DateHeader.php
johnnyq 2204bd52f4 Rewrite email parser using ImapEngine, harden processing loop
Replace webklex/php-imap with directorytree/imapengine in the ticket
email parser. ImapEngine is pure PHP over sockets.

Parser improvements:
- Wrap per-message processing in try/catch so one malformed email
  can't abort the run; failures are flagged and logged with UID
- Query unseen + unflagged so previously-failed (flagged) messages
  are no longer re-processed on every cron run
- Skip vacation/auto-responder emails (RFC 3834) to prevent mail
  loops with the ticket auto-reply
- Cap messages per run (50) and attachment size (15MB); inline
  images over 2MB are stored as attachments instead of base64-embedded
  in ticket details
- Atomic lock file creation
- preg_quote() the ticket prefix in subject matching
- Dedupe CC watchers and exclude the sender
- Map webklex 'tls' encryption setting to STARTTLS for compatibility

NDR/DSN parsing now walks MIME parts via the underlying
zbateson parser instead of relying on attachment extraction.
2026-06-12 16:56:39 -04:00

68 lines
1.8 KiB
PHP

<?php
/**
* This file is part of the ZBateson\MailMimeParser project.
*
* @license http://opensource.org/licenses/bsd-license.php BSD
*/
namespace ZBateson\MailMimeParser\Header;
use DateTime;
use DateTimeImmutable;
use Psr\Log\LoggerInterface;
use ZBateson\MailMimeParser\Header\Consumer\DateConsumerService;
use ZBateson\MailMimeParser\Header\Part\DatePart;
use ZBateson\MailMimeParser\MailMimeParser;
/**
* Reads a DatePart value header in either RFC 2822 or RFC 822 format.
*
* @author Zaahid Bateson
*/
class DateHeader extends AbstractHeader
{
public function __construct(
string $name,
string $value,
?LoggerInterface $logger = null,
?DateConsumerService $consumerService = null
) {
$di = MailMimeParser::getGlobalContainer();
parent::__construct(
$logger ?? $di->get(LoggerInterface::class),
$consumerService ?? $di->get(DateConsumerService::class),
$name,
$value
);
}
/**
* Convenience method returning the part's DateTime object, or null if the
* date could not be parsed.
*
* @return ?DateTime The parsed DateTime object.
*/
public function getDateTime() : ?DateTime
{
if (!empty($this->parts) && $this->parts[0] instanceof DatePart) {
return $this->parts[0]->getDateTime();
}
return null;
}
/**
* Returns a DateTimeImmutable for the part's DateTime object, or null if
* the date could not be parsed.
*
* @return ?DateTimeImmutable The parsed DateTimeImmutable object.
*/
public function getDateTimeImmutable() : ?DateTimeImmutable
{
$dateTime = $this->getDateTime();
if ($dateTime !== null) {
return DateTimeImmutable::createFromMutable($dateTime);
}
return null;
}
}