Verbindung mit SMTP Server herstellen und mail versenden



  • Und wie geht es dann weiter?



  • Hallo

    siehe zum Beispiel hier.
    Weiteres kannst du in der Doku zu dem Indy-Package nachlesen.

    bis bald
    akari



  • Gut, jetzt hab ich die EmailSache. Jetzt noch eine Frage, wie bekomme ich einen Zeilenumbruch im BODY der Email rein?

    TStringList *body=new TStringList();
           body->Add("Fehler: MANDOC_FILING - Datensatz konnte nicht Ordnungsgemäß eingetragen werden!" + Checkbox);
           FILINGSYSTEM->IdMessage1->Body=body;
    


  • Hallo

    body->Add("Zeile 1");
    body->Add("Zeile 2");
    body->Add("Zeile 3");
    

    alternativ

    body->Add("Zeile 1\r\nZeile 2");
    

    bis bald
    akari



  • oh Danke! Noch eine einzige letzte winzige Frage. Ich möchte mir die Fehlermeldung der Oracle Datenbank hier im Body anzeigen lassen. Wie kommt man an die ran?



  • Hallo

    🙄 Woher sollen wir wissen, was für eine Fehlermeldung du meinst?

    bis bald
    akari



  • Indem Du die Meldung aus dem Error-Objekt holst. Kann sein, dass die Oracle Message erst die zweite oder dritte Message ist, je nachdem, welche Zugriffskomponenten und -wege Du gewählt hast.

    Die Meldung steht als AnsiString in der Eigenschaft ErrorMessages des Error-Objektes.

    Dies setzt natürlich voraus, dass Du die Fehler mit try / catch() abfängst. Solltet Du das nicht machen -> siehe akaris Post.



  • Ja, ich fange sie mit try catch ab.

    try
                        {
                            DataExec(CreateInsert(Checkbox, FILINGSYSTEM->Dateiname, Trim(FILINGSYSTEM->Pfadname), FILINGSYSTEM->ID));
    
                                                }
                        catch(EDBEngineError *dbError)
                        {
                            MessageBox(NULL, dbError->Message.c_str(), "Error:", MB_OK);
                            ErrorMail(Checkbox);
                        }
    

    und in ErrorMail() hätte ich sie gerne drin :

    void ErrorMail(AnsiString Checkbox)
    {
    
            FILINGSYSTEM->IdSMTP1->Host = AnsiString(FILINGSYSTEM->Settings.strSMTPServName);
    
            FILINGSYSTEM->IdMessage1->From->Text = GetLoginName()+"@xyz.de";
    
            FILINGSYSTEM->IdMessage1->Recipients->EMailAddresses = AnsiString(FILINGSYSTEM->Settings.strMailAddress);
            FILINGSYSTEM->IdMessage1->Subject = "MANDOC-FILING";
    
           TStringList *body=new TStringList();
           body->Add("Fehler: MANDOC_FILING - Datensatz konnte nicht Ordnungsgemäß eingetragen werden!");
           body->Add(Checkbox + "  -  " + FILINGSYSTEM->Dateiname + "   -  " + FILINGSYSTEM->Pfadname);
           FILINGSYSTEM->IdMessage1->Body=body;
    
           try
    	    {
    	        FILINGSYSTEM->IdSMTP1->Connect();
    	        FILINGSYSTEM->IdSMTP1->Send(FILINGSYSTEM->IdMessage1);
    	        FILINGSYSTEM->IdSMTP1->Disconnect();
    	    }
           catch(...)
    	    {
    	        Application->MessageBox("Fehler beim Versenden der Nachricht","Mail",MB_OK|MB_ICONSTOP|MB_SYSTEMMODAL);
    

    Meine Frage: Kann ich es jetzt einfach übergeben an die Funktion? Geht das?



  • Klar, nußt nur einen weiteren Übergabeparameter für die Fehlermeldung in die Funktion aufnehmen.

    Übrigens ist das Error-Objekt kein Zeiger, sondern eine Referenz.



  • try
                        {                           DataExec(CreateInsert(Checkbox, FILINGSYSTEM->Dateiname, Trim(FILINGSYSTEM->Pfadname), FILINGSYSTEM->ID));
    
                                               }
                        catch(EDBEngineError *dbError)
                        {
                            MessageBox(NULL, dbError->Message.c_str(), "Error:", MB_OK);
    
                            ErrorMail(Checkbox, dbError->Message);
                        }
    

    Du meinst so? Das macht er aber nicht ich bekomme dann gar keinen Wert!



  • Bitte? Weiß nicht, was Du meinst.


Anmelden zum Antworten