mail senden mit konsole



  • Hallo

    Ob du ein Konsolen- oder ein GUI-Programm schreibst ist dabei zweitrangig, da du nicht nur VCL-Komponenten des Builders benutzt sondern auch der Fehler, um den es hier im Thread geht, von dieser Komponente geworfen wird. Damit ist die Verschiebung korrekt, der Fehler hat nichts mit Standard-C++ alleine zu tun.

    Zunächst einmal fällt mir die globale Verwendung der Mail-Instanzen auf, was in diesem Fall unnötig und schlechter Stil ist. Zum Beispiel hast du deswegen auch vergessen die Instanzen wieder zu löschen. Vollkommen ungültig ist aber die Verwendung des zu initialisierenden Pointer als Owner der Komponente. Da du keine übergeordneten Instanzen hast must du 0 angeben

    TNMPOP3* mail= new TNMPOP3(0);

    Am besten verschiebst du Deklarataion, Initialisierung und Löschung der Mail-Instanzen lokal in die Main-Funktion und übergibst die nötigen Instanzen an die jeweiligen Unterfunktionen als Parameter.

    Außerdem finde ich die Verwendung der alten C-Strings unnötig. Damit ermöglichst du dem User bösartige Buffer-Overflow-Attacken, da du nirgends überprüfst ob der User nicht mehr Zeichen eingibt als deine C-String-Arrays aufnehmen. Arbeite entweder mit std::string oder mit AnsiString. Um AnsiStrings mit den iostreams zu verwenden must du nur den Header so einbinden :

    #include <dstring.h> // muß vor iostream
    #include <iostream>
    

    Die Verwendung der Events OnSendStart und OnSuccess ist komplett falsch, so funktioniert das Eventsystem des Builders nicht. Als einfache Alternative kannst du Exceptions abfangen

    try
    {
      cout<<endl<<"Die Nachricht wird verschickt....."<<endl;
      sendmail->SendMail();
      cout<<endl<<"Die Nachricht wurde erfolgreich verschickt!"<<endl;
    }
    catch(Exception& e)
    {
      cout<<endl<<"Das Senden der Nachricht ist fehlgeschlagen!"<<endl;
      cout<<"Fehler : " << e.Message.c_str() << endl;
    }
    

    Den eigentlichen Fehler kann ich beim Überfliegen nicht festmachen, aber mir fällt auf das du die Eigenschaft PostMessageA benutzt. In der Builder-Hilfe ist die Eigenschaft aber als PostMessage angegeben. Die von dir verwendete Variante ist vermutlich die AnsiString-Variante, als Gegenteil zur WideString-Varainte. Eventuell hilft es ja schon wenn du das A aus PostMessage wegläßt und dem Compiler die richtige Wahl überläßt.

    bis bald
    akari



  • Ok Danke erstmal für die Tipps, bin noch Anfänger!!
    Aber auch wenn ich alles so ändere wie sie es mir gesagt haben, kommen trotzdem abwechselnd zwei verschiedene fehlermeldungen, die erste ist incomplete header, und die zweite invalid recipients, ich schreibe alle daten in den header die benötigt werden der kann nicht leer sein, und die adressen der empfänger sind auch korrekt die ich zum testen eingebe, trotzdem stimmt was nicht, kann das niemand mal bei sich laufen lassen und testen und mir dann sagen was ich falsch mache.

    Ich sitze schon seid zwei tagen dran das ding zum senden zu bringen. bitte 😞 😞



  • HALLO??????? 😕 😕 😕 😕 😕 😕 😕 😕



  • Hallo

    Ich finde es schon erstaunlich das du alle von mir genannten Änderungen innerhalb von einer Viertelstunde fehlerfrei umgesetzt hast... und das als selbsternannter Anfänger...

    Wie auch immer, ich (und anhand des fehlenden Feedbacks auch andere) konnte den Fehler nicht nachvollziehen. Falls du also zur Laufzeit jeweils sinnvolle Sachen eingibst sollte die Mail auch versendet werden.

    Da TNMSMTP wie alle NM-Komponenten allerdings als veraltet und fehlernafällig gelten bringt vielleicht der Umstieg auf die besseren Indy-Komponenten etwas. Entweder sind die in deinem Builder schon dabei oder du kannst sie dir aus dem Netz laden und installieren. Weiteres dazu über SuFu und FAQ.

    bis bald
    akari



  • Hallo,

    daran:

    aramis schrieb:

    ich schreibe alle daten in den header die benötigt werden der kann nicht leer sein

    hab ich leichte Zweifel! Also zumindest fällt mir auf dass der Sender fehlt...

    mfg, Micha!



  • wie was meinst du mit sender?? hab doch alles gemacht??



  • Hallo

    Random meint die Eigenschaft TNMSMTP::TPostMessage::FromAddresse die bei dir nicht gesetzt wird.

    bis bald
    akari



  • Hallo,

    wo hast du denn beim Versenden der Mail den Sernder festgelegt? Die BCB - Hilfe meint:

    NMSMTP1->PostMessage->FromAddress = Edit3->Text;

    mfg, Micha!

    // zu langsam -.-



  • ok das hab ich jetzt geändert, jetzt bekomme ich die fehlermeldung no valid recipients. und noch ne frage nebenbei: muss ich bei cc und bcc unbedingt eine adresse angeben oder kann das leer bleiben.ist das vielleicht das problem



  • Hallo,

    jenachdem ob du Kopien deiner Mail versenden willst .. ich glaub das sollte aber lieber Entscheidung des Sernders und nicht des Entwicklers sein :)! Um zu testen ob es daran liegt, solltest du die entscheidenden Zeilen in deinem Quellcode auskommentieren!

    mfg, Micha



  • also ich habe schon alles ausprobiert, ich hab für bcc und cc was eingegeben und auch schon auskommentiert, trotzdem kommt die fehlermeldung invalid recipients. kann das keiner von euch mal kopieren und als konsolenanwendung mal laufen lassen. vielleicht fällt euch dann der fehler auf. hab schon alles ausprobiert und auch in der doku alles nachgelesen.



  • HALLO? NOCH JEMAND DA?



  • Rumschreien führt nur dazu, daß keiner mehr antwortet.

    Schau dir mal die Beispiele an, die beim BCB dabei sind. Diese findest du unter Examples/FastNet im BCB-Verzeichnis.

    Das Problem ist, dass du Smpt nicht angemeldet hast, außer du hast ein E-Mail-Provider der Pop vor Smtp verwendet, d.h. man muß erst Mails abrufen, bevor man welche verschicken kann. Da die FastNet-Komponenten keine Authentifizeiung für Smtp zulassen kann man hier also keine E-Mail-Konten verwenden, die für den E-Mail-Versand eine Authentifizeiung erfordern. Also auch hier nochmal den Tip: nimm die Indy-Komponenten.



  • Linnea schrieb:

    Rumschreien führt nur dazu, daß keiner mehr antwortet.

    Erschwerend kommt hinzu, dass er akaris Vorschläge wohl immer noch nicht getestet hat. Er wartet wohl lieber darauf, dass sich tatsächlich jemand die Mühe macht, das für ihn zu machen. Keine Initiative -> keine Resonanz...



  • ok habs jetzt und nebenbei ihr wart auch mal anfänger und habt es bestimmt nicht gemocht wenn euch jeder einfach gesagt hat das ihr in irgendwelchen dokus nachlesen sollt, und das habe ich auch gemacht bevor ich in dieses forum gegangen bin denn so schlau war ich nämlich auch. trotzdem danke an die anderen tipps.



  • aramis schrieb:

    ...nebenbei ihr wart auch mal anfänger und habt es bestimmt nicht gemocht wenn euch jeder einfach gesagt hat das ihr in irgendwelchen dokus nachlesen sollt

    LOL, was ist denn das für eien Aussage. Zu der Zeit, als ich C / C++ gelernt habe gab es noch nicht mal Internet und es gab auch niemanden, den ich hätte fragen können. Mir blieb damals gar nichts anderes übrig, als ein paar Bücher zu lesen und Dokumentationen zu wälzen.


Anmelden zum Antworten