Библиотека Mail.NET не подключается к IMAP серверу через прокси - C#

Узнай цену своей работы

Формулировка задачи:

Всем здравствуйте. Кто-нибудь работал с библиотекой Mail.NET? Пишу программу, которая авторизуется по IMAP и отмечает все новые письма прочитанными. Все шикарно работает, но заказчик просит прикрутить прокси. Вот тут косяк. Поддержка прокси есть, делаю как описано на сайте, но не подключается к IMAP серверу через прокси. Прикрепляю лог программы. Когда подключение через прокси создано, то вылазит ошибка при подключении к imap.mail.ru. В логе выделено строками /**********/ сверху и снизу.
Листинг программы
  1. /******************************************************************************************************/
  2. 23-10-2014 05:06:31 Подключение к прокси 66.110.216.50
  3. 23-10-2014 05:06:45 Подключение к прокси 66.110.216.50 успешно установлено
  4. 23-10-2014 05:06:45 Подключение к IMAP серверу imap.mail.ru
  5. 23-10-2014 05:06:45 Подключение не удалось. Сервер разорвал соединение.
  6. 23-10-2014 05:06:45 SocketException[Сделан запрос на подключение для уже подключенного сокета 217.69.139.90:993]
  7.  
  8. 23-10-2014 05:06:45 Подключение к прокси 69.174.157.245
  9. 23-10-2014 05:06:50 Подключение к прокси 69.174.157.245 успешно установлено
  10. 23-10-2014 05:06:50 Подключение к IMAP серверу imap.mail.ru
  11. 23-10-2014 05:06:50 Подключение не удалось. Сервер разорвал соединение.
  12. 23-10-2014 05:06:50 SocketException[Сделан запрос на подключение для уже подключенного сокета 217.69.139.90:993]
  13. /******************************************************************************************************/

Решение задачи: «Библиотека Mail.NET не подключается к IMAP серверу через прокси»

textual
Листинг программы
  1. Imap imap = new Imap ( );
  2.  
  3.             if ( _useProxy )
  4.             {
  5.                 if ( proxylist.Count == 0 )
  6.                 {
  7.                     WriteToLog ( "Не загружен список прокси-серверов", "bad" );
  8.                     MessageBox.Show ( "Не загружен список прокси-серверов!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error );
  9.                     return;
  10.                 }
  11.  
  12.                 int j = 1;
  13.  
  14.                 foreach ( var item in proxylist )
  15.                 {
  16.  
  17.                     WriteToLog ( "Подключение к прокси " + item.Key );
  18.                     ProxyFactory factory = new ProxyFactory ( );
  19.                     try
  20.                     {    
  21.                         IProxyClient proxy = factory.CreateProxy ( ProxyType.Socks4, item.Key, item.Value ); // подключаемся к прокси
  22.                         Socket socket = proxy.Connect ( _server, _port );
  23.                         imap.AttachSSL ( socket, _server );
  24.                         WriteToLog ( "Подключение к прокси " + item.Key + " успешно установлено", "good" );
  25.                         break;
  26.                     }
  27.                     catch ( System.Net.Sockets.SocketException message)
  28.                     {
  29.                         WriteToLog ( "Подключение к прокси " + item.Key + " не удалось: ", "bad" );
  30.                         WriteToLog ( "SocketException[" + message.Message + "]", "bad" );
  31.                         Application.DoEvents ( );
  32.                     }
  33.                     catch ( Exception message )
  34.                     {
  35.                         WriteToLog ( "Подключение к прокси " + item.Key + " не удалось: ", "bad" );
  36.                         WriteToLog ( message.Message, "bad" );
  37.                         Application.DoEvents ( );
  38.                     }
  39.                     finally
  40.                     {
  41.                         j++;
  42.                     }
  43.                 }
  44.  
  45.                 if ( j == proxylist.Count )
  46.                 {
  47.                     WriteToLog ( "Прокси закончились и ни один не подошел (((", "bad" );
  48.                     WriteToLog ( "Дальше работаем напрямую" );
  49.                     //MessageBox.Show ( "Прокси закончились и ни один не подошел (((", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error );
  50.                 }
  51.  
  52.             }
  53.  
  54.             WriteToLog ( "Подключение к IMAP серверу " + _server );
  55.  
  56.             Invoke ( new MethodInvoker ( delegate
  57.                 {
  58.                     progressBarTotal.Value++;
  59.                     progressBarCurrent.Value = 0;
  60.                 } ) );
  61.  
  62.             Application.DoEvents ( );
  63.  
  64.             try
  65.             {
  66.                 imap.Connect ( _server, _port, _ssl );  // Чтобы использовать SSL использовать перегрузку метода и вызывать его так: imap.Connect ( string _server, int port, bool useSSL )
  67.                 WriteToLog ( "Подключение к " + _server + " успешно выполнено", "good" );
  68.                 Application.DoEvents ( );
  69.             }
  70.             catch ( Limilabs.Client.ServerException message )
  71.             {
  72.                 WriteToLog ( "Подключение не удалось. Сервер разорвал соединение. " , "bad" );
  73.                 WriteToLog ( "ServerException[" + message.Message + "]", "bad" );
  74.                 Application.DoEvents ( );
  75.                 return;
  76.             }
  77.             catch(Exception message)
  78.             {
  79.                 WriteToLog ( "Подключение не удалось: ", "bad" );
  80.                 WriteToLog ( message.Message, "bad" );
  81.                 Application.DoEvents ( );
  82.                 return;
  83.             }
  84.  
  85.             WriteToLog ( "Авторизация аккаунта " + _user );
  86.  
  87.             try
  88.             {
  89.                 Application.DoEvents ( );
  90.                 imap.UseBestLogin ( _user, _password );
  91.                 imap.SelectInbox ( );
  92.                 WriteToLog ( "Авторизация успешно выполнена", "good" );
  93.                 _DoneCounter++;
  94.                 Invoke ( new MethodInvoker ( delegate
  95.                     { labelDoneCounter.Text = _DoneCounter.ToString ( ); } ) );
  96.             }
  97.             catch ( Exception message )
  98.             {
  99.                 Application.DoEvents ( );
  100.                 WriteToLog ( "Авторизация не удалась: ", "bad" );
  101.                 WriteToLog ( "[" + message.Source + "]:" + message.Message, "bad" );
  102.                 _FailedCounter++;
  103.                 Invoke ( new MethodInvoker ( delegate
  104.                     { labelFailedCounter.Text = _FailedCounter.ToString ( ); } ) );
  105.                 _ErrorCounterAccaunts.Add ( _user + ":" + _password );
  106.                 WriteToLog ( "Пара " + _user + ":" + _password + " невалидная", "bad" );
  107.                 return;
  108.  
  109.             }
  110. /*
  111. *         Получаем письма
  112. */

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы