2009-10-14 12 views
5

Wer kennt ein gutes Beispiel für das Generieren von HTML-E-Mail mit eingebetteten Bildern und einem alternativen Textteil? Ich brauche einige tabellarische Berichte in HTML und möchte Logos und andere Bilder einbetten.Generieren von HTML-E-Mail mit eingebetteten Bildern in Delphi

Ich glaube Indy kann das mit etwas Arbeit, aber ich hoffte, dass jemand mich zu einem guten Beispiel als Ausgangspunkt zeigen könnte. Ich bin offen für die Verwendung von anderen Bibliotheken als Indy und kommerzielle Lösungen zur Verfügung gestellt Quelle ist verfügbar. Qualität und Umsetzungszeit sind wichtiger als Kosten. Die Lösung muss auch die SMTP-basierte Zustellung an einen Mail-Exchanger unterstützen.

Das andere Element auf meiner Wunschliste ist in der Lage sein, FastReports, TRichView oder ähnliches Werkzeug zu nutzen, um den HTML-Nachrichteninhalt zu generieren. Es gibt HTML-Ausgabe-Filter für beide, aber ich hatte keine Gelegenheit, irgendwelche Tests durchzuführen. Jede Rückmeldung zu diesem Thema wäre erwünscht.

Vielen Dank im Voraus!

David

Antwort

9

die folgenden Artikel auf der Website des Indy lesen:

HTML Messages
New HTML Message Builder class

+0

Der Indy MesssageBuilder scheint der richtige Weg zu sein. Das einzige mögliche Codierproblem, das ich anhand der Beispiele sehe, ist, dass Dateien von der Festplatte gelesen werden. Ich muss Streams verwenden, da die Daten und Bilder in einer Datenbank gespeichert sind. Ich werde die Quelle überprüfen, um zu sehen, ob andere Methoden zum Hinzufügen von Bildern unterstützt werden, und gegebenenfalls die erforderlichen Anpassungen vornehmen. –

+0

Mit TIdMessage, TIdText und TIdAttachmentMemory können Sie Nachrichten und Anlagen mithilfe von Streams erstellen. – ajob

+0

TIdMessageBuilderHtml unterstützt die Verwendung von TStream für Anhangsdaten, die sich auf den HTML-Code beziehen, z. B. Bilder. Die TIdMessageBuilderHtml.HtmlFiles-Eigenschaft hat Versionen von Add() für Dateinamen und TStream-Daten überladen. Das Anhängen von nicht verwandten Daten unterstützt derzeit jedoch noch nicht TStream. –

0

Wir haben versucht, dies schon vor Jahren mit Indy und Embedded cid: Bilder wie diese: https://forums.codegear.com/thread.jspa?threadID=17473

Wir haben nie stabil es, jedes Mal ein anderer Mail-Leser war die barfed (wenn wir es bekamen Arbeiten in Outlook, dann hat Thunderbird es nicht akzeptiert, oder Outlook Express, oder, etc, etc).

Am Ende haben wir es mit .NET mit AspNetEmail getan und es hat wie ein Charme funktioniert.

--jeroen

+1

Haben Sie jemals die von Indy generierten E-Mails mit den von AspNetEmail generierten E-Mails verglichen, um zu sehen, welche Unterschiede zwischen ihnen bestehen? –

+0

Vor Jahren taten wir es.Aber wir haben wegen des Projektdrucks keine Notizen gemacht. Das Projekt lebte für ein paar Jahre, aber jetzt ist es tot. Heute könnte es also genauso gut mit Indy funktionieren. –

+0

Fair genug, danke. –

0

Es hängt alles davon ab, wie viele verschiedene Remote-Mail-Clients, die Sie müssen in der Lage zu unterstützen. Ich glaube, dass die bekannten Delphi-Bibliotheken, die SMTP/Mime unterstützen, einen vernünftigen Job machen, aber sie können Support-Probleme hinterlassen, wenn einer Ihrer Mail-Benutzer feststellt, dass der Empfänger keine richtig formatierte E-Mail sehen kann.

Ich empfehle Jacob Palme site, die Ihnen eine Vorstellung von einigen der Probleme geben wird, die auftreten können. Es ist vielleicht etwas veraltet, aber zusammenfassend: Wie auch immer Sie Ihre komplexe MIME-E-Mail erstellen und senden, Sie werden auf einen oder mehrere E-Mail-Clients stoßen, die die Syntax nicht korrekt verarbeiten können. Die Seite enthält auch Links zu einigen nützlichen Beispielen von Konstruktionen, die Sie untersuchen und testen können.

Ich will damit nicht sagen, dass Sie Ihre eigene Logik wie wir rollen müssen: eine gute Paketlösung wird wahrscheinlich in den allermeisten Fällen erfolgreich sein. Wir haben vor einigen Jahren unseren eigenen Delphi-Code geschrieben, damit ich es anderen überlasse, Ihnen aktuelle Informationen darüber zu geben, was jetzt im Regal ist.

1

In diesen Tagen sind Clever Komponente E-Mail-Client verwenden, nicht frei though.

Die TurboPower Internet (OpenSource) -Steuerungen funktionierten in der Vergangenheit gut für mich.

+0

Danke, ich habe ihre Komponenten in einigen Jahren nicht angeschaut. Clevere Komponente ist sicherlich sehr funktionsreich geworden, aber das Preisschild ist ein bisschen steil, es sei denn, Sie benötigen wirklich einige der erweiterten Funktionen. –

1
function data64(const filename:string): ansistring; 
// uses Classes, IdGlobalProtocols, EncdDecd; 
const 
    crlf = #13#10; 
begin 
    result := ''; 
    with TIdMimeTable.Create do 
    try 
    result := 'data:' 
     + GetFileMIMEType(filename) + ';'; 
    finally 
    Free; 
    end; 
    with TMemoryStream.Create do 
    try 
    LoadFromFile(filename); 
    result := result + 'base64,' + crlf 
     + EncodeBase64(Memory,Size); 
    finally 
    Free; 
    end; 
end;