8000 feature #45376 [Mime] Fix embed logic for background attributes (flack) · symfony/symfony@f12943d · GitHub
[go: up one dir, main page]

Skip to content

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit f12943d

Browse files
committed
feature #45376 [Mime] Fix embed logic for background attributes (flack)
This PR was submitted for the 4.4 branch but it was squashed and merged into the 6.1 branch instead. Discussion ---------- [Mime] Fix embed logic for background attributes | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | Fix #42921 | License | MIT | Doc PR | As suggested by @fabpot here #43255 (comment), this is the most minimal fix for the linked issue. I guess the same problem can happen if you use e.g. ```html <div style="background-image:url(cid:test.gif)"></div> ``` I have changed it so that there is now an array of regexes to look for embedded images, so at least code for the `background-image` case (or others that might be found later on) can easily be added. Commits ------- d4a87d2 [Mime] Fix embed logic for background attributes
2 parents 6e3d5c1 + d4a87d2 commit f12943d

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

src/Symfony/Component/Mime/Email.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -460,8 +460,17 @@ private function prepareParts(): ?array
460460
if (null !== $this->html) {
461461
$htmlPart = new TextPart($html, $this->htmlCharset, 'html');
462462
$html = $htmlPart->getBody();
463-
preg_match_all('(<img\s+[^>]*src\s*=\s*(?:([\'"])cid:([^"]+)\\1|cid:([^>\s]+)))i', $html, $names);
464-
$names = array_filter(array_unique(array_merge($names[2], $names[3])));
463+
464+
$regexes = [
465+
'<img\s+[^>]*src\s*=\s*(?:([\'"])cid:([^"]+)\\1|cid:([^>\s]+))',
466+
'<\w+\s+[^>]*background\s*=\s*(?:([\'"])cid:([^"]+)\\1|cid:([^>\s]+))',
467+
];
468+
$tmpMatches = [];
469+
foreach ($regexes as $regex) {
470+
preg_match_all('/'.$regex.'/i', $html, $tmpMatches);
471+
$names = array_merge($names, $tmpMatches[2], $tmpMatches[3]);
472+
}
473+
$names = array_filter(array_unique($names));
465474
}
466475

467476
$attachmentParts = $inlineParts = [];

src/Symfony/Component/Mime/Tests/EmailTest.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,14 @@ public function testGenerateBody()
351351
// 2 parts only, not 3 (text + embedded image once)
352352
$this->assertCount(2, $parts = $body->getParts());
353353
$this->assertStringMatchesFormat('html content <img src=3D"cid:%s@symfony">', $parts[0]->bodyToString());
354+
355+
$e = (new Email())->from('me@example.com')->to('you@example.com');
356+
$e->html('<div background="cid:test.gif"></div>');
357+
$e->embed($image, 'test.gif');
358+
$body = $e->getBody();
359+
$this->assertInstanceOf(RelatedPart::class, $body);
360+
$this->assertCount(2, $parts = $body->getParts());
361+
$this->assertStringMatchesFormat('<div background=3D"cid:%s@symfony"></div>', $parts[0]->bodyToString());
354362
}
355363

356364
public function testAttachments()

0 commit comments

Comments
 (0)
0