diff --git a/src/java/davmail/Settings.java b/src/java/davmail/Settings.java index 96987564..7c6c70e6 100644 --- a/src/java/davmail/Settings.java +++ b/src/java/davmail/Settings.java @@ -150,6 +150,7 @@ public final class Settings { SETTINGS.put("davmail.proxyPort", ""); SETTINGS.put("davmail.proxyUser", ""); SETTINGS.put("davmail.proxyPassword", ""); + SETTINGS.put("davmail.noProxyFor", ""); SETTINGS.put("davmail.server", Boolean.FALSE.toString()); SETTINGS.put("davmail.server.certificate.hash", ""); SETTINGS.put("davmail.caldavAlarmSound", ""); diff --git a/src/java/davmail/http/DavGatewayHttpClientFacade.java b/src/java/davmail/http/DavGatewayHttpClientFacade.java index 7bd26bd2..bf7bba4d 100644 --- a/src/java/davmail/http/DavGatewayHttpClientFacade.java +++ b/src/java/davmail/http/DavGatewayHttpClientFacade.java @@ -173,11 +173,15 @@ public final class DavGatewayHttpClientFacade { String proxyUser = null; String proxyPassword = null; - if (useSystemProxies) { - // get proxy for url from system settings - System.setProperty("java.net.useSystemProxies", "true"); - try { - List proxyList = getProxyForURI(new java.net.URI(url)); + try { + java.net.URI uri = new java.net.URI(url); + String noProxyFor = Settings.getProperty("davmail.noProxyFor"); + if (noProxyFor != null && noProxyFor.contains(uri.getHost())) { + LOGGER.debug("no proxy for "+uri.getHost()); + } else if (useSystemProxies) { + // get proxy for url from system settings + System.setProperty("java.net.useSystemProxies", "true"); + List proxyList = getProxyForURI(uri); if (!proxyList.isEmpty() && proxyList.get(0).address() != null) { InetSocketAddress inetSocketAddress = (InetSocketAddress) proxyList.get(0).address(); proxyHost = inetSocketAddress.getHostName(); @@ -187,14 +191,14 @@ public final class DavGatewayHttpClientFacade { proxyUser = Settings.getProperty("davmail.proxyUser"); proxyPassword = Settings.getProperty("davmail.proxyPassword"); } - } catch (URISyntaxException e) { - throw new DavMailException("LOG_INVALID_URL", url); + } else if (enableProxy) { + proxyHost = Settings.getProperty("davmail.proxyHost"); + proxyPort = Settings.getIntProperty("davmail.proxyPort"); + proxyUser = Settings.getProperty("davmail.proxyUser"); + proxyPassword = Settings.getProperty("davmail.proxyPassword"); } - } else if (enableProxy) { - proxyHost = Settings.getProperty("davmail.proxyHost"); - proxyPort = Settings.getIntProperty("davmail.proxyPort"); - proxyUser = Settings.getProperty("davmail.proxyUser"); - proxyPassword = Settings.getProperty("davmail.proxyPassword"); + } catch (URISyntaxException e) { + throw new DavMailException("LOG_INVALID_URL", url); } // configure proxy diff --git a/src/java/davmail/ui/SettingsFrame.java b/src/java/davmail/ui/SettingsFrame.java index 3ee4e635..b200bdd2 100644 --- a/src/java/davmail/ui/SettingsFrame.java +++ b/src/java/davmail/ui/SettingsFrame.java @@ -67,6 +67,7 @@ public class SettingsFrame extends JFrame { JTextField httpProxyPortField; JTextField httpProxyUserField; JTextField httpProxyPasswordField; + JTextField noProxyForField; JCheckBox allowRemoteField; JTextField bindAddressField; @@ -248,7 +249,7 @@ public class SettingsFrame extends JFrame { } protected JPanel getProxyPanel() { - JPanel proxyPanel = new JPanel(new GridLayout(6, 2)); + JPanel proxyPanel = new JPanel(new GridLayout(7, 2)); proxyPanel.setBorder(BorderFactory.createTitledBorder(BundleMessage.format("UI_PROXY"))); boolean useSystemProxies = Settings.getBooleanProperty("davmail.useSystemProxies", Boolean.FALSE); @@ -261,12 +262,14 @@ public class SettingsFrame extends JFrame { httpProxyPortField = new JTextField(Settings.getProperty("davmail.proxyPort"), 4); httpProxyUserField = new JTextField(Settings.getProperty("davmail.proxyUser"), 10); httpProxyPasswordField = new JPasswordField(Settings.getProperty("davmail.proxyPassword"), 10); + noProxyForField = new JTextField(Settings.getProperty("davmail.noProxyFor"), 15); enableProxyField.setEnabled(!useSystemProxies); httpProxyField.setEnabled(enableProxy); httpProxyPortField.setEnabled(enableProxy); httpProxyUserField.setEnabled(enableProxy || useSystemProxies); httpProxyPasswordField.setEnabled(enableProxy || useSystemProxies); + noProxyForField.setEnabled(enableProxy || useSystemProxies); useSystemProxiesField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { @@ -277,6 +280,7 @@ public class SettingsFrame extends JFrame { httpProxyPortField.setEnabled(!newUseSystemProxies && newEnableProxy); httpProxyUserField.setEnabled(newUseSystemProxies || newEnableProxy); httpProxyPasswordField.setEnabled(newUseSystemProxies || newEnableProxy); + noProxyForField.setEnabled(newUseSystemProxies || newEnableProxy); } }); enableProxyField.addActionListener(new ActionListener() { @@ -286,6 +290,7 @@ public class SettingsFrame extends JFrame { httpProxyPortField.setEnabled(newEnableProxy); httpProxyUserField.setEnabled(newEnableProxy); httpProxyPasswordField.setEnabled(newEnableProxy); + noProxyForField.setEnabled(newEnableProxy); } }); @@ -295,6 +300,7 @@ public class SettingsFrame extends JFrame { addSettingComponent(proxyPanel, BundleMessage.format("UI_PROXY_PORT"), httpProxyPortField); addSettingComponent(proxyPanel, BundleMessage.format("UI_PROXY_USER"), httpProxyUserField); addSettingComponent(proxyPanel, BundleMessage.format("UI_PROXY_PASSWORD"), httpProxyPasswordField); + addSettingComponent(proxyPanel, BundleMessage.format("UI_NO_PROXY"), noProxyForField); updateMaximumSize(proxyPanel); return proxyPanel; } @@ -569,10 +575,12 @@ public class SettingsFrame extends JFrame { httpProxyPortField.setEnabled(!useSystemProxies && enableProxy); httpProxyUserField.setEnabled(useSystemProxies || enableProxy); httpProxyPasswordField.setEnabled(useSystemProxies || enableProxy); + noProxyForField.setEnabled(useSystemProxies || enableProxy); httpProxyField.setText(Settings.getProperty("davmail.proxyHost")); httpProxyPortField.setText(Settings.getProperty("davmail.proxyPort")); httpProxyUserField.setText(Settings.getProperty("davmail.proxyUser")); httpProxyPasswordField.setText(Settings.getProperty("davmail.proxyPassword")); + noProxyForField.setText(Settings.getProperty("davmail.noProxyFor")); bindAddressField.setText(Settings.getProperty("davmail.bindAddress")); allowRemoteField.setSelected(Settings.getBooleanProperty(("davmail.allowRemote"))); @@ -732,6 +740,7 @@ public class SettingsFrame extends JFrame { Settings.setProperty("davmail.proxyPort", httpProxyPortField.getText()); Settings.setProperty("davmail.proxyUser", httpProxyUserField.getText()); Settings.setProperty("davmail.proxyPassword", httpProxyPasswordField.getText()); + Settings.setProperty("davmail.noProxyFor", noProxyForField.getText()); Settings.setProperty("davmail.bindAddress", bindAddressField.getText()); Settings.setProperty("davmail.clientSoTimeout", String.valueOf(clientSoTimeoutField.getText())); diff --git a/src/java/davmailmessages.properties b/src/java/davmailmessages.properties index 9dacdfe5..0131aa16 100644 --- a/src/java/davmailmessages.properties +++ b/src/java/davmailmessages.properties @@ -219,6 +219,7 @@ UI_PROXY_PASSWORD=Proxy password: UI_PROXY_PORT=Proxy port: UI_PROXY_SERVER=Proxy server: UI_PROXY_USER=Proxy user: +UI_NO_PROXY=No proxy for: UI_SENT_KEEP_DELAY=Sent keep delay (POP): UI_SENT_KEEP_DELAY_HELP=Number of days to keep messages in sent folder UI_SERIAL=Serial diff --git a/src/java/davmailmessages_fr.properties b/src/java/davmailmessages_fr.properties index e9c10b3b..e84e4c5b 100644 --- a/src/java/davmailmessages_fr.properties +++ b/src/java/davmailmessages_fr.properties @@ -194,6 +194,7 @@ UI_PROXY_PASSWORD=Mot de passe proxy : UI_PROXY_PORT=Port du serveur proxy : UI_PROXY_SERVER=Serveur proxy : UI_PROXY_USER=Identifiant proxy : +UI_NO_PROXY=Pas de proxy pour : UI_SENT_KEEP_DELAY=Délai de rétention envoyés (POP) : UI_SENT_KEEP_DELAY_HELP=Nombre de jours de conservation des messages dans le dossier des messages envoyés UI_SERIAL=Numéro de série diff --git a/src/site/xdoc/advanced.xml b/src/site/xdoc/advanced.xml index 0e0fb8a0..93249f6e 100644 --- a/src/site/xdoc/advanced.xml +++ b/src/site/xdoc/advanced.xml @@ -56,6 +56,11 @@ Description Sample value + + No proxy for + comma separated list of hosts accessible without a proxy + davmail.sourceforge.net + Allow remote connections Allow remote connections to the gateway (server mode) diff --git a/src/site/xdoc/serversetup.xml b/src/site/xdoc/serversetup.xml index 9f255474..e621d4e3 100644 --- a/src/site/xdoc/serversetup.xml +++ b/src/site/xdoc/serversetup.xml @@ -45,6 +45,7 @@ davmail.proxyHost= davmail.proxyPort= davmail.proxyUser= davmail.proxyPassword= +davmail.noProxyFor= davmail.ssl.keystoreType=JKS davmail.ssl.keyPass= davmail.ssl.keystoreFile= diff --git a/src/web/WEB-INF/classes/davmail.properties b/src/web/WEB-INF/classes/davmail.properties index ad0e495d..0a490250 100644 --- a/src/web/WEB-INF/classes/davmail.properties +++ b/src/web/WEB-INF/classes/davmail.properties @@ -11,6 +11,7 @@ davmail.proxyHost= davmail.proxyPort= davmail.proxyUser= davmail.proxyPassword= +davmail.noProxyFor= davmail.allowRemote=true davmail.bindAddress=