Skip to content

Commit

Permalink
bug #33216 [Mime] Trim and remove line breaks from NamedAddress name …
Browse files Browse the repository at this point in the history
…arg (maldoinc)

This PR was squashed before being merged into the 4.3 branch (closes #33216).

Discussion
----------

[Mime] Trim and remove line breaks from NamedAddress name arg

| Q             | A
| ------------- | ---
| Branch?       | 4.3
| Bug fix?      | YES
| New feature?  | NO
| BC breaks?    | NO     <!-- see https://symfony.com/bc -->
| Deprecations? | NO <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tests pass?   | YES    <!-- please add some, will be required by reviewers -->
| Fixed tickets | N/A   <!-- #-prefixed issue number(s), if any -->
| License       | MIT
| Doc PR        | N/A

This patch trims the name argument of named address in order to avoid some cases where the name is a non-empty input consisting of whitespace and line breaks which would lead to forming of addresses such as `" " <mail@example.org>` <sup>1</sup>

---

In a large Symfony codebase that deals with sending large volumes of email we encountered an issue after the Mailer was changed from PHPMailer to the Symfony Mailer component.

The issue: Some emails would not render correctly as either plaintext or html but instead the original email source with headers and quoted-printable content would render in clients such as MS Outlook 2003, later versions of Outlook and other clients do not seem affected.

After some investigation we found that the error came from a line that looked like this: `$message->addTo(new NamedAddress($contact->getEmailCanonical(), $contact->getFullName()))`.

The `getFullName` method simply concated the first/last name with a space in between. For contacts without either, this resulted in representation 1. This causes MS Outlook 2003 (potentially Outlook 2000 as well but this was not tested) to malfunction and completely fail to render the email.

This patch aims to fix the aforementioned issue.

Commits
-------

e491e3a [Mime] Trim and remove line breaks from NamedAddress name arg
  • Loading branch information
fabpot committed Aug 21, 2019
2 parents 7a0787c + e491e3a commit 58439e3
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 4 deletions.
6 changes: 3 additions & 3 deletions src/Symfony/Component/Mime/Address.php
Expand Up @@ -40,11 +40,11 @@ public function __construct(string $address)
self::$validator = new EmailValidator();
}

if (!self::$validator->isValid($address, new RFCValidation())) {
$this->address = trim($address);

if (!self::$validator->isValid($this->address, new RFCValidation())) {
throw new RfcComplianceException(sprintf('Email "%s" does not comply with addr-spec of RFC 2822.', $address));
}

$this->address = $address;
}

public function getAddress(): string
Expand Down
2 changes: 1 addition & 1 deletion src/Symfony/Component/Mime/NamedAddress.php
Expand Up @@ -24,7 +24,7 @@ public function __construct(string $address, string $name)
{
parent::__construct($address);

$this->name = $name;
$this->name = trim(str_replace(["\n", "\r"], '', $name));
}

public function getName(): string
Expand Down
15 changes: 15 additions & 0 deletions src/Symfony/Component/Mime/Tests/NamedAddressTest.php
Expand Up @@ -24,4 +24,19 @@ public function testConstructor()
$this->assertEquals('Fabien <fabien@xn--symfon-nwa.com>', $a->toString());
$this->assertEquals('fabien@xn--symfon-nwa.com', $a->getEncodedAddress());
}

public function nameEmptyDataProvider(): array
{
return [[''], [' '], [" \r\n "]];
}

/**
* @dataProvider nameEmptyDataProvider
*/
public function testNameEmpty(string $name)
{
$mail = 'mail@example.org';

$this->assertSame($mail, (new NamedAddress($mail, $name))->getEncodedNamedAddress());
}
}

0 comments on commit 58439e3

Please sign in to comment.