Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 1 | 
 
			
 
  
		
     
  
    
Вопрос: Спецам в сетевом программировании
     
    
Добавлено: 21.02.05 05:04
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
    
 Lister | ICQ: 298621256 
      
       
  
Народ, может у кого есть пример почтового прокси-сервера?
 
    
Хочу написать посредник между почтовой программой и почтовым сервером - для добавления доп. заголовков к письму. 
Нужны статьи, советы, примеры...
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 13
     
      
  
		
	  
			 
	
		 
    
       
    
Номер ответа: 1 
      
Автор ответа:
 Neco
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ICQ: 247906854 
Вопросов: 133
Ответов: 882
      
 Web-сайт:  
 Профиль |  | #1
      
Добавлено:  21.02.05 21:54
       
    
       
  
А почему он должен быть именно почтовым проксиком? Просто прокси, на который ты настроишь свой почтовик - кажись самое оно.
 
    
А чем вообще отличается почтовый от непочтового?
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа:
 Lister
![]()
![]()
![]()
ICQ: 298621256 
Вопросов: 57
Ответов: 304
      
 Профиль |  | #2
       
Добавлено:  21.02.05 22:20
       
    
       
  
Почтовый работает исключительно с почтой, например антиспам-программы очень часто являются почтовыми прокси-серверами.
 
    
Мне позарез нужно смастерить аналогичную программу. 
Цель - изменить Subject входящего/исходящего письма.
Допустим, приходит письмо. Письму присваивается номер, который добавляется к заголовку, например:
 "[ #00001] Teмa письма"
И дальше с человеком ведется письменный диалог в пределах данного номера. 
Очень удобно, когда много писем. Особенно деловой почты.
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа:
 DaSharm
![]()
ICQ: 780477 
Вопросов: 72
Ответов: 1297
      
 Web-сайт:  
 Профиль |  | #3
      
Добавлено:  21.02.05 22:41
       
    
       
  
ну, это, думаю, без примеров нужно писать. самому... да и ваще зачем примеры? Ты ведь хорошо поставил задачу, вперед! Хватит срисовывать чужие примеры...
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа:
 Lister
![]()
![]()
![]()
ICQ: 298621256 
Вопросов: 57
Ответов: 304
      
 Профиль |  | #4
       
Добавлено:  21.02.05 23:42
       
    
       
  
Мне принцип работы почтового прокси знать надо. А я практически ни чего не знаю. Поэтому и прошу ссылки на инфо-ресурсы, не обязательно на примеры.
 
    
Не понятно, какие настройки требуют прокси.
Причем есть некоторые почтовые прокси-сервера, например, Spamprotex, которые вообще никаких настроек не требуют. Запускаешь - и он сразу работает...
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа:
 Neco
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ICQ: 247906854 
Вопросов: 133
Ответов: 882
      
 Web-сайт:  
 Профиль |  | #5
      
Добавлено:  22.02.05 18:02
       
    
       
  
Я всё-таки не вижу принципиальной разницы между почтовым и непочтовым прокси. В чём проблема? Почему не работает это:
 
    
1. Создаешь сервер на 99 порту.
2. Настраиваешь бат на работу с прокси localhost:99.
3. Пытаешся принять почту.
4. В Debug.Print пишешь всё, что тебе пишет бат.
5. Анализируешь и возможно чуть правишь. Я точно не знаю, но, например, http пакеты мне править пришлось.
6. Отсылаешь то, что получил (и возможно подправил) настоящему серваку.
7. Получаешь ответ от сервака и отсылаешь его бату.
И т.д. и т.п.
Где-то там сервак пошлёт тебе заголовки. Ты их правишь и отсылаешь бату в том виде, каком тебе нужно.
Я не пробовал, но не вижу места, где это может не сработать...
И принцип работы ты подчерпнёшь прямо по ходу. Ничего заранее знать не надо.
А про какие настройки ты говоришь?
Я вообще-то не тот спец, что в сабже. Спец у нас DaSharm - у него кстати и сайт неплохой. Почитай - может пригодиться. Тока я ссылку не помню - может в инфе о нём есть?
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа:
 Lister
![]()
![]()
![]()
ICQ: 298621256 
Вопросов: 57
Ответов: 304
      
 Профиль |  | #6
       
Добавлено:  22.02.05 19:40
       
    
       
  
 
    
Про те, которые ты в пункте 2 описал
Т.е, например
1) Создаю сервер на 99 порту, т.е
  Winsock.LocalPort = 99
  Winsock.Listen
