Próbuję stworzyć notyfikator pocztowy, który by informował o nowej poczcie i wyświetlał stosowny komunikat. Niby działa, ale tylko za pierwszym razem. Za każdym kolejnym (mimo iż poczty przybywa - bo przysyłam na maila z innego konta wiadomości) notyfikator nie wykrywa ilości zmian i nie informuje o tym.
Uzywam C++ Builder 2007 Enterprise z pakietem INDY. Gdyby ktoś mógł spojrzeć, co jest nie tak, bo ja już głupi jestem.
Dla połączenia nieszyfrowanego:
- Kod: Zaznacz cały
void TForm1::Polaczenie()
{
if (IdPOP31->Connected() == true) {
IdPOP31->Disconnect();
}
IdPOP31->Host=Edit3->Text;
IdPOP31->Username=Edit5->Text;
IdPOP31->Password=Edit6->Text;
IdPOP31->Port=Edit4->Text.ToInt();
il_wiad=Label7->Caption.ToInt();
IdPOP31->Connect();
nowa_ilosc=IdPOP31->CheckMessages();
IdPOP31->Retrieve(nowa_ilosc, IdMessage1);
if (nowa_ilosc > il_wiad) {
ShowMessage("Odbieranie wiadomości: " + IntToStr(nowa_ilosc) + " Od: " + IdMessage1->From->Text + " Temat: " + IdMessage1->Subject);
Label7->Caption=nowa_ilosc;
}
IdPOP31->Disconnect();
}
Dla połączenia szyfrowanego:
- Kod: Zaznacz cały
void TForm1::PolaczenieSzyfrowane()
{
if (IdPOP31->Connected() == true) {
IdPOP31->Disconnect();
}
TIdSSLIOHandlerSocketOpenSSL *IdSSLIOHandlerSocketOpenSSL1;
IdSSLIOHandlerSocketOpenSSL1 = new TIdSSLIOHandlerSocketOpenSSL(this);
IdPOP31->IOHandler=IdSSLIOHandlerSocketOpenSSL1;
IdPOP31->UseTLS=utUseImplicitTLS;
IdSSLIOHandlerSocketOpenSSL1->Port=Edit4->Text.ToInt();
IdSSLIOHandlerSocketOpenSSL1->Host=Edit3->Text;
IdSSLIOHandlerSocketOpenSSL1->UseNagle=false;
IdSSLIOHandlerSocketOpenSSL1->SSLOptions->Method=sslvSSLv2;
IdSSLIOHandlerSocketOpenSSL1->SSLOptions->Mode=sslmUnassigned;
IdSSLIOHandlerSocketOpenSSL1->Destination=Edit3->Text+":"+Edit4->Text;
IdSSLIOHandlerSocketOpenSSL1->DefaultPort=Edit4->Text.ToInt();
IdSSLIOHandlerSocketOpenSSL1->ReadTimeout=100;
IdPOP31->Host=Edit3->Text;
IdPOP31->Username=Edit5->Text;
IdPOP31->Password=Edit6->Text;
IdPOP31->Port=Edit4->Text.ToInt();
il_wiad=Label7->Caption.ToInt();
IdPOP31->Connect();
nowa_ilosc = IdPOP31->CheckMessages();
IdPOP31->Retrieve(nowa_ilosc, IdMessage1);
if (nowa_ilosc > il_wiad) {
ShowMessage("Odbieranie wiadomości: " + IntToStr(nowa_ilosc) + " Od: " + IdMessage1->From->Text + " Temat: " + IdMessage1->Subject);
Label7->Caption=nowa_ilosc;
}
IdPOP31->Disconnect();
delete IdSSLIOHandlerSocketOpenSSL1;
}
Zmienne il_wiad oraz nowa_ilosc są zmiennymi globalnymi, zadeklarowanymi poprawnie. Label7 wyświetla ilość wiadomości, a nowa_wartość jest pobierana poprzez CheckMessages() i porównywana ze "starą wartością" il_wiad.
Dziękuje za wszelkie dobre rady.