Fallback to connecting to IP addresses when insecure is enabled

pull/160/head
M66B 5 years ago
parent 5a38cf523a
commit b7d2406cad

@ -7,19 +7,13 @@ import com.bugsnag.android.Bugsnag;
import com.sun.mail.imap.IMAPStore; import com.sun.mail.imap.IMAPStore;
import com.sun.mail.smtp.SMTPTransport; import com.sun.mail.smtp.SMTPTransport;
import com.sun.mail.util.MailConnectException; import com.sun.mail.util.MailConnectException;
import com.sun.mail.util.SocketConnectException;
import java.net.Inet4Address; import java.net.Inet4Address;
import java.net.Inet6Address; import java.net.Inet6Address;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
@ -31,6 +25,7 @@ import javax.mail.Session;
public class MailService implements AutoCloseable { public class MailService implements AutoCloseable {
private Context context; private Context context;
private String protocol; private String protocol;
private boolean insecure;
private boolean debug; private boolean debug;
private Properties properties; private Properties properties;
private Session isession; private Session isession;
@ -50,6 +45,7 @@ public class MailService implements AutoCloseable {
MailService(Context context, String protocol, String realm, boolean insecure, boolean debug) throws NoSuchProviderException { MailService(Context context, String protocol, String realm, boolean insecure, boolean debug) throws NoSuchProviderException {
this.context = context.getApplicationContext(); this.context = context.getApplicationContext();
this.protocol = protocol; this.protocol = protocol;
this.insecure = insecure;
this.debug = debug; this.debug = debug;
this.properties = MessageHelper.getSessionProperties(); this.properties = MessageHelper.getSessionProperties();
@ -149,48 +145,22 @@ public class MailService implements AutoCloseable {
public void connect(String host, int port, String user, String password) throws MessagingException { public void connect(String host, int port, String user, String password) throws MessagingException {
try { try {
if (BuildConfig.DEBUG) //if (BuildConfig.DEBUG)
throw new MailConnectException(new SocketConnectException("Debug", new Exception(), host, port, 0)); // throw new MailConnectException(new SocketConnectException("Debug", new Exception(), host, port, 0));
_connect(context, host, port, user, password); _connect(context, host, port, user, password);
} catch (MailConnectException ex) { } catch (MailConnectException ex) {
try { if (this.insecure)
// Addresses try {
InetAddress[] iaddrs = InetAddress.getAllByName(host); for (InetAddress iaddr : InetAddress.getAllByName(host))
if (iaddrs.length == 1 && !BuildConfig.DEBUG) try {
throw ex; _connect(context, iaddr.getHostAddress(), port, user, password);
return;
// Interfaces } catch (MessagingException ex1) {
Enumeration<NetworkInterface> _nis = NetworkInterface.getNetworkInterfaces(); Log.w(ex1);
if (_nis == null)
throw ex;
List<NetworkInterface> nis = Collections.list(_nis);
// Match address/interfaces
for (InetAddress iaddr : iaddrs) {
Log.i("Evaluating " + iaddr);
for (NetworkInterface ni : nis)
if (ni.isUp() && !ni.isLoopback()) {
Log.i("Evaluating " + ni);
List<InterfaceAddress> ias = ni.getInterfaceAddresses();
if (ias != null)
for (InterfaceAddress ia : ias) {
InetAddress a = ia.getAddress();
if (a != null && a.getClass().equals(iaddr.getClass())) {
Log.i("Binding to " + ia + " for " + iaddr);
properties.put("mail." + this.protocol + ".localaddress", a.getHostAddress());
try {
_connect(context, host, port, user, password);
return;
} catch (MessagingException ex1) {
Log.w(ex1);
}
}
}
} }
} catch (Throwable ex1) {
Log.w(ex1);
} }
} catch (Throwable ex1) {
Log.w(ex1);
}
throw ex; throw ex;
} }

Loading…
Cancel
Save