Small improvement

pull/159/head
M66B 5 years ago
parent 69e375b542
commit 1b31abc4fc

@ -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;
}
}

@ -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);
}
/*

@ -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);

Loading…
Cancel
Save