Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проверка почты [D7]


Novichok_New ©   (2007-02-17 16:27:00) 

Создаю свою программу для приёма/передачи почты с помощью бесплатного компонента «SakEmail»:

procedure TForm1.CntClick(Sender: TObject);
begin
    SakPOP1.Host := EditHost.text;
    SakPOP1.UserId := EditUserId.text;
    SakPOP1.UserPasswd := EditPasswd.text;
    StatusBar1.Panels[0].text := 'Wait a moment, please...';
    SakPOP1.connect;
    if SakPOP1.POPError then
    begin
        MessageDlg( 'Connect failed. Maybe the server is down or not responding.',
                    mtError, [mbOk], 0);
        exit;
    end;
    if not SakPOP1.login then
    begin
         ShowMessage('Unauthorized access...');
         exit;
    end;
    SakPOP1.Init;
    showMessage( 'You have ' + intToStr( SakPOP1.NewMsgsCount) + ' new msg(s) of ' +
                 intToStr( SakPOP1.MsgsCount));
    BtnCancel.Enabled := true;
    sakPOP1.retrieveAllMessages( SakMsgList1);
    BtnCancel.Enabled := false;
    SakPOP1.Disconnect;
    if SakMsgList1.count > 0 then
    begin
         currentMsg := 0;
         showCurrentMsg;
    end;
    StatusBar1.Panels[0].text := 'Done. ' + intToStr( SakMsgList1.count) + ' msgs retrieved.';
end;


За отсутствие документации к оному, появилось несколько вопросов:
1. Как прописать сюда код для кнопки «Стоп», прерывающей приём почты?
2. Как дополнить код следующим:при завершении загрузки письма автоматически удалять его с сервера. Если к письму существует «аттачмент», то не удалять письмо и задать вопрос – загрузить файл сейчас или сделать это позже? Соответственно, как из данного кода «выдернуть» строки отвечающие за загрузку аттачмента, чтобы сделать это позже?


Dmitrij_K   (2007-02-19 23:07:00) [1]


> Novichok_New ©   (19.02.07 16:55) [12]

ЭТО ВОПРОС?
Вытянуть можно все что есть в заголовке сообщения


Novichok_New   (2007-02-19 16:55:00) [2]

Если да, то из ниже перечисленного можно "выудить" из POP3.RetrieveHeader(intIndex, IdMessage);

Label1.Caption := IdMessage.From.Text;
Label2.Caption := IdMessage.Recipients.EmailAddresses;
Label3.Caption := IdMessage.CCList.EMailAddresses;
Label4.Caption := IdMessage.Subject;
Label5.Caption := FormatDateTime('dd mmm yyyy hh:mm:ss', IdMessage.Date);
Label6.Caption := IdMessage.ReceiptRecipient.Text;
Label7.Caption := IdMessage.Organization;


Novichok_New   (2007-02-19 16:55:00) [3]

Если да, то что из ниже перечисленного можно "выудить" из POP3.RetrieveHeader(intIndex, IdMessage);

Label1.Caption := IdMessage.From.Text;
Label2.Caption := IdMessage.Recipients.EmailAddresses;
Label3.Caption := IdMessage.CCList.EMailAddresses;
Label4.Caption := IdMessage.Subject;
Label5.Caption := FormatDateTime('dd mmm yyyy hh:mm:ss', IdMessage.Date);
Label6.Caption := IdMessage.ReceiptRecipient.Text;
Label7.Caption := IdMessage.Organization;


Novichok_New   (2007-02-19 16:48:00) [4]

Я правильно понимаю:

POP3.Connect; // подключение по протоколу POP3
POP3.RetrieveHeader(intIndex, IdMessage); //ТОЛЬКО ЗАГОЛОВОК ПИСЬМА :-)
POP3.Retrieve(1,IdMessage); // получение сообщения с body
POP3.Disconnect; // разрыв связи


???


Dmitrij_K   (2007-02-19 16:12:00) [5]

В Indy функция так и называется "Получить Заголовок" по-английски.


Novichok_New   (2007-02-19 16:02:00) [6]

можно только загружать отдельно заголовок или заголовок+несколько строк тела письма...

Друг, как?!? Второй день, перерыл везде - одни упоминания, что подобное возможно! Indy, FastNet, SakEmail... пример бы для чего-угодно!
Плиз...
~~:-(


Dmitrij_K   (2007-02-18 18:53:00) [7]


> как отделять аттачмент от письма, или (лучше) как загружать
> письмо по – частям (отдельно «Тема», отдельно «Текст письма»
> … «аттачмент»)?

AFAIK
можно только загружать отдельно заголовок или заголовок+несколько строк тела письма. Отдельно загрузить аттач или текст письма не получится


Novichok_New   (2007-02-18 18:39:00) [8]

Народ!
Неужели нет способа проверить почту без закачки вложений?


Novichok_New   (2007-02-18 09:45:00) [9]

Мне главное – узнать: как отделять аттачмент от письма, или (лучше) как загружать письмо по – частям (отдельно «Тема», отдельно «Текст письма» … «аттачмент»)?
Если с удалением писем с сервера ещё как-то можно разобраться, то про такие операции никто не писал!


Novichok_New   (2007-02-18 09:39:00) [10]

Можно поставить вопрос по-другому:
- как загрузить только заголовки (От, Кому, Тема, Дата);
- после выбора писем пользователем (допустим, с помощью CheckBox-ов в ListView) загрузить только эти письма;
- полностью очистить почтовый ящик;


Novichok_New   (2007-02-18 08:50:00) [11]

Может, действовать по аналогии с другими компонентами?
Как, например, при использовании Indy удалять письмо с сервера и прерывать приём почты?


S@shka   (2007-02-17 22:47:00) [12]

Ответ на данный вопрос - не возможен

ибо "За отсутствие документации к оному"

+ BtnCancel.Enabled := true;
   sakPOP1.retrieveAllMessages( SakMsgList1);
   BtnCancel.Enabled := false;

 retriveALL - не предполагает прерывания....

Итог: Читать по одному сообщению через а-ля retriveMessage (messageID)


Novichok_New   (2007-02-17 16:41:00) [13]

На первый вопрос я предполагаю ответ:

procedure TForm1.BtnCancelClick(Sender: TObject);
begin
 SakPOP1.Cancel;
end;


Но,ведь, для чего-то BtnCancel.Enabled := false - написали! Значит, в процессе приёма почты, нажатие на неё может вызвать ошибку?


Наверх

Титульная страница Поиск, карта сайта Написать письмо