Страница: 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