2009-10-14 7 views
5

Ktoś wie o dobrym przykładzie generowania wiadomości e-mail w formacie HTML z osadzonymi obrazami i alternatywną częścią tekstową? Potrzebuję wygenerować niektóre raporty tabelaryczne w HTML i chciałbym osadzić logo i inne obrazy.Generowanie wiadomości e-mail w formacie HTML z osadzonymi obrazami w Delphi

Wierzę, że Indy może to zrobić przy odrobinie pracy, ale miałem nadzieję, że ktoś może wskazać mi dobry przykład jako punkt wyjścia. Jestem otwarty na korzystanie z bibliotek innych niż Indy, a dostępne komercyjne rozwiązania są dostępne. Jakość i czas wdrożenia jest ważniejszy niż koszt. Rozwiązanie musi również obsługiwać dostarczanie oparte na SMTP do wymiennika poczty.

Inną pozycją na mojej liście życzeń jest możliwość wykorzystania FastReports, TRichView lub podobnego narzędzia do generowania treści wiadomości HTML. Dostępne są filtry wyjściowe HTML dla obu, ale nie miałem okazji wykonać żadnych testów. Wszelkie opinie na ten temat będą mile widziane.

Z góry dziękuję!

David

Odpowiedz

9

Przeczytaj poniższe artykuły na stronie Indy za:

HTML Messages
New HTML Message Builder class

+0

Indy MesssageBuilder wydaje się być drogą do zrobienia. Jedyny potencjalny problem z kodowaniem, jaki widzę na podstawie przykładów, polega na tym, że pliki są odczytywane z dysku. Muszę używać strumieni, ponieważ dane i obrazy znajdują się w bazie danych. Sprawdzę źródło, aby sprawdzić, czy inne metody dodawania obrazów są obsługiwane, i jeśli trzeba, dokonaj niezbędnych korekt. –

+0

Używając TIdMessage, TIdText i TIdAttachmentMemory możesz zbudować wiadomość i załączniki używając strumieni. – ajob

+0

TIdMessageBuilderHtml obsługuje używanie TStream do danych załączników powiązanych z kodem HTML, takich jak obrazy. Właściwość TIdMessageBuilderHtml.HtmlFiles ma przeciążone wersje funkcji Add() dla nazw plików i danych TStream. Dołączanie niepowiązanych danych jednak nie obsługuje jeszcze TStream. –

0

Próbowaliśmy to rok temu z Indy i osadzony CID: obrazy tak: https://forums.codegear.com/thread.jspa?threadID=17473

nigdy Dostaliśmy to stabilny, za każdym razem był inny program pocztowy, który barfed (jeśli mamy go działa w Outlooku, a Thunderbird go nie zaakceptował, lub Outlook Express, lub etc etc.

W końcu zrobiliśmy to z .NET przy użyciu AspNetEmail i działało jak czar.

--jeroen

+1

Czy kiedykolwiek porównywałeś wiadomości e-mail generowane przez Indy z wiadomościami e-mail generowanymi przez AspNetEmail, aby zobaczyć, co różni się między nimi? –

+0

Lat temu tak zrobiliśmy.Ale nie robiliśmy notatek z powodu presji projektu. Projekt trwał parę lat, ale teraz nie żyje. Więc dzisiaj może równie dobrze pracować z Indy. –

+0

Wystarczająco fair, dzięki. –

0

Wszystko zależy od tego, jak wiele różnych klientów poczty zdalnej trzeba być w stanie obsługiwać. Uważam, że dobrze znane biblioteki Delphi, które obsługują SMTP/Mime, wykonają sensowną pracę, ale mogą pozostawić problemy z obsługą, gdy jeden z użytkowników poczty stwierdzi, że ich odbiorca nie widzi prawidłowo sformatowanej wiadomości e-mail.

Polecam odwiedzenie firmy Jacob Palme o numerze site, dzięki której poznasz niektóre z problemów, które możesz napotkać. Być może jest to trochę nieaktualne, ale w podsumowaniu, jakkolwiek skompilujesz i wyślesz swój złożony e-mail MIME, napotkasz jednego lub więcej klientów pocztowych, którzy nie potrafią poprawnie obsłużyć składni. Witryna zawiera również linki do przydatnych przykładów konstrukcji, które można zbadać i przetestować.

Nie mam zamiaru sugerować, że musicie wdrożyć własną logikę tak jak my: dobrze zapakowane rozwiązanie prawdopodobnie odniesie sukces w przeważającej większości przypadków. Napisaliśmy własny kod Delphi, aby poradzić sobie z tym kilka lat temu, więc zostawię to innym, aby dać ci aktualne informacje o tym, co jest teraz na półce.

1

Te dni Używam Clever komponentu klienta poczty, choć nie za darmo.

Sterowanie TurboPower Internet (OpenSource) działało doskonale w przeszłości.

+0

Dzięki, nie spojrzałem na ich elementy w ciągu kilku lat. Clever Component z pewnością stał się bardzo bogaty w funkcje, ale cena jest nieco stroma, chyba że naprawdę potrzebujesz zaawansowanych funkcji. –

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;