|
|
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Столкнулась с такой проблемой, необходимо прочитать почту средствами Oracle. Написала Java class, в котором подключаюсь к почтовому серверу imapmail - zimbra через протокол imap и протокол защищенного соединения starttls, порт 143. В Oracle вызываю процедуру соединения с сервером из данного класса. Выходит данная ошибка. DEBUG: getProvider() returning javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc] connecting... * OK IMAP4rev1 proxy server ready A0 CAPABILITY * CAPABILITY ACL BINARY CATENATE CHILDREN CONDSTORE ENABLE ESEARCH ESORT I18NLEVEL=1 ID IDLE IMAP4rev1 LIST-EXTENDED LIST-STATUS LITERAL+ MULTIAPPEND NAMESPACE QRESYNC QUOTA RIGHTS=ektx SASL-IR SEARCHRES SORT THREAD=ORDEREDSUBJECT UIDPLUS UNSELECT WITHIN XLIST STARTTLS LOGINDISABLED A0 OK completed A1 LOGIN exchangeadmin exchangeadmin1123132 NO cleartext logins disabled A1 BAD invalid command javax.mail.AuthenticationFailedException: invalid command at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:293) at javax.mail.Service.connect(Service.java:234) at MailHandlerImpl.connectToServerSSL(MailHandler:71) Пыталась подключиться к imapmail той же процедурой к порту 993 через протокол imap и ssl, выдает следующую ошибку: DEBUG: getProvider() returning javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc] connecting... javax.mail.MessagingException: null; nested exception is: java.io.IOException at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:298) at javax.mail.Service.connect(Service.java:234) at MailHandlerImpl.connectToServerSSL(MailHandler:71) Кто-нибудь сталкивался с такой проблемой? Есть варианты решения ее??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2016, 18:02 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2016, 18:55 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov JavaMail IMAP Summary . так в javamail баг: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2016, 19:03 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
Запрет использования LOGIN - обязанность клиента , а не библиотеки . Библиотека упрощает написание клиента , но не более того. Лень делать клиента самому - разбирайтесь с Apache Commons Net . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2016, 19:42 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovЗапрет использования LOGIN - обязанность клиента , а не библиотеки . Библиотека упрощает написание клиента , но не более того. ну как же так... оно же само берет и посылает команду LOGIN и перекрыть это поведение никак нельзя (понятно что ТС нужно выставить mail.imap.starttls.enable и mail.imap.starttls.required, но суть не в этом) - поэтому в этом месте библиотека выступает клиентом (у IMAPFolder команды можно посылать к примеру, а здесь нет). Сервер говорит: у меня тут такая важная информация, что мне ни в коем случае нельзя посылать логин и пароль в чистом виде, а оно берет и посылает - баг, да к тому же еще и в безопасности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2016, 22:35 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, А почему из среды Java работает данный код и без проблем подключается к серверу и читает сообщения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 07:54 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
Андрей Панфилов, Properties props = new Properties(); props.setProperty("mail.imap.starttls.enable", "true"); props.setProperty("mail.imap.starttls.required", "true"); props.setProperty("mail.imap.ssl.socketFactory.class", "test.ExchangeSSLSocketFactory"); props.setProperty("mail.imap.ssl.socketFactory.fallback", "false"); oMailSession = Session.getInstance(props, null); oMailStore = oMailSession.getStore(sProtocol); oMailStore.connect(sHost, sPort, sUser, sPass); Все включено. test.ExchangeSSLSocketFactory package test; import javax.net.SocketFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.*; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.*; public class ExchangeSSLSocketFactory extends SSLSocketFactory { private SSLSocketFactory sslSocketFactory; private SocketFactory socketFactory; public ExchangeSSLSocketFactory() { try { socketFactory = SocketFactory.getDefault(); SSLContext context = SSLContext.getInstance("TLS"); context.init(null, new TrustManager[]{new EmptyTrustManager()}, null); sslSocketFactory = (SSLSocketFactory) context.getSocketFactory(); } catch (Exception e) { throw new RuntimeException(e); } } private final class EmptyTrustManager implements X509TrustManager { public void checkClientTrusted(X509Certificate[] cert, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] cert, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[0]; } } public static SocketFactory getDefault() { return new ExchangeSSLSocketFactory(); } @Override public Socket createSocket(Socket socket, String s, int i, boolean flag) throws IOException { return sslSocketFactory.createSocket(socket, s, i, flag); } @Override public Socket createSocket(InetAddress inaddr, int i, InetAddress inaddr1, int j) throws IOException { return socketFactory.createSocket(inaddr, i, inaddr1, j); } @Override public Socket createSocket(InetAddress inaddr, int i) throws IOException { return socketFactory.createSocket(inaddr, i); } @Override public Socket createSocket(String s, int i, InetAddress inaddr, int j) throws IOException { return socketFactory.createSocket(s, i, inaddr, j); } @Override public Socket createSocket(String s, int i) throws IOException { return socketFactory.createSocket(s, i); } @Override public Socket createSocket() throws IOException { return socketFactory.createSocket(); } @Override public String[] getDefaultCipherSuites() { return sslSocketFactory.getSupportedCipherSuites(); } @Override public String[] getSupportedCipherSuites() { return sslSocketFactory.getSupportedCipherSuites(); } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 07:56 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Я правильно поняла из Oracle я с помощью JAVA MAIL API не смогу достучаться до почтового сервера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 07:57 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
bajys, какая версия javamail у вас в базу-то загружена? при беглом просмотре кода javamail ( https://java.net/projects/javamail/pages/Home), даже с учетом изменений, при capabilities вашего IMAP выкидывает исключение "No login methods supported!", а не слепо шлет LOGIN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 08:58 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
Андрей Панфилов, mail-1.4.7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 09:28 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
Андрей Панфилов, Это я соединяюсь с imapmail, протокол ssl используется.. При соединении с zimbra использую порт 143 и props.setProperty("mail.imap.starttls.enable", "true"); package MailHandler; import javax.mail.*; import java.math.BigDecimal; import java.util.*; import java.lang.*; import javax.mail.internet.InternetAddress; public class MailHandler { static Session oMailSession = null; static Store oMailStore = null; static Folder oCurrentFolder = null; static boolean bIsConnected = false; static String sHost = "host_name"; static String sUser = "user"; static String sPass = "pass"; static String sProtocol = "imap"; static int sPort = 993; public static void main(String[] args) { try { connectToServerSSL(sHost, sPort, sProtocol, sUser, sPass); } catch (Throwable ex) { ex.printStackTrace(); } } public static void connectToServerSSL(String sHost, int sPort, String sProtocol, String sUser, String sPass) throws Exception { if (bIsConnected) { throw new Exception("Already connected to a mailserver - disconnect first"); } try { Properties props = new Properties(); props.setProperty("mail.imap.ssl.enable", "true"); props.setProperty("mail.imap.starttls.required", "true"); props.setProperty("mail.imap.ssl.socketFactory.class", "MailHandler.ExchangeSSLSocketFactory"); props.setProperty("mail.imap.ssl.socketFactory.fallback", "false"); oMailSession = Session.getInstance(props, null); oMailSession.setDebug(true); oMailStore = oMailSession.getStore(sProtocol); System.out.println("connecting..."); oMailStore.connect(sHost, sPort, sUser, sPass); System.err.println("!!!!done"); bIsConnected = true; } catch (Exception e) { throw new RuntimeException(e); } } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 09:33 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
Андрей Панфиловну как же так... оно же само берет и посылает команду LOGIN и перекрыть это поведение никак нельзяСхреновли нельзя, если есть свойства, которые разрешают LOGIN по умолчанию . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 15:40 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovСхреновли нельзя, если есть свойства, которые разрешают LOGIN по умолчанию .Эт чет вы путаете, а еще девушку в документацию тыкали. Есть протокол IMAP, у которого подразумевается, что прежде чем работать с почтовым ящиком клиент должен аутентифицироваться, аутентифицироваться можно несколькими способами, а именно: рукопожатие после команды AUTH LOGIN рукопожатие после команды AUTH PLAIN ... команда LOGIN <user> <password> (не рукопожатие после команды, а сразу команда) то что вы пишите о "если есть свойства, которые разрешают LOGIN" - они про рукопожатие, и работают они так: сервер анонсирует возможность подобной аутентификации и в "клиенте" она разрешена - тогда "библиотека" имеет полное право послать команду AUTH LOGIN и после этого выполнить аутентификацию, т.е. mail.imap.auth.login.disable - это про AUTH LOGIN, к команде LOGIN, которая зафиксирована в протоколе: автор* OK IMAP4rev1 proxy server ready A0 CAPABILITY * CAPABILITY ACL BINARY CATENATE CHILDREN CONDSTORE ENABLE ESEARCH ESORT I18NLEVEL=1 ID IDLE IMAP4rev1 LIST-EXTENDED LIST-STATUS LITERAL+ MULTIAPPEND NAMESPACE QRESYNC QUOTA RIGHTS=ektx SASL-IR SEARCHRES SORT THREAD=ORDEREDSUBJECT UIDPLUS UNSELECT WITHIN XLIST STARTTLS LOGINDISABLED A0 OK completed A1 LOGIN exchangeadmin exchangeadmin1123132 NO cleartext logins disabled A1 BAD invalid command mail.imap.auth.login.disable никаго отношения не имеет, а учитывая, что сервер анонсирует LOGINDISABLED, то библиотека не имеет никакого права посылать команду LOGIN. Из всего этого можно сделать вывод, что у ТС в класпасе какая-то бажная библиотека торчит, поскольку в общедоступном коде javamail такого поведения нет и все сделано в соответствии с RFC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 18:25 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловИз всего этого можно сделать вывод, что у ТС в класпасе какая-то бажная библиотека торчит Нет там никакого "класпаса", как и нет никаких "библиотке". Это Oracle Database JVM, которая, конечно же, имеет кучу нюансов. Версию Oracle БД нам не удосужились сообщить. Поэтому на сколько древняя там версия Java и JavaMail сказать сложно. Но то что древняя, это почти наверняка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 18:50 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНет там никакого "класпаса", как и нет никаких "библиотке". Это Oracle Database JVM, которая, конечно же, имеет кучу нюансов. Версию Oracle БД нам не удосужились сообщить. Поэтому на сколько древняя там версия Java и JavaMail сказать сложно. Но то что древняя, это почти наверняка. Вроде писала: bajysАндрей Панфилов, mail-1.4.7 только доверия к этому у меня нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 18:54 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
bajysА почему из среды Java работает данный код и без проблем подключается к серверу и читает сообщения? Потому что там другая Java и другой JavaMail ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 18:55 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловbajysАндрей Панфилов, mail-1.4.7 только доверия к этому у меня нет. А это легко проверить. Что тут у нас в строчках 293 и 298? http://grepcode.com/file/repo1.maven.org/maven2/javax.mail/mail/1.4.7/com/sun/mail/imap/IMAPStore.java?av=f Что-то совсем не то что выкидывает исключения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2016, 19:02 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Спасибо. Вы оказались правы, в БД Oracle Java – 1.6.0, JavaMail – 1.3.1. Я так понимаю, если JavaMail обновить до 1.4.7, данная проблема разрешится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 09:17 |
|
||
|
Чтение почты из Oracle через Java Mail API
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, По-моему в самой последней версии Oracle 12g javamail 1.3.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2016, 09:24 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2123664]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
141ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 418ms |

| 0 / 0 |