Так?
2) Настраиваю Бат:
Почт.сервер localhost:99
Пользователь ???? А какого пользователя мне устраивать?
Пароль - что указывать?
3) Пытаюсь принять почту и ни черта не получается...
		
	  
			 
	
		 
    
       
    
Номер ответа: 7 
      
Автор ответа:
 Neco
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ICQ: 247906854 
Вопросов: 133
Ответов: 882
      
 Web-сайт:  
 Профиль |  | #7
      
Добавлено:  22.02.05 23:21
       
    
       
  
Lister, ну мне влом сидеть в инете, чтобы эту прогу испытывать. Вот то, что смог сделать офф:
 
    
Private Sub Form_Load()
    ws.LocalPort = 110
    ws.Listen
End Sub
Private Sub ws_ConnectionRequest(ByVal requestID As Long)
    ws.Close
    ws.Accept requestID
    
ebug.Print "Connected"
    ws.SendData "Hi"
End Sub
Private Sub ws_DataArrival(ByVal bytesTotal As Long)
    
im tmpStr As String
    ws.GetData tmpStr
    
ebug.Print tmpStr
End Sub
Стопудово на "Hi" бат никак не реагирует. 8)
В общем, сразу после этого тебе надо приконнектиться к pop3.rambler.ru:110 и ты узнаешь, чего ждёт от тебя бат.
>Пользователь ???? А какого пользователя мне устраивать?
>Пароль - что указывать?
Того юзера, логин и пароль которого ты знаешь. Хотя это необязательно - можешь там мат написать, тока когда бат отошлёт твоему прокси пароль и логин в виде ***** и ***** (вырезано цензурой) - не удивляйся. 8)
>3) Пытаюсь принять почту и ни черта не получается...
Ну я просто иногда не знаю с кем разговариваю. Я вообще-то СЕБЯ новичком во всех этих сетевых операциях считаю. Поэтому ещё раз повторяю принцип: он похож на передачу кирпичей по цепочке - тебе даже не важно что там через тебя передают, взял и передал. Ну ПРОКСИ - чего ещё говорить. Принял от бата - передал серваку, принял от сервака - передал бату. Там в сумме строк двадцать кода у обоих винсоков. Если не просто:
ws1_dataarrival:
ws1.getdata strData
ws2.send strData
И тоже самое у второго.
P.S. Короче тока что вот нервы не выдержали и сделал всё сам:
Private Sub Form_Load()
    wsServer.LocalPort = 110
    wsServer.Listen
End Sub
Private Sub wsClient_Connect()
    
ebug.Print "Приконнектился к рамблеру!"
End Sub
Private Sub wsClient_DataArrival(ByVal bytesTotal As Long)
    
im strData As String
    wsClient.GetData strData
    If wsServer.State = 7 Then
        wsServer.SendData strData
        
ebug.Print "Отослал бату:"; strData
    Else
        
ebug.Print "Не могу отослать бату инфу, пришедшую от рамблера! ["; strData; "]"
    End If
End Sub
Private Sub wsServer_ConnectionRequest(ByVal requestID As Long)
    wsServer.Close
    wsServer.Accept requestID
    
ebug.Print "Бат на связи!"
    wsClient.Connect "pop3.rambler.ru", 110
End Sub
Private Sub wsServer_DataArrival(ByVal bytesTotal As Long)
    
im strData As String
    wsServer.GetData strData
    If wsClient.State = 7 Then
        wsClient.SendData strData
        
ebug.Print "Отсылаю рамблеру:"; strData
    Else
        
ebug.Print "Не могу отослать рамблеру инфу, пришедшую от бата! ["; strData; "]"
    End If
End Sub
Вот диалог:
Бат на связи!
Приконнектился к рамблеру!
Отослал бату:+OK mail.rambler.ru pop3 ready <623bb188.1109103183@mail.rambler.ru>
Отсылаю рамблеру:USER login [не, ребята, - это я вам не скажу....]
Отослал бату:+OK user set
Отсылаю рамблеру:PASS super [ну а это можно...]
Отослал бату:+OK 0 messages (0 bytes)
Отсылаю рамблеру:STAT
Отослал бату:+OK 0 0
Отсылаю рамблеру:QUIT
Отослал бату:+OK CommuniGate Pro POP3 Server connection closed
		
	  
			 
	
		 
    
       
    
Номер ответа: 8 
      
Автор ответа:
 Lister
