diff --git a/app/src/main/java/eu/faircode/email/FragmentIdentity.java b/app/src/main/java/eu/faircode/email/FragmentIdentity.java index f68b70ebfc..1290407e8b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentIdentity.java +++ b/app/src/main/java/eu/faircode/email/FragmentIdentity.java @@ -70,6 +70,7 @@ import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.regex.Pattern; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; @@ -757,8 +758,11 @@ public class FragmentIdentity extends FragmentBase { // throw new IllegalArgumentException(context.getString(R.string.title_no_name)); if (TextUtils.isEmpty(email) && !should) throw new IllegalArgumentException(context.getString(R.string.title_no_email)); - if (!Helper.EMAIL_ADDRESS.matcher(email).matches() && !should) + + Pattern pattern = (unicode ? Helper.EMAIL_ADDRESS_UNICODE : Helper.EMAIL_ADDRESS); + if (!pattern.matcher(email).matches() && !should) throw new IllegalArgumentException(context.getString(R.string.title_email_invalid, email)); + if (TextUtils.isEmpty(host) && !should) throw new IllegalArgumentException(context.getString(R.string.title_no_host)); if (TextUtils.isEmpty(port)) diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index 4047a88be2..f2a0613360 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -192,8 +192,7 @@ public class Helper { private static final String[] ROMAN_10 = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; private static final String[] ROMAN_1 = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; - static final Pattern EMAIL_ADDRESS - = Pattern.compile( + static final Pattern EMAIL_ADDRESS = Pattern.compile( "[\\S]{1,256}" + "\\@" + "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" + @@ -203,6 +202,14 @@ public class Helper { ")+" ); + static final Pattern EMAIL_ADDRESS_UNICODE = Pattern.compile( + "([\\p{L}\\_\\.\\-\\d]+)" + + "@" + + "([\\p{L}\\-\\.\\d]+)" + + "((\\.(\\p{L}){2,63})+)" + // ^([\p{L}\_\.\-\d]+)@([\p{L}\-\.\d]+)((\.(\p{L}){2,63})+)$ + ); + private static final ExecutorService executor = getBackgroundExecutor(1, "helper"); static ExecutorService getBackgroundExecutor(int threads, final String name) {