Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Работа с POP3 сервером

Ответить
Настройки темы
[решено] Работа с POP3 сервером

Аватара для morgan1991

Старожил


Сообщения: 398
Благодарности: 13

Профиль | Сайт | Отправить PM | Цитировать


Здравствуйте!
Помогиет пожалуйста понять в чём проблема:

Код: Выделить весь код
#include <GUIConstantsEx.au3>

TCPStartup()
$ConnectedSocket = -1
$ConnectedSocket = TCPConnect("94.100.177.6", 110)
If @error Then
    MsgBox(0, "", "Ошибка: " & @error)
    Exit
EndIf

Global $GuiMain = GUICreate("test", 300, 255)
Global $GuiEdit = GUICtrlCreateEdit("", 10, 10, 280, 180)
Global $GuiInput = GUICtrlCreateInput("", 10, 200, 280, 20)
Global $GuiButtonSend = GUICtrlCreateButton("Выслать =>>", 200, 225)
GUISetState()

While 1
    $msg = GUIGetMsg()
        If $msg = $GUI_EVENT_CLOSE Then Exit

    If $msg = $GuiButtonSend Then
        GUICtrlSetData($GuiEdit, _
            "Я" & " > " & GUICtrlRead($GuiInput) & @CRLF & GUICtrlRead($GuiEdit))
        TCPSend($ConnectedSocket, GUICtrlRead($GuiInput))
        If @error Then Exit
    EndIf

    $recv = TCPRecv($ConnectedSocket, 2048)
    If @error Then Exit
    If $recv <> "" Then GUICtrlSetData($GuiEdit, _
            "pop3" & " > " & $recv & @CRLF & GUICtrlRead($GuiEdit))
WEnd
IP адрес в скрипте адрес mail.ru сервера...
Скрипт коннектится показывает ответ сервера +OK, но когда я ввожу команду и нажимаю отправить сервер не отвечает....
Скажите пожалуйста как это исправить?
И ещё вопросик как узнать IP адрес сервера?
Например я ввожу pop.mail.ru, а скрипт должен мне показать 94.100.177.6

-------
Хочу научиться писать драйвера на с++


Отправлено: 16:19, 04-08-2009

 

Аватара для morgan1991

Старожил


Сообщения: 398
Благодарности: 13

Профиль | Сайт | Отправить PM | Цитировать


amel27, спасибо помогло.
Дальше сделал так:

Код: Выделить весь код
$ExtraPuTTY = EnvGet("ExtraPuTTY") ; путь к программе
$thConn = DllStructCreate("ulong") ; структура описателя соединения
If $ExtraPuTTY == "" Then MsgBox(16, "Script Error!", "Переменная окружения ExtraPuTTY не задана!")
; Открываем DLL
$hDll = DllOpen($ExtraPuTTY & "\ExtraPuTTY.dll")
If $hDll=-1 Then MsgBox(16, "Script Error!", "Файл ExtraPuTTY.DLL не найден!")
; Подключаемся...
$aRet = DllCall($hDll, "int", "Connexion", _
    "str", "94.100.177.6", _           ; TargetName (TargetName or PuttySession Name )
    "ptr", DllStructGetPtr($thConn), _ ; ConnexionId (Connexion Handle)
    "str", "", _                       ; Login
    "str", "", _                       ; Password
    "int", 0, _                        ; ShowPuTTY (TRUE: Putty Terminal is display, FALSE: not display)
    "int", 0, _                        ; Protocol (0:Telnet,1:SSH,2:Rlogin,3:Raw,4:LoadPutty Session)
    "int", 110, _                      ; PortNumber (If the parameter is set to 0, the value of the default settings of putty is used)
    "int", 0, _                        ; GenerateReport (1:extraputty report activate,0:Not activate)
    "ptr", 0 )                         ; CallBackRcvData
; Анализируем результат
If @error Then MsgBox(16, "DllCall Error!", @error &":"& @extended)
$hConn = DllStructGetData($thConn, 1) ; Получаем описатель соединения
ConsoleWrite("Результат выполнения ф-ции Connexion = "& $aRet[0] &@CRLF)

