Newsgroup: it.comp.lang.delphi
Titolo: Invio multiplo di email con IdSMTP

 
          Salve, premeto che sono nuovo di questo NG e di Delphi
Mi aiutate? Ho creato una procedura per l'invio multiplo di email ma non mi
funziona.
Mi invia tutte le email al primo indirizzo quanti sono i records della
tabella.
Uso Delphi 7, Indy 9, Access XP.
Ecco la mia procedura. Dove sbaglio?
procedure TSendForm.Invia(Sender: TObject);
var
  I, T : Integer;
begin
  try
  T := DataModule1.Lista.RecordCount;
  MainForm.IdSMTP1.Username := DataModule1.ParametriUsername.Value;
  MainForm.IdSMTP1.Password := DataModule1.ParametriPassword.Value;
  MainForm.IdSMTP1.Host := DataModule1.ParametriServer.Value;
  MainForm.IdSMTP1.Port := DataModule1.ParametriPorta.Value;
  MainForm.IdSMTP1.Connect;
  MainForm.IdMessage1.Subject := DataModule1.EmailOggetto.Value;
  MainForm.IdMessage1.Body.Add(DataModule1.EmailBody.Value);
  MainForm.IdMessage1.ContentType := DataModule1.EmailTipocontenuto.Value;
  MainForm.IdMessage1.Organization :=
DataModule1.ParametriOrganizzazione.Value;
  MainForm.IdMessage1.From.Address :=
DataModule1.ParametriEmailmittente.Value;
 
MainForm.IdMessage1.From.Name
 := DataModule1.ParametriMittente.Value;
  MainForm.IdMessage1.Sender.Address :=
DataModule1.ParametriEmailmittente.Value;
 
MainForm.IdMessage1.Sender.Name
 := DataModule1.ParametriMittente.Value;
  for I := 1 to T do
  begin
    MainForm.IdMessage1.Recipients.Add.Address := DataModule1.ListaEmail.Value;
 
MainForm.IdMessage1.Recipients.Add.Name
 :=
DataModule1.ListaNominativo.Value;
    MainForm.IdSMTP1.Send(MainForm.IdMessage1);
    Panel1.Caption := 'Invio email a ' + DataModule1.ListaNominativo.Value;
    MainForm.IdMessage1.Recipients.Clear;
    DataModule1.Lista.Next;
  end;
  MainForm.IdSMTP1.Disconnect;
  Application.MessageBox('L''email è stata inviata a tutti i destinatari.',
'Attenzione', MB_ICONINFORMATION or MB_OK);
  except
  Application.MessageBox('Si è verificato un errore durante l''invio
dell'email.', 'Attenzione', MB_OK+MB_ICONHAND+MB_DEFBUTTON1+MB_APPLMODAL);
  end;
end;
Grazie. Francesco Napolitano
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 
MainForm.IdMessage1.Recipients.Add.Name
 := ...
Ogni chiamata al metodo /Add/ crea un nuovo "recipiente", quindi un 
nuovo destinatario; qui stai creando due recipienti, memorizzando 
l'indirizzo nel primo e il nome nel secondo.
Inoltre, apparentemente stai memorizzando nella proprietà /Address/ 
tutti gli indirizzi a cui devi spedire il messaggio.
La procedura corretta è la seguente: richiama /Add/ per ogni 
destinatario da raggiungere, memorizzando il valore restituito dal 
metodo /Add/ in una variabile, in modo da poterti riferire alle 
proprietà /Address/ e /Name/ di ciascun oggetto per memorizzare 
rispettivamente l'indirizzo email e il nome da visualizzare per il 
destinatario, per passare poi al successivo fino ad esaurimento dei 
destinatari.
Ricordati che i destinatari saranno visibili nel messaggio; usa la 
proprietà /Bcc/ (che ha la stessa struttura di /Recipients/) per 
renderli conosciuti al server SMTP senza riportarli però nel messaggio.
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

                    Ti ringrazio della risposta ma non č quello che avevo in mente.
Io volevao fare in modo che caricasse il destinatario, lo inviasse, dopo
averlo inviato cancellasse la lista e caricasse il successivo cosě facendo
elimino anche il problema che gli altri utenti vedano gli altri indirizzi.
Come puotrai vedere da questo passaggio:
  for I := 1 to T do
  begin
    MainForm.IdMessage1.Recipients.Add.Address := DataModule1.ListaEmail.Value;
 
MainForm.IdMessage1.Recipients.Add.Name
 :=DataModule1.ListaNominativo.Value;
    MainForm.IdSMTP1.Send(MainForm.IdMessage1);
    Panel1.Caption := 'Invio email a ' + DataModule1.ListaNominativo.Value;
    MainForm.IdMessage1.Recipients.Clear;
    DataModule1.Lista.Next;
  end;
Francesco Napolitano


 
MainForm.IdMessage1.Recipients.Add.Name
 :=DataModule1.ListaNominativo.Value;
Ribadisco che nel tuo codice, con particolare attenzione alla parte 
riportata sopra, richiami due volte il metodo /Add/ aggiungendo due 
destinatari, e non uno solo, in quanto il metodo /Add/ crea un nuovo 
recipiente, di cui imposti l'indirizzo nel primo, e solo l'indirizzo, e 
il nome nel secondo, e solo il nome (senza indirizzo).
Dovresti invece scrivere codice simile al seguente:
   ...
   MyRecipient := MainForm.IdMessage1.Recipients.Add;
   MyRecipient.Address := AnAddress;
   MyRecipient.Name := AName;
   ...
