diff --git a/app/src/main/java/com/sun/mail/util/SocketFetcher.java b/app/src/main/java/com/sun/mail/util/SocketFetcher.java index d6af220615..44fdedc3c4 100644 --- a/app/src/main/java/com/sun/mail/util/SocketFetcher.java +++ b/app/src/main/java/com/sun/mail/util/SocketFetcher.java @@ -16,6 +16,8 @@ package com.sun.mail.util; +import android.text.TextUtils; + import java.security.*; import java.net.*; import java.io.*; @@ -325,14 +327,19 @@ public class SocketFetcher { if (localaddr != null) socket.bind(new InetSocketAddress(localaddr, localport)); try { + InetAddress iaddr = InetAddress.getByName(host); + String server = props.getProperty("fairemail.server"); + if (!TextUtils.isEmpty(server)) + iaddr = InetAddress.getByAddress(server, iaddr.getAddress()); + eu.faircode.email.Log.i("Socket connect " + iaddr); logger.finest("connecting..."); if (proxyHost != null) proxyConnect(socket, proxyHost, proxyPort, proxyUser, proxyPassword, host, port, cto); else if (cto >= 0) - socket.connect(new InetSocketAddress(host, port), cto); + socket.connect(new InetSocketAddress(iaddr, port), cto); else - socket.connect(new InetSocketAddress(host, port)); + socket.connect(new InetSocketAddress(iaddr, port)); logger.finest("success!"); } catch (IOException ex) { logger.log(Level.FINEST, "connection failed", ex); diff --git a/app/src/main/java/eu/faircode/email/EmailService.java b/app/src/main/java/eu/faircode/email/EmailService.java index e0a32089f0..f130f68583 100644 --- a/app/src/main/java/eu/faircode/email/EmailService.java +++ b/app/src/main/java/eu/faircode/email/EmailService.java @@ -478,7 +478,7 @@ public class EmailService implements AutoCloseable { } EntityLog.log(context, "Connecting to " + main); - _connect(main, port, require_id, user, authenticator, factory); + _connect(host, main, port, require_id, user, authenticator, factory); } catch (UnknownHostException ex) { throw new MessagingException(ex.getMessage(), ex); } catch (MessagingException ex) { @@ -552,7 +552,7 @@ public class EmailService implements AutoCloseable { try { EntityLog.log(context, "Falling back to " + iaddr); - _connect(iaddr, port, require_id, user, authenticator, factory); + _connect(host, iaddr, port, require_id, user, authenticator, factory); return; } catch (MessagingException ex1) { ex = ex1; @@ -570,9 +570,10 @@ public class EmailService implements AutoCloseable { } private void _connect( - InetAddress address, int port, boolean require_id, + String host, InetAddress address, int port, boolean require_id, String user, Authenticator authenticator, SSLSocketFactoryService factory) throws MessagingException { + properties.setProperty("fairemail.server", host); isession = Session.getInstance(properties, authenticator); isession.setDebug(debug || log);