Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Спецам в сетевом программировании Добавлено: 21.02.05 05:04  

Автор вопроса:  Lister | ICQ: 298621256 
Народ, может у кого есть пример почтового прокси-сервера?

Хочу написать посредник между почтовой программой и почтовым сервером - для добавления доп. заголовков к письму.

Нужны статьи, советы, примеры...

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #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-сайт: dasharm.com
 Профиль | | #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-сайт: neco.pisem.net
 Профиль | | #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 описал
Настраиваешь бат на работу с прокси localhost:99


Т.е, например

1) Создаю сервер на 99 порту, т.е
  Winsock.LocalPort = 99
  Winsock.Listen

Так?

2) Настраиваю Бат:
Почт.сервер localhost:99
Пользователь ???? А какого пользователя мне устраивать?
Пароль - что указывать?

3) Пытаюсь принять почту и ни черта не получается...

Ответить

Номер ответа: 7
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #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
    ;Debug.Print "Connected"
    ws.SendData "Hi"
End Sub

Private Sub ws_DataArrival(ByVal bytesTotal As Long)
    ;Dim tmpStr As String
    ws.GetData tmpStr
    ;Debug.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()
    ;Debug.Print "Приконнектился к рамблеру!"
End Sub
Private Sub wsClient_DataArrival(ByVal bytesTotal As Long)
    ;Dim strData As String
    wsClient.GetData strData
    If wsServer.State = 7 Then
        wsServer.SendData strData
        ;Debug.Print "Отослал бату:"; strData
    Else
        ;Debug.Print "Не могу отослать бату инфу, пришедшую от рамблера! ["; strData; "]"
    End If
End Sub

Private Sub wsServer_ConnectionRequest(ByVal requestID As Long)
    wsServer.Close
    wsServer.Accept requestID
    ;Debug.Print "Бат на связи!"
    wsClient.Connect "pop3.rambler.ru", 110
End Sub
Private Sub wsServer_DataArrival(ByVal bytesTotal As Long)
    ;Dim strData As String
    wsServer.GetData strData
    If wsClient.State = 7 Then
        wsClient.SendData strData
        ;Debug.Print "Отсылаю рамблеру:"; strData
    Else
        ;Debug.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-сайт: neco.pisem.net
 Профиль | | #9
Добавлено: 23.02.05 18:37
>пытаюсь второй раз проверить почту - в ответ "невозможно соединиться с сервером"
Всё правильно - код же сырой. 8)
Вставь ещё вот это и эта проблема исчезнет:
Private Sub wsServer_Close()
    wsClient.Close
    wsServer.Listen
End Sub
Но тебе ещё предстоит над этим кодом работать и работать. Во-первых винсок должен быть многоканальным, чтобы можно было принимать почту с двух ящиков одновременно. Во-вторых, создать несколько таких вот многоканальных винсоков, чтобы можно было принимать почту, к примеру, с четырёх ящиков из которых два на мэйле и два на рамблере (т.е. винсока уже должно быть два). В-третьих, испытать прогу на дураках - т.е. надо понавтыкать On Error Resume Next, If Err.Number>0 Then bla-bla-bla и т.д. и т.п.
Так что не считай, что всё сделано - чтобы прога хорошей получилась надо ещё и фейс написать приличный и доходчивый (чтобы юзеру не надо было перед использованием читать килограммовые хелпы по сетям). Так что всё только начинается - запасайся терпением. 8)

Ответить

Номер ответа: 10
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #10 Добавлено: 24.02.05 23:42
Еще небольшая загвоздка....

Сервер слушает порт. Проверяю ящики, вижу диалог... Все нормально.

Оставляю код работать. Затем проверяю ящики через несколько минут... Бат не может сединиться с сервером, т.к. тот, похоже присоединяется к удаленному хосту и тут же отсоединяется. Похоже на какой-то тайм-аут. Что это за ерунда, не знаешь случаем?

Ответить

Номер ответа: 11
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #11
Добавлено: 25.02.05 09:34

гы-гы, а попробуй ка этот сервер на аутлуке, принять письмо больше 1 мб... рзультат будет непредсказуем.

Ответить

Номер ответа: 12
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #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

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам