Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 11.05.2014
Сообщений: 147
1

Pop3 протокол с winsock

03.11.2015, 01:14. Показов 1404. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
есть программа, которая работает как почтовый клиент. с smtp не было особых проблем. всё отлично отправляет. а вот читать не особо хочет...
чуть ниже текст процедуры.

застревает на строке
Delphi
1
 while pos(#13, _tempStr)>0 do
зависает и... всё. потом, конечно "отвисает", но текст письма не показывает


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
procedure TForm1.ReadMailClick(Sender: TObject);
var
 _buff:array [0..256] of Char;
 i, j:integer;
 _tempStr:AnsiString;
 _size:integer;
begin
 if MailListView.Selected = nil then
  Exit;
 
 _size:=strToInt(MailListView.Selected.SubItems.Strings[0]);
 i:=0;
 
 AddToLog('Попытка загрузки письма...');
 
 SendToSocket(_popSocket, 'RETR '+IntToStr(MailListView.Selected.Index+1));
 AddToLog(ReadFromSocket(_popSocket));
 Sleep(1000);
 
 while i<=_size do
 begin
  if _size-i<256 then
  begin
   fillchar(_buff, sizeof(_buff),#0);
   j:=_size-i+50;
   recv(_popSOcket, _buff, j, 0);
 
    _tempStr:=_tempStr+_buff;
    Break;
    Exit;
  end;
 
  fillchar(_buff, length(_buff), #0);
  i := i+recv(_popSocket, _buff, length(_buff), 0);
  _tempStr:=_tempStr+_buff;
 end;
 
 TextMemo2.Lines.Clear;
 
 while pos(#13, _tempStr)>0 do
 begin
  TextMemo2.Lines.Add(Copy(_tempStr, 1, pos(#13, _tempStr)));
  Delete (_tempStr, 1, pos(#13, _tempStr)+1);
 end;
 
 TextMemo2.Lines.Add(_tempStr);
end;
будьте добры, подскажите, в чём проблема?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2015, 01:14
Ответы с готовыми решениями:

Pop3
Подскажите что надо сделать, у меня программка читает письмо procedure...

Возможности POP3
привет всем)))) у мя проблемка с которой надо быстро справится и сам не могу ))) прошу вашей помощи...

Авторизация POP3
Вот, решил сделать клиент чисто для себя с уведомлениями и т.д. Т.к. почта у меня на mail.ru тут...

Не принимает письма по pop3
procedure TForm2.Button2Click(Sender: TObject); begin IdPOP31.Host:=pop.gmail.com; //Хост...

14
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
03.11.2015, 09:37 2
Лучший ответ Сообщение было отмечено Влад908 как решение

Решение

Цитата Сообщение от Влад908 Посмотреть сообщение
while pos(#13, _tempStr)>0 do begin TextMemo2.Lines.Add(Copy(_tempStr, 1, pos(#13, _tempStr))); Delete (_tempStr, 1, pos(#13, _tempStr)+1); end;
Что это вообще за шняга ?
Почему не сделать просто и понятно

Delphi
1
TextMemo2.Lines.Text := _tempStr;
?
1
1 / 1 / 0
Регистрация: 11.05.2014
Сообщений: 147
03.11.2015, 11:22  [ТС] 3
mss, простите, пожалуйста, но и с этим куском не работает(

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
fillchar(_buff, length(_buff), #0);
  i := i+recv(_popSocket, _buff, length(_buff), 0);
  _tempStr:=_tempStr+_buff;
 end;
 
 TextMemo2.Lines.Clear;
 
 textmemo2.lines.text:=_tempStr;
 
{ while pos(#13, _tempStr)>0 do
 begin
  TextMemo2.Lines.Add(Copy(_tempStr, 1, pos(#13, _tempStr)));
  Delete (_tempStr, 1, pos(#13, _tempStr)+1);
 end;     }
 
 //TextMemo2.Lines.Add(_tempStr);
end;
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
03.11.2015, 11:31 4
Вот прямо так и говорит "не работаю" ?
1
1 / 1 / 0
Регистрация: 11.05.2014
Сообщений: 147
03.11.2015, 11:39  [ТС] 5
mss, нет, конечно. Зависает перед этой строкой в отладчике, а потом работа восстанавливается, секунд через 20 всё приходит в норму. Но он даже не очищает мемо
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
03.11.2015, 11:43 6
Цитата Сообщение от Влад908 Посмотреть сообщение
он даже не очищает мемо
Кто "он" ?
0
1 / 1 / 0
Регистрация: 11.05.2014
Сообщений: 147
03.11.2015, 11:44  [ТС] 7
mss, хорошо. Она. Процедура
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
03.11.2015, 11:52 8
Цитата Сообщение от Влад908 Посмотреть сообщение
хорошо. Она. Процедура
А разве процедура у тебя предназначена исключительно для очистки мемо ?
С каких щей ты ожидаешь после ее выполнения увидеть мемо чистым ?
0
1 / 1 / 0
Регистрация: 11.05.2014
Сообщений: 147
03.11.2015, 12:14  [ТС] 9
mss, вывод текста письма в мемо.
Там есть строка textmemo2.lines.clear, которая очищает мемо
Письмо может быть несколько, поэтому приходится очищать всё перед каждым чтением
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
03.11.2015, 12:25 10
Цитата Сообщение от Влад908 Посмотреть сообщение
Там есть строка textmemo2.lines.clear, которая очищает мемо
Ну а следом-то за очисткой идет заполнение !
Delphi
1
textmemo2.lines.text:=_tempStr;
С какого перепугу ты ожидаешь увидеть пустой мемо после его заполнения, если текст почт.сообщения заведомо непустой ?
0
1 / 1 / 0
Регистрация: 11.05.2014
Сообщений: 147
03.11.2015, 12:34  [ТС] 11
mss, не выводится текст письма. В этом и проблема. Глючит, в мемо текст письма не выводится
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
03.11.2015, 12:47 12
Цитата Сообщение от Влад908 Посмотреть сообщение
в мемо текст письма не выводится
Так ты же только что заявил что мемо у тебя не очищается !)

Раз мемо не очищается, значит в мемо что-то есть и ты это что-то видишь ?
А если там что-то есть и ты это что-то видишь, значит оно как-то туда попало ? Не с луны же оно свалилось - ты сам своими же ручками и добавил туда это что-то)
0
1 / 1 / 0
Регистрация: 11.05.2014
Сообщений: 147
03.11.2015, 12:53  [ТС] 13
mss, там только строка, которая висит изначально от мемо. Text - вот что изначально присутствует в ней.
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
03.11.2015, 13:15 14
Цитата Сообщение от Влад908 Посмотреть сообщение
там только строка, которая висит изначально
очищать мемо нужно методом Memo.Clear, а не Memo.Lines.Clear;
1
1 / 1 / 0
Регистрация: 11.05.2014
Сообщений: 147
06.11.2015, 02:08  [ТС] 15
mss, спасибо тебе большое! извини, что так запоздало)
сработало вот это
Delphi
1
TextMemo2.Lines.Text := _tempStr;
но на другом компе с win7. не знаю почему, но точно такое же приложение на 8.1. отказывается работать. не знаю, в чём причина, но да ладно)
0
06.11.2015, 02:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2015, 02:08
Помогаю со студенческими работами здесь

Pop3, проблема с кодировкой
!!!!!! Люди помогите проблема с кодировкой, пишу почтовый клиент, но в МЕМО выводит такую дребедень...

SSL, TLS и POP3
Друзья-программисты, очень нужна ваша помощь!!! Я бьюсь над созданием почтового клиента(не...

Pop3, авторизация на mail.ru
Помогите я не знаю как авторизация на mail.ru с помощью =)

Обработчик исключений в POP3
Здравствуйте. Создаю чтото типо почтового клиента. Код работает но есть одна маленькая проблемам....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru