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
Odpowiedz
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);
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'. –
Dlaczego nie zapisać pliku i wysłać plik jako załącznik?
Nie można tego zrobić inaczej :) –
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 :) –
tak i Zgadzam się, to leniwy sposób na zrobienie tego, ale zadziała, nawet jeśli jest niechlujnie :-) –
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).
Czy możesz pokazać przykład? :) –
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). –
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 :) –
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ć. –