$aRet2 = DllCall($hDll, "int", "SendRcvData", _
    "ptr", DllStructGetPtr($thConn), _
    "str", "USER ЛОГИН", _
    "int", 1, _
    "str", "com", _
    "int", 1000, _
    "int", 1, _
    "int", 2048, _
    "int", 0)
ConsoleWrite("Результат выполнения ф-ции SendRcvData = "& $aRet2[0] &@CRLF)

; Закрываем соединение
If $hConn <> 0 Then
    DllCall($hDll, "int", "CloseConnexion", "ulong", $hConn)
EndIf
А в ответ:

Цитата:
Результат выполнения ф-ции Connexion = 0
Результат выполнения ф-ции SendRcvData = 1
Что опять не так?

-------
Хочу научиться писать драйвера на с++


Отправлено: 14:37, 06-08-2009 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата morgan1991:
Что опять не так? »
путаешь указатели с данными
Код: Выделить весь код
$ExtraPuTTY = EnvGet("ExtraPuTTY") ; путь к программе
$thConn = DllStructCreate("ulong") ; структура описателя соединения
If $ExtraPuTTY == "" Then Exit MsgBox(16, "Script Error!", "Переменная окружения ExtraPuTTY не задана!")
$hDll = DllOpen($ExtraPuTTY & "\ExtraPuTTY.dll")
If $hDll=-1 Then Exit MsgBox(16, "Script Error!", "Файл ExtraPuTTY.DLL не найден!")

$aRet = DllCall($hDll, "int", "Connexion", _
    "str", "94.100.177.6", "ptr", DllStructGetPtr($thConn), _
    "str", "", "str", "", "int", 0, _
    "int", 0, "int", 110, _
    "int", 0, "ptr", 0 )
If @error Then MsgBox(16, "DllCall Error!", @error &":"& @extended)
$hConn = DllStructGetData($thConn, 1) ; Получаем описатель соединения
ConsoleWrite("Результат выполнения ф-ции Connexion = "& $aRet[0] &@CRLF)

$iMax = 1024                                          ; размер буфера
$tBuf = DllStructCreate("char["& $iMax &"]")          ; буфер
$tpBuf = DllStructCreate("ptr")                       ; указатель на буфер
DllStructSetData($tpBuf, 1, DllStructGetPtr($tBuf))   ; устанавливаем указатель

$aRet = DllCall($hDll, "int", "SendRcvData", _
    "ulong", $hConn, "str", "USER ivan@mybox.ru", _
    "str", "", "str", "", "long", 1000, _
    "int", DllStructGetPtr($tpBuf), "int", $iMax, _
    "int", 0)
ConsoleWrite("Результат выполнения ф-ции SendRcvData = "& $aRet[0] &@CRLF)
ConsoleWrite("Содержимое буфера:"& DllStructGetData($tBuf,1) &@CRLF)

; Закрываем соединение
If $hConn <> 0 Then
    DllCall($hDll, "int", "CloseConnexion", "ulong", $hConn)
EndIf
З.Ы. в комплекте идет скомпиленый пример "SampleConnexion.exe" - полезная тулза для ручной установки соединения и проверки всех TELNET-команд
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:17, 07-08-2009 | #12


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо автору. Он сделал все совершенно верно в изначальном коде и без сторонних утилит. Я тоже убил сутки на раскрычивание этого дела, а стоило прочитать спецификацию pop3. Каждая команда оканчивается символом CRLF (перенос каретки).

Изначальный код верен с добавлением этого символа

Отправлено: 21:40, 28-01-2011 | #13



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Работа с POP3 сервером

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Работа с сервером MySql Smile Программирование и базы данных 0 14-10-2009 19:27
V. 5.5/2000/2003 - [решено] аутентификация пользователя по POP3 Greg106 Microsoft Exchange Server 6 13-10-2009 17:29
V. 2007 - [решено] Внешние POP3 клиенты, релей писем sgww Microsoft Exchange Server 9 25-08-2009 12:37
[решено] Telnet или POP3? stone_wings Хочу все знать 2 07-04-2008 23:47
Работа с POP3 Vovius Программирование и базы данных 1 06-05-2006 18:05




 
Переход