Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2022, 15:59   #1
Eugene_Stoun
Пользователь
 
Аватар для Eugene_Stoun
 
Регистрация: 14.06.2013
Сообщений: 56
Сообщение Почта в Delphi

Доброго времени суток! Есть вопрос, по поводу выгрузки списка писем в ListView. Вот код
Код:
procedure TForm1.N10Click(Sender: TObject);
var
  f, MessCount, NumOfMsgs:Integer; // Количество писем
begin
  IMAP.Username:='******@******.ru'; // адрес электронной почты в формате (xxx@xxx.xx)
  IMAP.Password:='**************'; //  пароль к данному почтовому ящику
  IMAP.Host:='mail';     // IMAP сервер 
  IMAP.Port:=StrToInt('143');     // порт

    IMAP.Connect;     // подключаемся
    IMAP.SelectMailBox('Inbox');
    //IMAP.RetrieveAllEnvelopes(IMAP.MailBox.MessageList);
    MessCount:=IMAP.MailBox.TotalMsgs;
    NumOfMsgs:=0;
    for f:=1 to MessCount do       //  записываем в NumOfMsgs количество писем
    // выводим сообщения в Мемо
    Memo1.Lines.Add('Подключение прошло успешно!');
    Memo1.Lines.Add('У вас '+IntToStr(MessCount)+' сообщений');
    IdMessage1.Clear;
    IMAP.Retrieve(MessCount, IdMessage1);
    ListView1.Clear;
    ListView1.Items.Add;
    ListView1.Items.Item[NumOfMsgs].Caption:=IdMessage1.From.Text;
    ListView1.Items.Item[NumOfMsgs].SubItems.Add(IdMessage1.Subject);
    ListView1.Items.Item[NumOfMsgs].SubItems.Add(DateToStr(IdMessage1.Date));
  IMAP.Disconnect;       // Для отключения
end;
Суть в том, что в ListView выводится только одно письмо последнее, как сделать так, чтобы все письма отображались в нем? Кстати в memo выводит правильную информацию о количестве писем. Подскажите где может быть ошибка? Спасибо заранее!
Учиться, учиться и еще раз учиться!
Eugene_Stoun вне форума Ответить с цитированием
Старый 15.04.2022, 16:16   #2
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Код:
IMAP.Retrieve(MessCount, IdMessage1);
Цитата:
Retrieves a message from a mailbox and marks it as read on the server.
function Retrieve(const AMsgNum: Integer; AMsg: TIdMessage): Boolean;
Parameters
const AMsgNum: Integer
Message number to retreive from the mailbox.

AMsg: TIdMessage
Stores the retrieved message headers, body, and attachments.
ForenLi вне форума Ответить с цитированием
Старый 16.04.2022, 01:55   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,887
По умолчанию

Цитата:
Сообщение от Eugene_Stoun Посмотреть сообщение
Доброго времени суток! Есть вопрос, по поводу выгрузки списка писем в ListView. Вот код
Код:
procedure TForm1.N10Click(Sender: TObject);
var
  f, MessCount, NumOfMsgs:Integer; // Количество писем
begin
  IMAP.Username:='******@******.ru'; // адрес электронной почты в формате (xxx@xxx.xx)
  IMAP.Password:='**************'; //  пароль к данному почтовому ящику
  IMAP.Host:='mail';     // IMAP сервер 
  IMAP.Port:=StrToInt('143');     // порт

    IMAP.Connect;     // подключаемся
    IMAP.SelectMailBox('Inbox');
    //IMAP.RetrieveAllEnvelopes(IMAP.MailBox.MessageList);
    MessCount:=IMAP.MailBox.TotalMsgs;
    NumOfMsgs:=0;
    for f:=1 to MessCount do       //  записываем в NumOfMsgs количество писем
    // выводим сообщения в Мемо
    Memo1.Lines.Add('Подключение прошло успешно!');
    Memo1.Lines.Add('У вас '+IntToStr(MessCount)+' сообщений');
    IdMessage1.Clear;
    IMAP.Retrieve(MessCount, IdMessage1);
    ListView1.Clear;
    ListView1.Items.Add;
    ListView1.Items.Item[NumOfMsgs].Caption:=IdMessage1.From.Text;
    ListView1.Items.Item[NumOfMsgs].SubItems.Add(IdMessage1.Subject);
    ListView1.Items.Item[NumOfMsgs].SubItems.Add(DateToStr(IdMessage1.Date));
  IMAP.Disconnect;       // Для отключения