![]()
![]()
![]()
ICQ: 298621256 
Вопросов: 57
Ответов: 304
      
 Профиль |  | #8
       
Добавлено:  23.02.05 02:06
       
    
       
  
Neco, спасибо тебе огромное!!!
 
    
Ты мне очень реально помог. Я разобрался 
 Ура.
Проверяю батом почту, диалог есть.
Правда небольшая заминка - пытаюсь второй раз проверить почту - в ответ "невозможно соединиться с сервером"
		
	  
			 
	
		 
    
       
    
Номер ответа: 9 
      
Автор ответа:
 Neco
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ICQ: 247906854 
Вопросов: 133
Ответов: 882
      
 Web-сайт:  
 Профиль |  | #9
      
Добавлено:  23.02.05 18:37
       
    
       
  
 
    
Вставь ещё вот это и эта проблема исчезнет:
    wsClient.Close
    wsServer.Listen
End Sub
Так что не считай, что всё сделано - чтобы прога хорошей получилась надо ещё и фейс написать приличный и доходчивый (чтобы юзеру не надо было перед использованием читать килограммовые хелпы по сетям). Так что всё только начинается - запасайся терпением. 8)
		
	  
			 
	
		 
    
       
    
Номер ответа: 10 
      
Автор ответа:
 Lister
![]()
![]()
![]()
ICQ: 298621256 
Вопросов: 57
Ответов: 304
      
 Профиль |  | #10
       
Добавлено:  24.02.05 23:42
       
    
       
  
Еще небольшая загвоздка....
 
    
Сервер слушает порт. Проверяю ящики, вижу диалог... Все нормально. 
Оставляю код работать. Затем проверяю ящики через несколько минут... Бат не может сединиться с сервером, т.к. тот, похоже присоединяется к удаленному хосту и тут же отсоединяется. Похоже на какой-то тайм-аут. Что это за ерунда, не знаешь случаем?
		
	  
			 
	
		 
    
       
    
Номер ответа: 11 
      
Автор ответа:
 DaSharm
![]()
ICQ: 780477 
Вопросов: 72
Ответов: 1297
      
 Web-сайт:  
 Профиль |  | #11
      
Добавлено:  25.02.05 09:34
       
    
       
  
 
    
гы-гы, а попробуй ка этот сервер на аутлуке, принять письмо больше 1 мб... рзультат будет непредсказуем.
		
	  
			 
	
		 
    
       
    
Номер ответа: 12 
      
Автор ответа:
 Neco
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ICQ: 247906854 
Вопросов: 133
Ответов: 882
      
 Web-сайт:  
 Профиль |  | #12
      
Добавлено:  25.02.05 21:42
       
    
       
  
>Что это за ерунда, не знаешь случаем?
 
    
Нет, не знаю. Могу только посоветовать воткнуть в КАЖДУЮ процедуру по Debug.Print'у (или лучше даже в файл лог писать - Debug не резиновый) с указанием времени срабатывания (и даже состоянием винсоков) и анализируя (от слова "анал" - т.е. зад просидишь себе стопудово) можно понять в чём там дело.
Насчёт тайм-аута: вряд ли, т.к. если бат справляется с этой задачей без твоего прокси, значит он должен быть в курсе какие тайм ауты требуются по каким-нибудь там протоколам и учитывая то, что бат вообще не в курсе того, что ему подсовывают какой-то там левый сервер, можно прийти к выводу, что с тайм аутами всё нормально.
>Бат не может сединиться с сервером, т.к. тот, похоже присоединяется к удаленному хосту и тут же отсоединяется.
Не понял как это "бат не может соединиться с сервером," (пока всё понятно) "т.к. тот" (сервер что ли?) "похоже присоединяется" (на фига серверу куда-то присоединяться?) "к удалённому хосту" (тем более к удалённому хосту!) " и тут же отсоединяется." (совсем плохой сервер)...
Или ты подразумеваешь под сервером всю прогу?
		
	  
			 
	
		 
    
       
    
Номер ответа: 13 
      
Автор ответа:
 Lister
![]()
![]()
![]()
ICQ: 298621256 
Вопросов: 57
Ответов: 304
      
 Профиль |  | #13
       
Добавлено:  26.02.05 11:44
       
    
       
  
 
    
Localhost, порт 1111 - это соединение с прокси-сервером
прокси-сервер
а какже иначе???
еще как присоединяется 
 к pop.yandex.ru
конечно к удаленному хосту!
Именно так. Я поставил Debug.print "отсоединяюсь" в wsClient_Close