Indy Email versenden



  • Hmmmm Da gibts (von meiner SIcht) nicht viel zu kritisieren. Ausser die lausige Formatierung der sourcen.
    Die Lesbarkeit liegt unter aller sau. Ich hab mir mal erlaubt die Formatierung etwas leserlicher zu gestalten:

    /*Benutzte komponenten:
    Indy Clienten: TIdSMTP
    Indy sonstiges: TIdMessage
    Name von TIdMessage = Message*/
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        bool SuccesfullySended = false;
    
        /* Host, Benutzername und Passwort aufsetzen */
        IdSMTP1->Host = Host->Text;
        IdSMTP1->UserId = Username->Text;
        IdSMTP1->Password = Password->Text;
    
        //Für die Mail-Services, die authorisierung erfordern:
                IdSMTP1->SocksInfo->Host = AuthHost->Text;
                IdSMTP1->SocksInfo->UserID = Username->Text;
                IdSMTP1->SocksInfo->Password = Password->Text;
    
        /* Mail zusammenstellen */
        Message->From->Name = Fromname->Text;
        Message->From->Address  = Username->Text;
        Message->Recipients->EMailAddresses = Toname->Text;
        Message->Subject = Subject->Text;
        Message->Priority  = mpNormal;
        Message->Body->Text = Memo1->Text;
    
        //Wenn eine Verbindung steht, wird diese unterbrochen
        if (IdSMTP1->Connected())
            IdSMTP1->Disconnect();
    
        IdSMTP1->Connect();
    
        /* Autorisierung konrigurieren und durchführen */
        IdSMTP1->AuthenticationType = atLogin  ;
        IdSMTP1->Authenticate() ;
    
        /* Versenden der Nachricht */
        try
        {
            IdSMTP1->Send(Message);
            SuccesfullySended = true;
        }
        catch(...)
        {
            SuccesfullySended = false;
            Application->MessageBox ("Fehler beim Senden!","Fehler",0);
            IdSMTP1->Disconnect();
        }
    
        IdSMTP1->Disconnect();
    
        //Benachrichtigen
        if (SuccesfullySended == true)
            Application->MessageBox ("Erfolg","Successfully sended!",0);  
        else 
            Application->MessageBox ("Fehler","Error!",0);
    }
    

    Was hab ich hier effektiv gemacht? Ich hab logische BLöcke voneinander getrennt. Habe auf einige unnötige Kommentare verzichtet und logische Blöcke zusammengefasst und diese Kommentiert.

    Ausserdem habe ich mittels Einrücken etwas mehr Übersicht in die Strukturen gebracht. So steht nun die else-Anweisung nichtmehr direkt hinter dem else sondern auch - wie die then-anweisung auf einer neuen Zeile.
    Innerhalb von Blöcken (das zwischen {}) habe ich ebenfalls um 1 Tabulator (üblicherweise 4 leerzeichen) eingerückt

    Versuch dir irgend einen Stil anzugewöhnen und diesen Konsequent einzuhalten, das erleichtert die Lesbarkeit von Quellen erheblich. Ausreden ala "nur ein schneller hack" oder so gelten hier nicht, denn es kostet praktisch keine mühe sich etwas mit der Formatierung zu beschäftigen schon während man die Sourcen schreibt. Ausserdem ist das reine Gewöhnungssache.

    Ahja, Mach auch ausgiebig gebrauch von Absätzen (Returns). Sie fressen kein Heu machen aber den Code ebenfalls übersichtlicher.

    -junix

    [ Dieser Beitrag wurde am 25.12.2002 um 16:55 Uhr von junix editiert. ]



  • Ich habe Indy 9 da gibts UserID nicht aber Username. Müßte das gleiche sein.
    Bei mir Funktioniert es aber trotzdem noch nicht.
    Was muß denn in AuthHost->Text stehen?
    Ich habe es mit den SMTP Server erfolglos versucht.



  • Statt der Vermutungsprogrammierung solltest dus mal mit systematischem Suchen von Informationen versuchen. Am Besten in der Dokumentation der Indy-Komponenten.

    Der Autorisationsserver ist der den du auch z.B. bei Outlook Express angeben musst. (in der Regel der POP server)

    -junix



  • Ich habe es mit dem POP3 Server von gmx probiert er gibt immer noch die gleiche Fehlermeldung.



  • wie währst anstelle von pop3.gmx.de mit pop.gmx.de ??? is bei gmx zumindest so

    @ junix sorry wegen der schei** formatierung, benutze für gewöhnlich formatierungen, hab´s nur irgendwie vergessen

    J0



  • Ich benutze den pop.gmx.net aber ich habe es auch schon mit pop.gmx.de probiert.
    Ich habe noch ein paar Email Adressen bei anderen Anbietern, leider tritt dort der gleiche Fehler auf(Außer bei Web.de da gibt es einen andere Fehlermeldung).
    Deshalb vermute Ich das eine Einstellung nicht richtig ist?
    Oder hat es bei jemand anderes Funktiomiert??



  • Wie sieht diese Fehlermeldung aus?
    Web.de benutzt nicht SMTP,sondern IMAP (oder so ähnlich)
    Welche Indy Version hast du?
    Ich habs mit den neuesten (ich glaube 9.10 oder so) getestet, alles klappt einwandfrei.

    J0



  • Ich habe Indy 9.0
    Die Fehlermeldung lautet "535 {mp017-rz3} auth failure."



  • dann lad dir als erstes indy update runter.
    auth failure bedeutet ja dass die athentication fehlgeschlagen ist.
    dasss kann ja (eigendlich)
    a) nur am falschen Password oder
    b) am falschen server liegen (der richtige is mail.gmx.de)

    wenn du willst kann ich mal das fertige mail-programm inklusive aller sourcecodes hochladen, aber eigendlich müsstest du dafür genügend beispiele finden

    J0



  • Hallo,
    hab mich nur registriert um mal danke zu sagen... vorallem dieser Thread hat mir enorm geholfen. Jetzt kann mir das outlook zum versenden erstmal gestohlen bleiben.
    Und es funtzt wunderbar!!! Auch mit GMX!! Ging gleich beim ersten versuch.

    Also THX A LOT


Anmelden zum Antworten