end;
Суть в том, что в ListView выводится только одно письмо последнее, как сделать так, чтобы все письма отображались в нем? Кстати в memo выводит правильную информацию о количестве писем. Подскажите где может быть ошибка? Спасибо заранее!
Ошибок там несть числа. Такое впечатление что весь этот код собирался из найденного в помойке без всякой работы мысли.
Вот например:
1. Зачем нужна переменная NumOfMsgs если она не меняет своего значения?
2. Что делает цикл и зачем он это делает?
Код:
for f:=1 to MessCount do       
    Memo1.Lines.Add('Подключение прошло успешно!');
northener вне форума Ответить с цитированием
Старый 16.04.2022, 12:52   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,573
По умолчанию

Ну чтоб если не сразу поняли, что
Цитата:
'Подключение прошло успешно!'
Как в Госдуме: второе, третье и т.д. чтение
digitalis вне форума Ответить с цитированием
Старый 18.04.2022, 08:11   #5
Eugene_Stoun
Пользователь
 
Аватар для Eugene_Stoun
 
Регистрация: 14.06.2013
Сообщений: 56
По умолчанию

Ладно! Спасибо Вам уважаемые господа за помощь, мне до Вас очень далеко! Не буду отвлекать таких важных персон от работы глупыми вопросами! Извините, что отнял Ваше драгоценное время!
Учиться, учиться и еще раз учиться!
Eugene_Stoun вне форума Ответить с цитированием
Старый 18.04.2022, 10:50   #6
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Ну, выеживайтесь дальше, вместо того, чтобы один раз прочитать.
ForenLi вне форума Ответить с цитированием
Старый 19.04.2022, 09:26   #7
Eugene_Stoun
Пользователь
 
Аватар для Eugene_Stoun
 
Регистрация: 14.06.2013
Сообщений: 56
По умолчанию

Сделал. Теперь в ListView выводится список писем.
Код:
procedure TForm1.N10Click(Sender: TObject);//Получаем список писем
var
MailCout,i,c: integer;
begin
  MailCout:=0;
  ListView1.Clear;
  Memo1.Lines.Clear;
  IMAP.Username:='***@***.ru'; (xxx@xxx.xx)
  IMAP.Password:='**********'; 
  IMAP.Host:='***';     
  IMAP.Port:=***;     
 IMAP.Connect;
 IMAP.SelectMailBox('INBOX');
 MailCout:=IMAP.MailBox.TotalMsgs;
if MailCout>0 then
begin
c:=0;
for i:= 1 to MailCout do
begin
IMESSAGE.Clear;
IMESSAGE.ClearBody;
if IMAP.Retrieve(i, IMESSAGE) then
begin
    ListView1.Items.Add;
    ListView1.Items.Item[c].Caption:=IMESSAGE.From.Text;
    ListView1.Items.Item[c].SubItems.Add(IMESSAGE.Subject);
    ListView1.Items.Item[c].SubItems.Add(DateToStr(IMESSAGE.Date));
    ListView1.Items.Item[c].SubItems.Add(TimeToStr(IMESSAGE.Date));
    inc(c);
end;
end;
end;
end;
Учиться, учиться и еще раз учиться!
Eugene_Stoun вне форума Ответить с цитированием
Старый 19.04.2022, 10:30   #8
Foreseen
Техножрец
Форумчанин
 
Аватар для Foreseen
 
Регистрация: 04.07.2014
Сообщений: 289
По умолчанию

Цитата:
Сообщение от Eugene_Stoun Посмотреть сообщение
ListView1.Items.Item[c]
Тут можно обойтись переменной-счетчиком i в качестве индекса и не создавать лишнюю переменную
— Двери есть везде. Просто нужно знать, как в них войти.
Foreseen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почта в Delphi Антон Иванчин Общие вопросы Delphi 12 18.10.2016 15:44
Delphi и Windows Live (почта) Антон Иванчин Общие вопросы Delphi 7 04.10.2016 14:34
Почта jino через Delphi Тагир Помощь студентам 1 21.06.2012 04:09
Delphi - эл.почта Vaha11788 Работа с сетью в Delphi 1 23.09.2011 18:03