diff --git a/lib/private/mail.php b/lib/private/mail.php
index 9605290fe579154e475fd7010564088203eb7225..79f51609631ca11875d8c18f02d5564bd79ca9c4 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 5cc7f0f4676989eabc262e91e445907a6c367cb1..f02213f244615ecf5ce125e96086970eb1a64ff2 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 b5f47bbceabe88a41464da3ed6283b14f3b85744..88c2bee61428020263d8bc74709e2b9306e96e82 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 0000000000000000000000000000000000000000..a88a9d797ae7c405cbcc9a2a5195900a817c75e7
--- /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'),
+		);
+	}
+
+}