From 1b31abc4fc1d39b96ad6b5bda596e72ef1e49b09 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 16 Jul 2019 19:28:42 +0200 Subject: [PATCH] Small improvement --- .../eu/faircode/email/ConnectionHelper.java | 48 +++++++++++-------- app/src/main/java/eu/faircode/email/Core.java | 14 ++++-- .../eu/faircode/email/FragmentCompose.java | 10 ++-- 3 files changed, 43 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ConnectionHelper.java b/app/src/main/java/eu/faircode/email/ConnectionHelper.java index 7ff38cbae0..89b8429ce1 100644 --- a/app/src/main/java/eu/faircode/email/ConnectionHelper.java +++ b/app/src/main/java/eu/faircode/email/ConnectionHelper.java @@ -19,7 +19,6 @@ import com.sun.mail.imap.IMAPStore; import org.xbill.DNS.Lookup; import org.xbill.DNS.SimpleResolver; -import org.xbill.DNS.TextParseException; import org.xbill.DNS.Type; import java.net.InetAddress; @@ -33,7 +32,6 @@ import java.util.Map; import javax.mail.Address; import javax.mail.MessagingException; -import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; public class ConnectionHelper { @@ -318,25 +316,35 @@ public class ConnectionHelper { return dns.get(0).getHostAddress(); } - static void lookup(Address[] addresses, Context context) throws AddressException, TextParseException, UnknownHostException { + static boolean lookupMx(Address[] addresses, Context context) throws UnknownHostException { + boolean ok = true; + if (addresses != null) - for (Address address : addresses) { - String email = ((InternetAddress) address).getAddress(); - if (email == null || !email.contains("@")) - throw new AddressException(email); - - String domain = email.split("@")[1]; - Lookup lookup = new Lookup(domain, Type.MX); - SimpleResolver resolver = new SimpleResolver(ConnectionHelper.getDnsServer(context)); - lookup.setResolver(resolver); - Log.i("Lookup MX=" + domain + " @" + resolver.getAddress()); - - lookup.run(); - if (lookup.getResult() == Lookup.HOST_NOT_FOUND || - lookup.getResult() == Lookup.TYPE_NOT_FOUND) { - Log.i("Lookup MX=" + domain + " result=" + lookup.getErrorString()); - throw new IllegalArgumentException(context.getString(R.string.title_no_server, domain)); + for (Address address : addresses) + try { + String email = ((InternetAddress) address).getAddress(); + if (email == null || !email.contains("@")) + continue; + String domain = email.split("@")[1]; + Lookup lookup = new Lookup(domain, Type.MX); + SimpleResolver resolver = new SimpleResolver(ConnectionHelper.getDnsServer(context)); + lookup.setResolver(resolver); + Log.i("Lookup MX=" + domain + " @" + resolver.getAddress()); + + lookup.run(); + if (lookup.getResult() == Lookup.HOST_NOT_FOUND || + lookup.getResult() == Lookup.TYPE_NOT_FOUND) { + Log.i("Lookup MX=" + domain + " result=" + lookup.getErrorString()); + throw new UnknownHostException(context.getString(R.string.title_no_server, domain)); + } else if (lookup.getResult() != Lookup.SUCCESSFUL) + ok = false; + } catch (UnknownHostException ex) { + throw ex; + } catch (Throwable ex) { + Log.e(ex); + ok = false; } - } + + return ok; } } diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index c1af476760..d386a708fc 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -63,6 +63,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.SocketException; +import java.net.UnknownHostException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -1433,13 +1434,16 @@ class Core { boolean check_mx = prefs.getBoolean("check_mx", false); if (check_mx) try { - ConnectionHelper.lookup( + if (ConnectionHelper.lookupMx( message.reply == null || message.reply.length == 0 - ? message.from : message.reply, context); - message.mx = true; - } catch (Throwable ex) { - message.warning = ex.getMessage(); + ? message.from : message.reply, context)) + message.mx = true; + } catch (UnknownHostException ex) { message.mx = false; + message.warning = ex.getMessage(); + } catch (Throwable ex) { + Log.e(ex); + message.warning = Helper.formatThrowable(ex, false); } /* diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index a8ccbc4903..c23ae7425e 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -124,6 +124,7 @@ import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.net.UnknownHostException; import java.text.DateFormat; import java.util.ArrayList; import java.util.Arrays; @@ -2481,7 +2482,7 @@ public class FragmentCompose extends FragmentBase { for (InternetAddress address : ato) address.validate(); if (lookup_mx) - ConnectionHelper.lookup(ato, context); + ConnectionHelper.lookupMx(ato, context); } } catch (AddressException ex) { throw new AddressException(context.getString(R.string.title_address_parse_error, @@ -2495,7 +2496,7 @@ public class FragmentCompose extends FragmentBase { for (InternetAddress address : acc) address.validate(); if (lookup_mx) - ConnectionHelper.lookup(acc, context); + ConnectionHelper.lookupMx(acc, context); } } catch (AddressException ex) { throw new AddressException(context.getString(R.string.title_address_parse_error, @@ -2509,7 +2510,7 @@ public class FragmentCompose extends FragmentBase { for (InternetAddress address : abcc) address.validate(); if (lookup_mx) - ConnectionHelper.lookup(abcc, context); + ConnectionHelper.lookupMx(abcc, context); } } catch (AddressException ex) { throw new AddressException(context.getString(R.string.title_address_parse_error, @@ -2762,7 +2763,8 @@ public class FragmentCompose extends FragmentBase { protected void onException(Bundle args, Throwable ex) { if (ex instanceof MessageRemovedException) finish(); - else if (ex instanceof IllegalArgumentException || ex instanceof AddressException) + else if (ex instanceof IllegalArgumentException || + ex instanceof AddressException || ex instanceof UnknownHostException) Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show(); else Helper.unexpectedError(getFragmentManager(), ex);