summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2014-03-25 12:38:32 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2014-03-25 12:38:32 +0100
commit531c9564b3ec848f1869f57bccb41c6c529749b5 (patch)
treed3248e9a48766eba94c6fa0bdbd702800abf579d
parentb92dad992f86caf3d30f5a10856c417c2a0a28bc (diff)
parent3eb5898f7b8f8b836b15dcb9c9a9213d7edbda96 (diff)
downloadnextcloud-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.php19
-rw-r--r--lib/public/util.php2
-rw-r--r--settings/ajax/lostpassword.php2
-rw-r--r--tests/lib/mail.php30
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'),
+ );
+ }
+
+}