diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 3745c0a864..49f7d8cf61 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -1132,13 +1132,13 @@ public class FragmentCompose extends FragmentBase { colEmail = cursor.getColumnIndex("email"); String name = cursor.getString(colName); - String email = MessageHelper.sanitizeEmail(cursor.getString(colEmail)); - if (name == null || !suggest_names) + String email = cursor.getString(colEmail); + + InternetAddress address = MessageHelper.buildAddress(email, name, suggest_names); + if (address == null) return email; - else { - Address address = new InternetAddress(email, name, StandardCharsets.UTF_8.name()); - return MessageHelper.formatAddressesCompose(new Address[]{address}); - } + + return MessageHelper.formatAddressesCompose(new Address[]{address}); } catch (Throwable ex) { Log.e(ex); return ex.toString(); @@ -3287,10 +3287,14 @@ public class FragmentCompose extends FragmentBase { int colEmail = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS); int colName = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); if (colEmail >= 0 && colName >= 0) { - String email = MessageHelper.sanitizeEmail(cursor.getString(colEmail)); + String email = cursor.getString(colEmail); String name = cursor.getString(colName); - args.putString("email", email); + InternetAddress selected = MessageHelper.buildAddress(email, name, suggest_names); + if (selected == null) + return null; + + args.putString("email", selected.getAddress()); try { db.beginTransaction(); @@ -3315,7 +3319,7 @@ public class FragmentCompose extends FragmentBase { if (address != null) list.addAll(Arrays.asList(address)); - list.add(new InternetAddress(email, suggest_names ? name : null, StandardCharsets.UTF_8.name())); + list.add(selected); if (requestCode == REQUEST_CONTACT_TO) draft.to = list.toArray(new Address[0]); diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 7710e35ec0..f4717ffac0 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -5242,19 +5242,27 @@ public class MessageHelper { .replaceAll("[^\\p{ASCII}]", ""); } - static String sanitizeEmail(String email) { - if (email == null) - return null; + static InternetAddress buildAddress(String email, String name, boolean suggest) { + try { + InternetAddress address = (email == null ? new InternetAddress() : new InternetAddress(email)); - if (email.contains("<") && email.contains(">")) - try { - InternetAddress address = new InternetAddress(email); - return address.getAddress(); - } catch (AddressException ex) { - Log.e(ex); + if (suggest && !TextUtils.isEmpty(name) && + TextUtils.isEmpty(address.getPersonal())) { + try { + address.setPersonal(name, StandardCharsets.UTF_8.name()); + } catch (UnsupportedEncodingException ex) { + Log.i(ex); + } } - return email; + if (TextUtils.isEmpty(address.getAddress()) && TextUtils.isEmpty(address.getAddress())) + return null; + + return address; + } catch (AddressException ex) { + Log.e(ex); + return null; + } } static String sanitizeName(String name) {