und nochmal Indy, diesmal IdMessage



  • Hi,

    hab ein komisches problem mit IdMessage von den indy Komponenten.

    Wenn ich folgen code ausführe werden alle Emails vom entsprechendem Konto abgeholt und in eine ListView geschrieben. das funzt auch.

    1. Code
    [cpp]
    frmMain->POP3->Host = EmailAccounts->ReadString("0", "POP3", "");
    frmMain->POP3->Port = StrToInt(EmailAccounts->ReadString("0", "POP3Port", ""));
    frmMain->POP3->UserId = EmailAccounts->ReadString("0", "Konto", "");
    frmMain->POP3->Password = EmailAccounts->ReadString("0", "Passwort", "");

    frmMain->POP3->Connect();
    frmMain->POP3->CheckMessages();
    frmMain->POP3->RetrieveMailBoxSize();

    int mcount = frmMain->POP3->CheckMessages();

    if(mcount > 0)
    {
    for (; mcount > 0; mcount--)
    {
    frmMain->POP3->Retrieve(mcount, frmMain->Message);

    TListItem *InsertItem =
    frmEmailsEmpfangen->EmpfangeneEmails->Items->Add();

    InsertItem->Caption = frmMain->Message->From->Text;
    InsertItem->SubItems->Add(frmMain->Message->Subject);
    InsertItem->SubItems->Add(frmMain->Message->Date);
    InsertItem->SubItems->Add(frmMain->Message->Priority);
    frmMain->Message->Clear();
    }// for
    }// if
    frmMain->POP3->Disconnect();
    }// if[/cpp]

    allerdings funktioniert dann der code im SelectItem vom ListView nicht!

    2. Code

    EmailInhalt->Lines->Add(frmMain->Message->Body->Text);
    

    Wenn ich jetzt allerdings das wie oben fett makierte

    frmMain->Message->Clear();
    

    nicht mit ausführe, wird nur EINE Email abgerufen und wenn z.B. 2 emails da sind auch 2mal ins ListView eingrtragen. Dann funktioniert allerdings der 2. Code...also irgendwas mach ich da wohl falsch.
    Mit Message->BodyClear(); usw funzt es auch nicht, genauso wie das

    frmMain->Message->Clear();
    

    an andere stellen im code auszuführen. Alles erfolglos...

    Hoffe mal die indy Spezialisten wissen rat.

    Toadie



  • Wenn du nur eine IdMessage benutzt dann steht da natürlich auch nur eine Mail drin, und zwar die zuletzt abgeholte. Es gibt drei Möglichkeiten:
    a) gleich in der Abrufschleife den Body jeder Nachricht abspeichern
    b) für jede Mail eine eigene IdMessage benutzen
    c) bei Bedarf jeweils die angewählte Mail nocheinmal vom Server laden und den Body auslesen.

    Ich würde a) wählen. 🙂



  • ahh danke schön. hatte keine ahnung das man da immer eine neue Message braucht.
    also bei Vorschlag a) müste ich das praktisch mit in die for schleief packen oder?



  • Ich persönlich würde die E-Mails per POP->RetrieveHeader(i, Message) empfangen. Geht schneller und erst bei Bedarf den Body nachladen (Doppelklick im ListView).



  • Toadie:
    Was habe ich denn bei a) geschrieben!? 😉

    Andidreas:
    Das ist allerdings nicht das übliche Verhalten von Email-Programmen, da eben nicht alle Leute über Flatrates und (Pseudo)Standleitungen verfügen. Es wäre wohl ziemlich lästig, beim Lesen der Emails jedesmal die DFÜ-Verbindung zu starten. 😉

    Allenfalls sollte man soetwas optional gestalten. Man lädt zB. Header, lässt den Benutzer eine Auswahl treffen und lädt dann nur die Bodies der selektierten Mails.

    Oder man implementiert auf diese Weise einen Spam-Filter, indem das Programm anhand der Header automatisch entscheidet, welche Mails überhaupt vom Server geholt werden sollen und welche gleich gelöscht werden können.

    Aber ich schweife ab. 🙂



  • Jansen
    Ich habe auch keine Flatrate. Und für die Zeit muß ich ja nicht die DFÜ-Verbindung beenden oder?

    MfG
    Andidreas



  • Nee, aber (mehr oder weniger) teuer bezahlen!?



  • Ich glaube wenn ich die Spammails vorher aussortiere und dann für den Rest mir den Body laden lasse, bin ich glaub ich besser dran. 😉



  • Du willst aber nicht wirklich eine Mail abholen, lesen, nächste abholen, lesen usw. !?

    Denn ansonsten ändert sich ja nichts am eigentlichen Problem, dem Abholen mehrerer Mails unmittelbar hintereinander. Ob nun alle Mails geholt werden oder nur eine Auswahl ist dabei ja irrelevant.



  • Ich hol mir nur die Header. Lösche Spam falls nicht schon automatisch aussortiert, starte dann Outlook. Ich mag es nämlich nicht, wenn man Regeln erstellt, die zwar die Regitry füllen aber ansonsten bei ständig wechselnden E-Mailadressen wertlos sind. Dann lieber eine INI-Datei. Die wird nur eingelesen wenn sie gebraucht wird. Und mit dem Body holen: so kann man schnell mal gucken ob diese eMail eventuell auch gelöscht werden kann.



  • Ach so, das ist ja gaaaanz was anderes! 😉

    Du hast also nur ein Vorauswahl-Tool implementiert, die "Massenabholung" lässt du von einem externen Programm erledigen, welches dann intern selbst nach Prinzip a) arbeitet.

    Ich denke aber, dass es Toadie eigentlich um einen mehr oder weniger vollwertigen Email-Client geht, der die Mails selbst lokal verwaltet.



  • 🕶 Genau so isses 🕶



  • ok habs so probiert aber ohne wirkung. also langsam verzweifle ich 😞



  • Was genau funktioniert nicht. Vor allem darauf achten was für eine E-Mail Du bekommst, ob Text oder HTML.



  • Es ergibt keine änderung, problem wie oben ist immer noch. Meine Test Emails sind immer nur als Text gesendet.



  • frmMain->POP3->Host = EmailAccounts->ReadString("0", "POP3", "");
                frmMain->POP3->Port = StrToInt(EmailAccounts->ReadString("0", "POP3Port", ""));
                frmMain->POP3->UserId = EmailAccounts->ReadString("0", "Konto", "");
                frmMain->POP3->Password = EmailAccounts->ReadString("0", "Passwort", "");
    
                frmMain->POP3->Connect();
                frmMain->POP3->CheckMessages();
                frmMain->POP3->RetrieveMailBoxSize();
    
                int mcount = frmMain->POP3->CheckMessages();
    
                if(mcount > 0)
                {
                    for (; mcount > 0; mcount--)
                    {
                        frmMain->POP3->Retrieve(mcount, frmMain->Message);
    
                        TListItem *InsertItem =
                        frmEmailsEmpfangen->EmpfangeneEmails->Items->Add();
    
                        InsertItem->Caption = frmMain->Message->From->Text;
                        InsertItem->SubItems->Add(frmMain->Message->Subject);
                        InsertItem->SubItems->Add(frmMain->Message->Date);
                        InsertItem->SubItems->Add(frmMain->Message->Priority);
                        EmailInhalt->Lines->Add(frmMain->Message->Body->Text);frmMain->Message->Clear();
                        Message->Clear();
                    }// for
                }// if
                frmMain->POP3->Disconnect();
            }// if
    

    Versuchs mal so rum.

    MfG
    Andidreas

    [ Dieser Beitrag wurde am 06.01.2003 um 14:12 Uhr von Andidreas editiert. ]



  • frmMain->POP3->Host = EmailAccounts->ReadString("0", "POP3", "");
                frmMain->POP3->Port = StrToInt(EmailAccounts->ReadString("0", "POP3Port", ""));
                frmMain->POP3->UserId = EmailAccounts->ReadString("0", "Konto", "");
                frmMain->POP3->Password = EmailAccounts->ReadString("0", "Passwort", "");
    
                frmMain->POP3->Connect();
                frmMain->POP3->CheckMessages();
                frmMain->POP3->RetrieveMailBoxSize();
    
                int mcount = frmMain->POP3->CheckMessages();
    
                if(mcount > 0)
                {
                    for (; mcount > 0; mcount--)
                    {
                        frmMain->POP3->Retrieve(mcount, frmMain->Message);
    
                        TListItem *InsertItem =
                        frmEmailsEmpfangen->EmpfangeneEmails->Items->Add();
    
                        InsertItem->Caption = frmMain->Message->From->Text;
                        InsertItem->SubItems->Add(frmMain->Message->Subject);
                        InsertItem->SubItems->Add(frmMain->Message->Date);
                        InsertItem->SubItems->Add(frmMain->Message->Priority);
                        EmailInhalt->Lines->Add(frmMain->Message->Body-Text);             
                        frmMain->Message->Clear();
                    }// for
                }// if
                frmMain->POP3->Disconnect();
            }// if
    

    Versuchs mal so rum

    MfG
    Andidreas



  • Hi!

    sollen deine mails im html-format gesendet werden?



  • Lesen lernen 😉 . Er sendet nicht sondern holt seine eMails ab.



  • Es ergibt keine änderung, problem wie oben ist immer noch. Meine Test Emails sind immer nur als Text gesendet.

    Ich kann lesen 😮 , habe aber nicht mitgekriegt das es noch eine seite gebt.


Anmelden zum Antworten