Библиотека 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;
- }
- /*
- * Получаем письма
- */
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д