Newsgroup: it.comp.lang.delphi
Titolo: IdMessage e Multi-threading

Ciao a tutti!
Ho sviluppato una piccola applicazione con la quale invio delle email
tramite i componenti IdSMTP e IdMessage di Indy... Avrei la necessità
di fare un invio simultaneo dei messaggi attraverso vari threads.
L'unico problema che non riesco a risolvere è questo: devo copiare i
valori del messaggio IdMessage dal thread principale (il Form) ai vari
threads.
Ho provato a farlo in 3 modi:
1) Passando un puntatore all'IdMessage ai vari threads secondari.
L'inconveniente di questo metodo è che devo tener bloccato l'IdMessage
durante l'invio, per ogni thread! Quindi si perdono molti vantaggi del
multi-threading, perchè i threads non sono indipendenti
2) Creando in ogni thread un nuovo IdMessage e copiando per valore i
parametri dal thread principale (Form). L'inconveniente di questo
metodo è che non riesco a copiare IdMessage->MessageParts, e quindi
non riesco ad inviare messaggi con allegati
3) Creando in ogni thread un nuovo IdMessage e caricare tutto il suo
contenuto, precedentemente salvato su file dal thread principale, da un
file con IdMessage->LoadFromFile(). L'inconveniente di questo metodo è
che gli allegati vengono inviati ma non vengono visualizzati dal
destinatario, probabilmente per qualche problema di formattazione del
messaggio
E' da parecchio tempo che provo insieme ad altri a risolvere questo
problema, ma niente da fare...
Qualcuno ha una idea su come risolverlo?
Grazie mille! A presto!

Carmelo,
prova la soluzione del mio programmino lo trovi nella sezione Servizi 
offerti del mio sito internet sotto riportato.
Vedi se il mio programma risponde alle tue esigenze e fammi sapere.
Massimiliano Monti
Cel: 
+39 - 335 - 8477278
Mail: 
massimili...@matia.it
Url: 
http://www.multimodo.com/mmjstudio/
--- posted by geoForum on 
http://www.delphiedintorni.it

Grazie Jano78,
ma non credo sia adatta al mio problema questa soluzione, perchè non
voglio inviare tramite Outlook...
Qualcuno sa come posso fare per "clonare" l'IdMessage del thread
principale (il Form) sui vari threads secondari??
Come già detto, ho provato con IdMessage->LoadFromFile, ma ho avuto
problemi con gli allegati...
Ciao!

Mi puoi spiegare di preciso cosa vuoi fare perchč forse nel programma 
che ti ho detto di scaricare ci sono le istruzioni per mandare mail 
anche senza passare da outlook.
Ma se ci sentiamo per telefono forse risolviamo molto di piů.
Se puoi chiamarmi posso vedere di aiutarti al meglio cosě via internet 
faccio un po' fatica.
Sempre che la cosa non ti dia disturbo.


Ciao a tutti!
Dopo parecchio lavoro sono riuscito a risolvere tutti i problemi legati
all'accesso concorrente, e adesso non ho più crash o blocchi di
programma. Però purtroppo ho ancora il problema degli allegati, i
quali vengono codificati all'interno del messaggio ma non vengono
visualizzati nel client di posta del destinatario.
Posto un semplicissimo codice col quale poter capire cosa ho fatto:
http://phpfi.com/113853
Qualcuno ha idea di come poter inviare i messaggi in modo da far
visualizzare anche gli allegati??
Grazie per l'attenzione!

Posto che usi le indy da quanto ho capito voglio dirti come ho fatto io,
indipendentemente dal fatto che io uso outlook, ti consiglio comunque di 
guardare quel programmino che ho fatto non per altro ma perchè avevo il 
tuo stesso problema con gli allegati e ho trovato un arzigogolo che è 
anche carino.
Scaricatelo lasciando perdere il discorso di come mando la mail ma 
focalizzandoti su come il programma manda gli allegati, tra parentesi, 
esiste anche la funzione che manda il programma con i componenti 
standard di delphi.
Se vuoi la versione che usa le indy ho lo stesso programma fatto però 
con le indy anzichè i componenti standard.
Se mi mandi una mail ti invio il programma con le indy online c'è solo 
l'altro.
Però il principio non cambia per mandare gli allegati la procedura che 
ho utilizzato, vale sia se usi IDMessage che se usi Mapi.
Per cui il mio consiglio è di scaricare il software che ho fatto così 
non ci pensi più.
Lo trovi su 
http://www.multimodo.com/mmjstudio/File/Programmi%20in%20Delphi/OE_D62
(1).zip.
Detto questo ti chiedo una cortesia se ovviamente me la vuoi e me la 
puoi fare, nel tuo software hai anche la possibilità di scaricarla la 
mail oltre che di inviarla o la invii e basta?
Se così è mi puoi mandare una copia del programma ta te fatto.
Spero di risentirti e di sapere se hai risolto il tuo problema.
Io l'ho fatto (parlo degli allegati).
massimili...@matia.it
Skype: massimiliano.monti.78
Ab. 
+39.0323.831011
C. 
+39.335.8477278
http:/


Nessun'altro ha idea su come poter risolvere questo problema degli
allegati??
Grazie! Ciao!

Per vedere se il problema della "clonazione" dell'IdMessage riguardava
solo i threads secondari, ho fatto la seguente prova:
TMemoryStream* pms = new TMemoryStream();
IdMessage1->SaveToStream(pms);
pms->Position = 0;
IdMessage2->LoadFromStream(pms);
delete pms;
Tutto sembra copiato bene, ma quando invio il messaggio gli allegati
(seppur presenti all'interno del messaggio) non sono visualizzabili sul
client di posta. Quindi ho praticamente lo stesso problema di quando ho
provato a fare questa copia sui threads secondari...
Il problema, a questo punto, sembra sia proprio dovuto all'IdMessage...
Come fare??
Grazie! Ciao!

Credo proprio di aver risolto ora...
Ho passato ad ogni thread la lista dei files da mandare come
attachment, ed in ogni thread ho seguito la procedura che usavo nel
form per inserire gli allegati... adesso funziona finalmente!



