Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. Email.php

function Email::prepareParts

1 call to Email::prepareParts()
Email::generateBody in vendor/symfony/mime/Email.php
Generates an AbstractPart based on the raw body of a message.

File

vendor/symfony/mime/Email.php, line 463

Class

Email
@author Fabien Potencier <fabien@symfony.com>

Namespace

Symfony\Component\Mime

Code

private function prepareParts() : ?array {
    $names = [];
    $htmlPart = null;
    $html = $this->html;
    if (null !== $html) {
        $htmlPart = new TextPart($html, $this->htmlCharset, 'html');
        $html = $htmlPart->getBody();
        $regexes = [
            '<img\\s+[^>]*src\\s*=\\s*(?:([\'"])cid:(.+?)\\1|cid:([^>\\s]+))',
            '<\\w+\\s+[^>]*background\\s*=\\s*(?:([\'"])cid:(.+?)\\1|cid:([^>\\s]+))',
        ];
        $tmpMatches = [];
        foreach ($regexes as $regex) {
            preg_match_all('/' . $regex . '/i', $html, $tmpMatches);
            $names = array_merge($names, $tmpMatches[2], $tmpMatches[3]);
        }
        $names = array_filter(array_unique($names));
    }
    $otherParts = $relatedParts = [];
    foreach ($this->attachments as $part) {
        foreach ($names as $name) {
            if ($name !== $part->getName() && (!$part->hasContentId() || $name !== $part->getContentId())) {
                continue;
            }
            if (isset($relatedParts[$name])) {
                continue 2;
            }
            if ($name !== $part->getContentId()) {
                $html = str_replace('cid:' . $name, 'cid:' . $part->getContentId(), $html, $count);
            }
            $relatedParts[$name] = $part;
            $part->setName($part->getContentId())
                ->asInline();
            continue 2;
        }
        $otherParts[] = $part;
    }
    if (null !== $htmlPart) {
        $htmlPart = new TextPart($html, $this->htmlCharset, 'html');
    }
    return [
        $htmlPart,
        $otherParts,
        array_values($relatedParts),
    ];
}
RSS feed
Powered by Drupal