void __fastcall TForm1::Button1Click(TObject *Sender)
{
//Отправка сообщения
ClientSocket1->Socket->SendBuf((Edit1->Text+"\r\n").c_str(),Edit1->Text.Length()+2);
}
//-----------------------------------------------
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
//Прием сообщения
char buf[1024];
while(Socket->ReceiveLength())
{
Socket->ReceiveBuf(buf,1023);
Memo2->Lines->Append(buf);
}
}
//-----------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//Подключение к серверу
ClientSocket1->Open();
}
Pop3-протокол
http://www.codenet.ru/webmast/pop3.php
Как заюзаться этим в Дельфи. Пробовал с помощью ClientSocket. Подключаюсь. Пытаюсь отправить команду USER но не получаю ответа (отправляю методом SendText)? В чем дело, не подскажите, если можете, подскажите примером.
НА вашем сайте нашел описание протокола POP3.
Как заюзаться этим в Дельфи. Пробовал с помощью ClientSocket. Подключаюсь. Пытаюсь отправить команду USER но не получаю ответа (отправляю методом SendText)? В чем дело, не подскажите, если можете, подскажите примером.
Код:
Перевести это на Дельфи труда не составит. Не забудь прописать в Host поп3 сервер, а в Port 110 порт.
Честно говоря в С++ я не в зуб ногой :) так что если не сложно, то можно на Дельфи?
Цитата:
Originally posted by gh05t
Честно говоря в С++ я не в зуб ногой :) так что если не сложно, то можно на Дельфи?
Честно говоря в С++ я не в зуб ногой :) так что если не сложно, то можно на Дельфи?
Код:
<Обработчик Нажатия клавищи>
begin
ClientSocket1.Socket.SendBuf(<Здесь идет команда серверу с переходом на новую строку на конце>,
<Длинна этой самой команды>);
end;
//-----------------------------------------------
<Обработчик ClientSocket Read>
var
buf = array [0..1024] of char;
begin
while Socket.ReceiveLength > 0 do
begin
Socket.ReceiveBuf(buf,1023);
Memo2.Lines.Append(buf);
end;
end;
//-----------------------------------------------
<Другой обработчик Нажатия клавищи>
{
ClientSocket1.Open;
}
begin
ClientSocket1.Socket.SendBuf(<Здесь идет команда серверу с переходом на новую строку на конце>,
<Длинна этой самой команды>);
end;
//-----------------------------------------------
<Обработчик ClientSocket Read>
var
buf = array [0..1024] of char;
begin
while Socket.ReceiveLength > 0 do
begin
Socket.ReceiveBuf(buf,1023);
Memo2.Lines.Append(buf);
end;
end;
//-----------------------------------------------
<Другой обработчик Нажатия клавищи>
{
ClientSocket1.Open;
}
Цитата:
Originally posted by lord Kelvin
Код:
<Обработчик Нажатия клавищи>
begin
ClientSocket1.Socket.SendBuf(<Здесь идет команда серверу с переходом на новую строку на конце>,
<Длинна этой самой команды>);
end;
//-----------------------------------------------
<Обработчик ClientSocket Read>
var
buf = array [0..1024] of char;
begin
while Socket.ReceiveLength > 0 do
begin
Socket.ReceiveBuf(buf,1023);
Memo2.Lines.Append(buf);
end;
end;
//-----------------------------------------------
<Другой обработчик Нажатия клавищи>
{
ClientSocket1.Open;
}
begin
ClientSocket1.Socket.SendBuf(<Здесь идет команда серверу с переходом на новую строку на конце>,
<Длинна этой самой команды>);
end;
//-----------------------------------------------
<Обработчик ClientSocket Read>
var
buf = array [0..1024] of char;
begin
while Socket.ReceiveLength > 0 do
begin
Socket.ReceiveBuf(buf,1023);
Memo2.Lines.Append(buf);
end;
end;
//-----------------------------------------------
<Другой обработчик Нажатия клавищи>
{
ClientSocket1.Open;
}
Gk большей части я и сам разобрался. Единственный вопрос: в методе SendBuf оба параметра-целые числа, а мне первым надо отправлять строку. Как? Через указатель на строку пробовал - не канает :(
Код:
var
St:TMemoryStream;
p:^Byte;
Size:Integer;
begin
ClientSocket1.Open;
St:=TMemoryStream.Create;
St.LoadFromFile(Edit1.Text);
Size:=St.Size;
ClientSocket1.Socket.SendBuf(Size, SizeOf(Size));
p:=St.Memory;
Size:=ClientSocket1.Socket.SendBuf(p^, St.Size);
St.Free;
St:TMemoryStream;
p:^Byte;
Size:Integer;
begin
ClientSocket1.Open;
St:=TMemoryStream.Create;
St.LoadFromFile(Edit1.Text);
Size:=St.Size;
ClientSocket1.Socket.SendBuf(Size, SizeOf(Size));
p:=St.Memory;
Size:=ClientSocket1.Socket.SendBuf(p^, St.Size);
St.Free;
Нашел на конкурирующем форуме, потому ссылку дать не имею права.=)
Цитата:
Originally posted by lord Kelvin
Нашел на конкурирующем форуме, потому ссылку дать не имею права.=)
Код:
var
St:TMemoryStream;
p:^Byte;
Size:Integer;
begin
ClientSocket1.Open;
St:=TMemoryStream.Create;
St.LoadFromFile(Edit1.Text);
Size:=St.Size;
ClientSocket1.Socket.SendBuf(Size, SizeOf(Size));
p:=St.Memory;
Size:=ClientSocket1.Socket.SendBuf(p^, St.Size);
St.Free;
St:TMemoryStream;
p:^Byte;
Size:Integer;
begin
ClientSocket1.Open;
St:=TMemoryStream.Create;
St.LoadFromFile(Edit1.Text);
Size:=St.Size;
ClientSocket1.Socket.SendBuf(Size, SizeOf(Size));
p:=St.Memory;
Size:=ClientSocket1.Socket.SendBuf(p^, St.Size);
St.Free;
Нашел на конкурирующем форуме, потому ссылку дать не имею права.=)
Ты загружаешь поток из файла по пути в Edit1, а мне надо само содержимое этого поля. Или предлагаешь все команды писать в отдельные файлы? :)
Тогда убери ЛадФромФиле.=) Я просто код по теме нашел, а вот проверить забыл.=)) Главное помни, что на конце строки отправляемой в pop3 =) должен быть символ перехода на другую строку. (В си - \r\n, в делфи - не знаю)
Цитата:
Originally posted by lord Kelvin
Тогда убери ЛадФромФиле.=) Я просто код по теме нашел, а вот проверить забыл.=)) Главное помни, что на конце строки отправляемой в pop3 =) должен быть символ перехода на другую строку. (В си - \r\n, в делфи - не знаю)
Тогда убери ЛадФромФиле.=) Я просто код по теме нашел, а вот проверить забыл.=)) Главное помни, что на конце строки отправляемой в pop3 =) должен быть символ перехода на другую строку. (В си - \r\n, в делфи - не знаю)
#10
Цитата:
Originally posted by WereWolf
#10
#10
Вообще то #13+#10. Спасибо, в этом и заключался глюк. Теперь все работает
Народ, а кто знает как обработать вложения в протоколе, а? :roll: