2012-12-04 29 views
5

E-posta yoluyla sabit disk sürücüsüne kaydetmeden tüm StringList'i nasıl ekleyebilirim? Ek sınırlarının farkındayım ..StringList'i E-posta ile Ek Gönder - Indy

+0

İkincil TIdText çalıştı mı? Muhtemelen CharSet'i UTF-16 ya da UCS-2 gibi bir şeye ayarlamalısınız ve belki de 80'inci karakterin etrafına sarılacaktı ... Ama belki de "sadece çalışır". TIdText, TStrings göndermek için yapılmak üzere ayarlanmıştır - bu yüzden onu kullanmayı deneyin. –

cevap

5

yerine TIdAttachmentFile ait TIdAttachmentMemory kullanabilirsiniz:

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

Ayrı bir 'TMemoryStream' kullanmak yerine,' TIdAttachmentMemory' öğesini herhangi bir 'CopyFrom' parametresi değeri olmadan yapılandırabilir ve sonra' OpenLoadStream() 'yöntemini kullanarak' SaveToStream() 'biçiminde bir' TStream' elde edebilirsiniz. . Alternatif olarak, bunun yerine 'StringList.Text' yerine' TIdAttachtachmentMemory' yapıcısına geçebilirsiniz. –

0

Neden dosyayı dosyaya kaydetmiyor ve dosyayı ek olarak göndermiyorsunuz?

+1

Aksi halde yapılamaz :) –

+0

Sabit Disk için erişim haklarına ihtiyacınız var .. Uygulamanıza karmaşıklık katıyor ... CPU için daha fazla çaba: eski programcılar yavaş makinelere sahipti, böylece her döngü sayar :) –

+0

evet ben Bunu yapmak için tembel bir yol olduğunu kabul ediyorum, ama karışıklık olsa bile işe yarayacak :-) –

2

StringList.Text portalını kullanabilirsiniz. Bu özellik okumak ve yazmak ve böylece bir dize paramater (bir nesneyi geçmek yerine yerine) dizesi içeriğini iletmek için kullanılabilir.

+0

Bir örnek gösterebilir misiniz? :) –

+0

Size e-posta kullanarak bir örnek veremem ancak temel olarak SenderStringList.Text öğenizi bir dize değişkenine koyarsınız. Sonra bu dize posta yoluyla gönderirsiniz ve alıcı bir StringList oluşturur ve dizede okur (ReceiverStringList.Text: = variable). –

+1

Evet, ancak bu soru bir e-posta eki hakkında bir değişkene bir dize listesi metin koymak değil :) –