2012-12-04 29 views
5

Jak wysłać całą listę wyników za pośrednictwem załącznika przez e-mail bez zapisywania na dysku twardym? Jestem świadomy ograniczeń załączników.Wyślij StringList jako załącznik za pośrednictwem poczty e-mail - Indy

+0

Czy próbowałeś wtórnego TIdText? Prawdopodobnie będziesz potrzebował ustawić CharSet na coś podobnego do UTF-16 lub UCS-2 i być może będzie on owijał linie wokół 80. znaku ... Ale może to po prostu "zadziała". TIdText jest ustawiony, aby wysyłać TStrings - więc po prostu spróbuj go użyć. –

Odpowiedz

5

Można użyć TIdAttachmentMemory zamiast TIdAttachmentFile:

StringList := TStringList.Create; 
StringList.Append('foo'); 
StringList.Append('bar'); 

MemoryStream := TMemoryStream.Create; 
StringList.SaveToStream(MemoryStream); 
MemoryStream.Position := 0; 

IdMessage := TIdMessage.Create(nil); 
IdAttachmentMemory := TIdAttachmentMemory.Create(IdMessage.MessageParts,MemoryStream); 
+4

Zamiast używać osobnego 'TMemoryStream', możesz skonstruować' TIdAttachmentMemory' bez wartości parametru 'CopyFrom', a następnie użyć metody' OpenLoadStream() ', aby uzyskać' TStream', który możesz przekazać do 'SaveToStream()' . Alternatywnie, możesz po prostu przekazać 'StringList.Text' do konstruktora' TIdAttachmentMemory'. –

0

Dlaczego nie zapisać pliku i wysłać plik jako załącznik?

+1

Nie można tego zrobić inaczej :) –

+0

Potrzebuję uprawnień dostępu do dysku twardego .. Dodaje złożoności do twojej aplikacji ... więcej wysiłku dla procesora :: starzy programiści mieli wolne maszyny, więc każdy cykl się liczy :) –

+0

tak i Zgadzam się, to leniwy sposób na zrobienie tego, ale zadziała, nawet jeśli jest niechlujnie :-) –

2

Można użyć porperty StringList.Text. Ta właściwość może być użyta do odczytu i zapisu, a tym samym do przekazania zawartości listy łańcuchów jako parametru łańcuchowego (zamiast próbować przekazać obiekt).

+0

Czy możesz pokazać przykład? :) –

+0

Nie mogę podać przykładu za pomocą wiadomości e-mail, ale zasadniczo umieszczasz SenderStringList.Text w zmiennej łańcuchowej. Następnie wyślesz ten ciąg pocztą, a odbiornik utworzy StringList i odczyta w ciągu znaków (ReceiverStringList.Text: = variable). –

+1

Tak, ale to pytanie dotyczy załącznika wiadomości e-mail, a nie jak umieścić tekst w liście łańcuchów do zmiennej :) –