diff --git a/data/web/inc/functions.address_rewriting.inc.php b/data/web/inc/functions.address_rewriting.inc.php index 140ae47647..87b8827827 100644 --- a/data/web/inc/functions.address_rewriting.inc.php +++ b/data/web/inc/functions.address_rewriting.inc.php @@ -285,7 +285,13 @@ function recipient_map($_action, $_data = null, $attr = null) { ); return false; } - if (!filter_var($new_dest, FILTER_VALIDATE_EMAIL)) { + if (is_valid_domain_name($new_dest)) { + $new_dest_sane = '@' . idn_to_ascii($new_dest, 0, INTL_IDNA_VARIANT_UTS46); + } + elseif (filter_var($new_dest, FILTER_VALIDATE_EMAIL)) { + $new_dest_sane = $new_dest; + } + else { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_data, $_attr), @@ -308,7 +314,7 @@ function recipient_map($_action, $_data = null, $attr = null) { (:old_dest, :new_dest, :active)"); $stmt->execute(array( ':old_dest' => $old_dest_sane, - ':new_dest' => $new_dest, + ':new_dest' => $new_dest_sane, ':active' => $active )); $_SESSION['return'][] = array( @@ -351,7 +357,13 @@ function recipient_map($_action, $_data = null, $attr = null) { ); continue; } - if (!filter_var($new_dest, FILTER_VALIDATE_EMAIL)) { + if (is_valid_domain_name($new_dest)) { + $new_dest_sane = '@' . idn_to_ascii($new_dest, 0, INTL_IDNA_VARIANT_UTS46); + } + elseif (filter_var($new_dest, FILTER_VALIDATE_EMAIL)) { + $new_dest_sane = $new_dest; + } + else { $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_data, $_attr), @@ -378,7 +390,7 @@ function recipient_map($_action, $_data = null, $attr = null) { WHERE `id`= :id"); $stmt->execute(array( ':old_dest' => $old_dest_sane, - ':new_dest' => $new_dest, + ':new_dest' => $new_dest_sane, ':active' => $active, ':id' => $id ));