aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/Mail/Message.php18
-rw-r--r--tests/lib/Mail/MessageTest.php17
2 files changed, 25 insertions, 10 deletions
diff --git a/lib/private/Mail/Message.php b/lib/private/Mail/Message.php
index c1b08b4e231..8b94f44ddba 100644
--- a/lib/private/Mail/Message.php
+++ b/lib/private/Mail/Message.php
@@ -78,14 +78,18 @@ class Message implements IMessage {
$convertedAddresses = [];
foreach ($addresses as $email => $readableName) {
- if (!is_numeric($email)) {
- [$name, $domain] = explode('@', $email, 2);
- $domain = idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46);
- $convertedAddresses[$name.'@'.$domain] = $readableName;
+ $parsableEmail = is_numeric($email) ? $readableName : $email;
+ if (strpos($parsableEmail, '@') === false) {
+ $convertedAddresses[$parsableEmail] = $readableName;
+ continue;
+ }
+
+ [$name, $domain] = explode('@', $parsableEmail, 2);
+ $domain = idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46);
+ if (is_numeric($email)) {
+ $convertedAddresses[] = $name . '@' . $domain;
} else {
- [$name, $domain] = explode('@', $readableName, 2);
- $domain = idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46);
- $convertedAddresses[$email] = $name.'@'.$domain;
+ $convertedAddresses[$name . '@' . $domain] = $readableName;
}
}
diff --git a/tests/lib/Mail/MessageTest.php b/tests/lib/Mail/MessageTest.php
index f30630824fc..bec70d1c78a 100644
--- a/tests/lib/Mail/MessageTest.php
+++ b/tests/lib/Mail/MessageTest.php
@@ -102,12 +102,23 @@ class MessageTest extends TestCase {
$this->assertSame('lukas@owncloud.com', $this->message->getReplyTo());
}
- public function testSetTo() {
+ /** @dataProvider dataSetTo */
+ public function testSetTo(array $to, array $expected) {
$this->swiftMessage
->expects($this->once())
->method('setTo')
- ->with(['lukas@owncloud.com']);
- $this->message->setTo(['lukas@owncloud.com']);
+ ->with($expected);
+ $this->message->setTo($to);
+ }
+
+ public function dataSetTo(): array {
+ return [
+ [['robot@example.com'], ['robot@example.com']],
+ [['robot'], ['robot' => 'robot']],
+ [['robot' => 'robot display name'], ['robot' => 'robot display name']],
+ [['example@🤖.com'], ['example@xn--yp9h.com']],
+ [['example@🤖.com' => 'A robot'], ['example@xn--yp9h.com' => 'A robot']],
+ ];
}
/**