Email Anhang dynamisch gestallten



  • Hi Jungs und Mädels,
    Mein Problem ist folgendes :
    Ich möchte eine Email mit Anhang versenden (was auch super klappt) , bis ich die Elemente des Anhangs dynamisch definieren will. Ich versende Email via IndySMTP ("Indy-Clients"->"IdSmtpClient") Komponente und die Nachricht ist halt eine IndyMessage ("Indy-Misc"->"IdMessage") Komponente.
    Den Anhang erstelle ich normalerweise wie folgt :

    IdMessage1->MessageParts->Add();
    TIdAttachment *Att = new TIdAttachment(IdMessage1->MessageParts,"d:\\bsp.txt");
    

    Diesmal möchte ich aber dynamisch den Anhang hinzufügen.
    Habs auch schon mit ner Schleife oder mit nem Array Probiert (bei Array meckert der Compiler sofort)
    und Schleife hab ich wie folgt versucht :

    String dateien[150];
    //Der Array "dateien wird befüllt" aber er muss nicht komplett voll sein...
    String puffer;
    for(int i=0;i<=dateien->Length();i++)
    { 
     IdMessage1->MessageParts->Add(); 
     puffer = "Att"+IntToStr(i); 
     TIdAttachment *Att = new TIdAttachment(IdMessage1->MessageParts,dateien[i]);
    }
    

    Hat aber nicht geklappt wie ihr euch vorstellen könnt 🙂
    Hoffe mir kann jemand behilflich sein 😕

    Gruß PillathMrNight



  • Sry für Doppelpost...

    Habe oben im 2. Code-Auszug ein Fehler drin , es müsste so heißen :

    String dateien[150];
    //Der Array "dateien wird befüllt" aber er muss nicht komplett voll sein...
    String puffer;
    for(int i=0;i<=dateien->Length();i++)
    {
     IdMessage1->MessageParts->Add();
     puffer = "Att"+IntToStr(i);
     TIdAttachment *puffer = new TIdAttachment(IdMessage1->MessageParts,dateien[i]);
    }
    


  • Erstens: Ein nacktes Array hat kein 'Length()' - und in der Schleife greifst du nur auf die Länge des ersten Dateinamen zu (nimm lieber vector<> oder schreib in einer eigenen Variablen mit, vieviele Variablen gültig sind).
    Zweitens:

    ~PillathMrNight schrieb:

    String puffer;//<-
    for(int i=0;i<=dateien->Length();i++)
    {
     IdMessage1->MessageParts->Add();
     puffer = "Att"+IntToStr(i);
     TIdAttachment *puffer = new TIdAttachment(IdMessage1->MessageParts,dateien[i]);//<-
    }
    

    Na wenn das mal keine Namenskonflikte ergibt. In jedem Fall dürfte die Anweisung 'puffer="Att"+IntToStr(i);' keine echten Auswirkungen auf deinen Programmablauf haben.

    (PS: Ohne Anspruch auf Korrektheit - die Reihenfolge der Anweisungen sieht sonderbar aus)



  • Danke für die schnelle Antwort!
    ok hab deine Idee mit der Variable die "mitzählt" realisiert und die Schleife läuft jetzt genau so oft ab wie sie es tuen soll.
    Aber eine funktionierende Antwort fehlt mir immer noch 😞
    Wie kann ich den Anhang dynamisch realisieren ? (Mein Versuch mit der Schleife funktioniert nicht wirklich wie du bereits erkannt hast.)



  • ~PillathMrNigth schrieb:

    Wie kann ich den Anhang dynamisch realisieren ? (Mein Versuch mit der Schleife funktioniert nicht wirklich wie du bereits erkannt hast.)

    Da mußt du (leider) auf die Borland-Experten warten - ich kenne 'eure' Bibliothek nicht gut genug, um dir da konkrete Hilfe zu bieten.



  • Hallo

    das statische Array ist schon schlecht, nimm ein dynamisches Array

    #include <vector>
    ...
    std::vector<String> dateien;
    dateien.push_back("file.dat"); // So Dateien eintragen
    String puffer;
    for(int i=0;i<=dateien.size();i++)
    {
     puffer = "Att"+IntToStr(i);
     new TIdAttachment(IdMessage1->MessageParts,dateien[i]);// reicht aus
    }
    dateien.clear(); // alle Dateieinträge löschen. Braust du nur, wenn du die leere Liste nochmal brauchst
    

    Bei dem Attachment-Verhalten bin ich mir nicht ganz sicher, aber die angabe von ...MessagePasts beim Konstruktoraufruf bewirkt bereits das das Attachment mit in die Liste der Message aufgenommen wird.

    bis bald
    akari


Log in to reply