HTML in Email verpacken und per idSMTP verschicken?!



  • OK ich versuchs mal:

    Also ich habe eine SMTP- Komponente in meinem Projekt. Mit dieser Komponente möchte ich zu bestimmten Zeiten Emails an Leute schicken. Diese Emails sollen dabei nicht einfach nur reinen Text im Bodyteil der Email enthalten sondern es soll im Bodyteil eine Art kleine Homepage angezeigt werden.
    Ein Mitarbeiter der die Email lesen möchte bekommt beim öffnen dann im Bodyteil der Email z.B. Bilder und Text (durch HTML-Struktur vorgegeben) angezeigt.

    Verschicken würde ich z.B. folgende HTML-Struktur:

    <html>
    <title>TEST</titel>
    <body>
    <p>Das ist ein Test</p>
    </body>
    </html>
    

    angezeigen soll er mir aber z.B. in Outlook dann nur noch

    TEST

    (Bodyteil:)
    Das ist ein Test

    Kann man sowas machen?



  • Ich denke, dass dir dabei die TIdSMTP-Komponente nicht weiterhelfen kann, da du den Aufbau der Nachricht verändern müsstest (Datentyp ist nicht text/plain, wie es bei TIdSMTP üblich ist). Man möge mich eines besseren belehren, sollte ich hier falsch liegen. 😉

    EDIT: Natürlich geht dann kein title, nur der reine body-Teil der HTML-Nachricht, wie das mit Bildern ist, die angehängt werden, kann ich dir nicht sagen, bezüglich Pfadangaben, etc.



  • Hallo

    eventuell reicht ja schon, die HTML-Datei als Anhang an die E-Mail mit leeren Text anzufügen. afaik erkennen viele Mail-Clients das so, das die HTML-Datei gleich als Mail und nicht als Anhang angezeigt wird.
    Zumindestens wird bei meinem Thunderbird nach so einem Versand gleich die HTML-Seite angezeigt.

    bis bald
    akari



  • HTML-Nachrichten werden als Anhang verschickt.
    In den Borland-Newsgroups finden sich etliche Threads zum Thema, wenn auch meist mit Delphi-Beispielen. Das Prinzip sollte aber klarwerden.

    PS.
    Natürlich sollte man auf gar keinen Fall den Standard-Body leer lassen, da gehört derselbe, nur halt unformatierte Text rein.



  • akari schrieb:

    eventuell reicht ja schon, die HTML-Datei als Anhang an die E-Mail mit leeren Text anzufügen. afaik erkennen viele Mail-Clients das so, das die HTML-Datei gleich als Mail und nicht als Anhang angezeigt wird.
    Zumindestens wird bei meinem Thunderbird nach so einem Versand gleich die HTML-Seite angezeigt.

    Mag bei manchen zutreffen, jedoch nicht bei allen, z.b. bei GMX nicht (Web-Interface), da muss es schon eine "gültige" HTML-Mail sein, mit 2 Body-Bereichen, einem text/plain und einem HTML.



  • Hab jetzt mal versucht die HTML-Datei als Anhang anzuhengen. HAt aber trotzdem nicht so geklappt wie ich das gerne wollte!

    Ich muss denke ich nur wissen, wie ich in den Body-HTML-Teil der Email schreiben kann die z.B. Outlook interpretiert.
    Wenn ich die Email weggeschickt habe, dann konnte ich in Outlook nach dem Empfang mit rechter Maustaste (im Bodyteil der Email) den Quelltext der Datei anzeigen lassen.
    Hier ist leider nur folgeder Teil enthalten:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML><HEAD>
    <META http-equiv=Content-Type content="text/html; charset=iso-8859-1"></HEAD>
    <BODY></BODY></HTML>
    

    Hier müsste jetzt ja eigentlich auch mein HTML-Quellcode mit aufgeführt sein damit Outlook eben meine HTML - Teil auch interpretieren kann. Nur ist das hier leider nicht der Fall 😞





  • der Trick besteht nur darin 2 Messageparts zu erstellen, wie Sphy schon sagte: einen text/plain und einen text/html

    TIdText *IdText1 = new TIdText(IdMessage1->MessageParts, RichEdit1->Lines);
    IdText1->ContentType="text/plain";
    
    TIdText *IdText2 = new TIdText(IdMessage1->MessageParts, RichEdit2->Lines);
    IdText2->ContentType="text/html";
    

    im RichEdit1 steht der Plaintext und im RichEdit2 der HTML-Text



  • Was mir gerade aufgefallen ist: Wikipedia scheint nicht auf dem neuesten Stand zu sein, mittlerweile reicht eine Leerzeile fast nichtmehr aus, man muss sogenannte Trennzeilen einfügen, die zuvor im Hweader definiert werden, finde jetzt auf die Schnelle nichts dazu, aber die Zeilen sehen etwa so aus:

    --IFdgnurT54697@mail.de--
    

    Diese Zeilen trennen die unterschiedlichen Teile (Auch Anhänge) voneinander. Evtl. weiß jemand anderes mehr und könnt das an dieser Stelle explizit erläutern, zum Verständnis? - Auch, wenn das nicht zum BCB an sich gehört.



  • Sorry wenn ich nochmal nerven muss, doch leider zeigt er mir jetzt immer noch nicht die Seite in der Email an!

    Hier mal mein Quellcodeausschnitt:

    m_pMessage->MessageParts->Add();
       TIdText *IdText1 = new TIdText(IdMessage1->MessageParts,RichEdit1->Lines);
       IdText1->ContentType="text/plain";
    
       TIdText *IdText2 = new TIdText(IdMessage1->MessageParts,RichEdit2->Lines);
       IdText2->ContentType="text/html";
    
       //Versenden der Email
    
       m_pSMTP->Connect();
       m_pSMTP->Send(m_pMessage);
       m_pSMTP->Disconnect();
    

    Habe den Ratschlag von Linnea mal eingebaut, nur weiß ich nicht wirklich ob ich es richtig handhabe. Wenn ich jetzt in RichEdit1 z.B. folgenden Text angebe:

    Das ist ein Test

    muss ich dann im RichEdit2 folgendes schreiben:

    <html>
    <title>TEST</title>
    <body>
    <p>Das ist ein Test</p>
    </body>
    </html>

    Jetzt würde ich erwarten, dass in der Emailnachricht folgendes im Textbereich steht:

    Das ist ein Test!

    Aber das tut es nicht! 😕
    Könnt ihr mir mal den Code zeigen wie ihr das machen würdet?

    Danke!



  • skluge schrieb:

    [b]m_pMessage[/b]->MessageParts->Add();
       TIdText *IdText1 = new TIdText([b]IdMessage1[/b]->MessageParts,RichEdit1->Lines);
       IdText1->ContentType="text/plain";
    
       TIdText *IdText2 = new TIdText(IdMessage1->MessageParts,RichEdit2->Lines);
       IdText2->ContentType="text/html";
    

    steht das dickgeschriebene wirklich so in deinem Quelltext? Wenn ja solltest du IDMessage1 mal an deinen Quelltext anpassen...



  • Jupp, das war's 😃
    Jetzt funzt es! DANKE euch!


Anmelden zum Antworten