diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2014-03-25 12:38:32 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2014-03-25 12:38:32 +0100 |
commit | 531c9564b3ec848f1869f57bccb41c6c529749b5 (patch) | |
tree | d3248e9a48766eba94c6fa0bdbd702800abf579d | |
parent | b92dad992f86caf3d30f5a10856c417c2a0a28bc (diff) | |
parent | 3eb5898f7b8f8b836b15dcb9c9a9213d7edbda96 (diff) | |
download | nextcloud-server-531c9564b3ec848f1869f57bccb41c6c529749b5.tar.gz nextcloud-server-531c9564b3ec848f1869f57bccb41c6c529749b5.zip |
Merge pull request #7861 from owncloud/idn-domains-support-on-emails-master
idn have to be converted before being used
-rw-r--r-- | lib/private/mail.php | 19 | ||||
-rw-r--r-- | lib/public/util.php | 2 | ||||
-rw-r--r-- | settings/ajax/lostpassword.php | 2 | ||||
-rw-r--r-- | tests/lib/mail.php | 30 |
4 files changed, 50 insertions, 3 deletions
diff --git a/lib/private/mail.php b/lib/private/mail.php index 9605290fe57..79f51609631 100644 --- a/lib/private/mail.php +++ b/lib/private/mail.php @@ -73,6 +73,7 @@ class OC_Mail { $mailo->FromName = $fromname;; $mailo->Sender = $fromaddress; try { + $toaddress = self::buildAsciiEmail($toaddress); $mailo->AddAddress($toaddress, $toname); if($ccaddress<>'') $mailo->AddCC($ccaddress, $ccname); @@ -124,7 +125,23 @@ class OC_Mail { * @param string $emailAddress a given email address to be validated * @return bool */ - public static function ValidateAddress($emailAddress) { + public static function validateAddress($emailAddress) { + $emailAddress = self::buildAsciiEmail($emailAddress); return PHPMailer::ValidateAddress($emailAddress); } + + /** + * IDN domains will be properly converted to ascii domains. + * + * @param string $emailAddress + * @return string + */ + public static function buildAsciiEmail($emailAddress) { + + list($name, $domain) = explode('@', $emailAddress, 2); + $domain = idn_to_ascii($domain); + + return "$name@$domain"; + } + } diff --git a/lib/public/util.php b/lib/public/util.php index 5cc7f0f4676..f02213f2446 100644 --- a/lib/public/util.php +++ b/lib/public/util.php @@ -266,7 +266,7 @@ class Util { $host_name = \OC_Config::getValue('mail_domain', $host_name); $defaultEmailAddress = $user_part.'@'.$host_name; - if (\OC_Mail::ValidateAddress($defaultEmailAddress)) { + if (\OC_Mail::validateAddress($defaultEmailAddress)) { return $defaultEmailAddress; } diff --git a/settings/ajax/lostpassword.php b/settings/ajax/lostpassword.php index b5f47bbceab..88c2bee6142 100644 --- a/settings/ajax/lostpassword.php +++ b/settings/ajax/lostpassword.php @@ -6,7 +6,7 @@ OCP\JSON::callCheck(); $l=OC_L10N::get('core'); // Get data -if( isset( $_POST['email'] ) && filter_var( $_POST['email'], FILTER_VALIDATE_EMAIL) ) { +if( isset( $_POST['email'] ) && OC_Mail::validateAddress($_POST['email']) ) { $email=trim($_POST['email']); OC_Preferences::setValue(OC_User::getUser(), 'settings', 'email', $email); OC_JSON::success(array("data" => array( "message" => $l->t("Email saved") ))); diff --git a/tests/lib/mail.php b/tests/lib/mail.php new file mode 100644 index 00000000000..a88a9d797ae --- /dev/null +++ b/tests/lib/mail.php @@ -0,0 +1,30 @@ +<?php +/** + * Copyright (c) 2014 Thomas Müller <deepdiver@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +class Test_Mail extends PHPUnit_Framework_TestCase { + + /** + * @dataProvider buildAsciiEmailProvider + * @param $expected + * @param $address + */ + public function testBuildAsciiEmail($expected, $address) { + $actual = \OC_Mail::buildAsciiEmail($address); + $this->assertEquals($expected, $actual); + } + + function buildAsciiEmailProvider() { + return array( + array('info@example.com', 'info@example.com'), + array('info@xn--cjr6vy5ejyai80u.com', 'info@國際化域名.com'), + array('info@xn--mller-kva.de', 'info@müller.de'), + array('info@xn--mller-kva.xn--mller-kva.de', 'info@müller.müller.de'), + ); + } + +} |