From 720e10a44d1ded8a7d3bfad91a30727482a53481 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 7 Apr 2019 09:37:57 +0200 Subject: [PATCH] Parse email address again after double decoding --- .../java/eu/faircode/email/MessageHelper.java | 37 ++++++++++++------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 4ce9c9db65..99bc579b43 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -470,12 +470,7 @@ public class MessageHelper { if (address == null || address.length == 0) return null; - try { - address[0].setPersonal(decodeMime(address[0].getPersonal())); - address[0].setAddress(decodeMime(address[0].getAddress())); - } catch (UnsupportedEncodingException ex) { - Log.w(ex); - } + fix(address[0]); return address[0]; } @@ -507,17 +502,31 @@ public class MessageHelper { private static Address[] fix(Address[] addresses) { if (addresses != null) for (int i = 0; i < addresses.length; i++) - try { - ((InternetAddress) addresses[i]).setPersonal( - decodeMime(((InternetAddress) addresses[i]).getPersonal())); - ((InternetAddress) addresses[i]).setAddress( - decodeMime(((InternetAddress) addresses[i]).getAddress())); - } catch (UnsupportedEncodingException ex) { - Log.w(ex); - } + fix((InternetAddress) addresses[i]); return addresses; } + private static void fix(InternetAddress address) { + try { + String email = decodeMime(address.getAddress()); + String personal = decodeMime(address.getPersonal()); + try { + InternetAddress[] a = InternetAddress.parse(email); + if (a.length < 1) + throw new AddressException("empty"); + String p = a[0].getPersonal(); + address.setAddress(a[0].getAddress()); + address.setPersonal(TextUtils.isEmpty(personal) ? p : personal + (p == null ? "" : " " + p)); + } catch (AddressException ex) { + Log.w(ex); + address.setAddress(email); + address.setPersonal(personal); + } + } catch (UnsupportedEncodingException ex) { + Log.w(ex); + } + } + String getSubject() throws MessagingException { String subject = imessage.getSubject(); return decodeMime(subject);