Библиотека Mail.NET не подключается к IMAP серверу через прокси - C#
Формулировка задачи:
Всем здравствуйте. Кто-нибудь работал с библиотекой Mail.NET?
Пишу программу, которая авторизуется по IMAP и отмечает все новые письма прочитанными. Все шикарно работает, но заказчик просит прикрутить прокси. Вот тут косяк. Поддержка прокси есть, делаю как описано на сайте, но не подключается к IMAP серверу через прокси. Прикрепляю лог программы. Когда подключение через прокси создано, то вылазит ошибка при подключении к imap.mail.ru. В логе выделено строками /**********/ сверху и снизу.
/******************************************************************************************************/ 23-10-2014 05:06:31 Подключение к прокси 66.110.216.50 23-10-2014 05:06:45 Подключение к прокси 66.110.216.50 успешно установлено 23-10-2014 05:06:45 Подключение к IMAP серверу imap.mail.ru 23-10-2014 05:06:45 Подключение не удалось. Сервер разорвал соединение. 23-10-2014 05:06:45 SocketException[Сделан запрос на подключение для уже подключенного сокета 217.69.139.90:993] 23-10-2014 05:06:45 Подключение к прокси 69.174.157.245 23-10-2014 05:06:50 Подключение к прокси 69.174.157.245 успешно установлено 23-10-2014 05:06:50 Подключение к IMAP серверу imap.mail.ru 23-10-2014 05:06:50 Подключение не удалось. Сервер разорвал соединение. 23-10-2014 05:06:50 SocketException[Сделан запрос на подключение для уже подключенного сокета 217.69.139.90:993] /******************************************************************************************************/
Решение задачи: «Библиотека Mail.NET не подключается к IMAP серверу через прокси»
textual
Листинг программы
Imap imap = new Imap ( ); if ( _useProxy ) { if ( proxylist.Count == 0 ) { WriteToLog ( "Не загружен список прокси-серверов", "bad" ); MessageBox.Show ( "Не загружен список прокси-серверов!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error ); return; } int j = 1; foreach ( var item in proxylist ) { WriteToLog ( "Подключение к прокси " + item.Key ); ProxyFactory factory = new ProxyFactory ( ); try { IProxyClient proxy = factory.CreateProxy ( ProxyType.Socks4, item.Key, item.Value ); // подключаемся к прокси Socket socket = proxy.Connect ( _server, _port ); imap.AttachSSL ( socket, _server ); WriteToLog ( "Подключение к прокси " + item.Key + " успешно установлено", "good" ); break; } catch ( System.Net.Sockets.SocketException message) { WriteToLog ( "Подключение к прокси " + item.Key + " не удалось: ", "bad" ); WriteToLog ( "SocketException[" + message.Message + "]", "bad" ); Application.DoEvents ( ); } catch ( Exception message ) { WriteToLog ( "Подключение к прокси " + item.Key + " не удалось: ", "bad" ); WriteToLog ( message.Message, "bad" ); Application.DoEvents ( ); } finally { j++; } } if ( j == proxylist.Count ) { WriteToLog ( "Прокси закончились и ни один не подошел (((", "bad" ); WriteToLog ( "Дальше работаем напрямую" ); //MessageBox.Show ( "Прокси закончились и ни один не подошел (((", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error ); } } WriteToLog ( "Подключение к IMAP серверу " + _server ); Invoke ( new MethodInvoker ( delegate { progressBarTotal.Value++; progressBarCurrent.Value = 0; } ) ); Application.DoEvents ( ); try { imap.Connect ( _server, _port, _ssl ); // Чтобы использовать SSL использовать перегрузку метода и вызывать его так: imap.Connect ( string _server, int port, bool useSSL ) WriteToLog ( "Подключение к " + _server + " успешно выполнено", "good" ); Application.DoEvents ( ); } catch ( Limilabs.Client.ServerException message ) { WriteToLog ( "Подключение не удалось. Сервер разорвал соединение. " , "bad" ); WriteToLog ( "ServerException[" + message.Message + "]", "bad" ); Application.DoEvents ( ); return; } catch(Exception message) { WriteToLog ( "Подключение не удалось: ", "bad" ); WriteToLog ( message.Message, "bad" ); Application.DoEvents ( ); return; } WriteToLog ( "Авторизация аккаунта " + _user ); try { Application.DoEvents ( ); imap.UseBestLogin ( _user, _password ); imap.SelectInbox ( ); WriteToLog ( "Авторизация успешно выполнена", "good" ); _DoneCounter++; Invoke ( new MethodInvoker ( delegate { labelDoneCounter.Text = _DoneCounter.ToString ( ); } ) ); } catch ( Exception message ) { Application.DoEvents ( ); WriteToLog ( "Авторизация не удалась: ", "bad" ); WriteToLog ( "[" + message.Source + "]:" + message.Message, "bad" ); _FailedCounter++; Invoke ( new MethodInvoker ( delegate { labelFailedCounter.Text = _FailedCounter.ToString ( ); } ) ); _ErrorCounterAccaunts.Add ( _user + ":" + _password ); WriteToLog ( "Пара " + _user + ":" + _password + " невалидная", "bad" ); return; } /* * Получаем письма */
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д