Newsgroup: it.comp.lang.delphi
Titolo: Connessione a yahoo

Ciao a tutti,
 
posto un pezzo di codice che con w7 non da problemi mentre sul vecchio XP da 
un problema di connessione strano..... cioe' rimane in attesa e dopo qualche 
istante (1-2 minuti) la connessione va in timeout.
 
Ecco il codice dove
 
SSL1: TIdSSLIOHandlerSocketOpenSSL;
SMTP1: TIdSMTP;
Msg1: TIdMessage;
 
procedure TFIF.Btn1Click(Sender: TObject);
begin
 
  // Invio E-Mail
  // Setting SSL
  SSL1.Destination:='
smtp.mail.yahoo.it:587
';
  SSL1.Host:='
smtp.mail.yahoo.it
';
  SSL1.Port:=587;
 
  // Setup SMTP
  SMTP1.Host:='
smtp.mail.yahoo.it
';
  SMTP1.Port:=587;
  SMTP1.Username:=Edt4.Text;
  SMTP1.Password:=Edt5.Text;
 
  // Message ...
  Msg1.From.Name:=Edt1.Text;
  Msg1.From.Address:=Edt2.Text;
  Msg1.Recipients.EMailAddresses:=Edt6.Text;
  Msg1.Priority:=mpNormal;
  Msg1.Subject:=Edt7.Text;
  Msg1.Body.Text:=MM1.Lines.Text;
 
  // File incluso
  if AttFile=nil then
        AttFile:=TIdAttachmentFile.Create(Msg1.MessageParts,ED1.Text);
 
  // Invio ..
  MM1.Lines.Clear;
  try
 
    try
 
     SMTP1.Connect;
     SMTP1.Send(Msg1);
 
    except on E : Exception do
    begin
      Bottone:=1;
      SMTP1.Disconnect;
      If  MessaggioGenerico('COMUNICAZIONE !!!!' + #13 +
                   'Errore di trasmissione !!!!!' + #13 +
                   'Si vuole riprovare o terminare ?',[mgYesNo])<>mgContinua 
Then
      begin
        Close;
      end;
    end;
 
    end;
 
  finally
 
    If SMTP1.Connected Then
    begin
      SMTP1.Disconnect;
      Btn1.Visible:=False;
      Bottone:=0;
      MessaggioGenerico('COMUNICAZIONE !!' + #13 +
         'Documento inviato con successo !!!',[mgOK]);
      Close;
    end;
  end;
end;
 
Mi potete dire dove e' sbagliato il codice ??? (e perche' su w7 funziona)
 
Infine, come posso fare per inviare piu' di un file in allegato ???
 
Ambiente w7 , delphi XE2, Indy 10
 
Grazie per l'attenzione
 
Ciao
 
Daniele
 
PS: e' una procedura test, quindi se ci sono suggerimenti sul migliorarla 
sono ben accetti. 
 

Per prima cosa controllerei che le DLL di openssl sono le stesse su entrambe le piattaforme.
 
Per un problema simile su gmail c'è un th di qualche settimana fa nel quale è contenuto un link ad un mio quesito sui forum di indy.
Da li puoi estrarre del codice piu' pulito e ottimizzato.
 
Infine, io non condivido nella maniera piu' assoluta che siano nascosti/persi i messaggi delle eccezioni:
 
except on E : Exception do
    begin
      Bottone:=1;
      SMTP1.Disconnect;
      If  MessaggioGenerico('COMUNICAZIONE !!!!' + #13 +
                   'Errore di trasmissione !!!!!' + #13 +
                   'Si vuole riprovare o terminare ?',[mgYesNo])<>mgContinua
 
 
Magari tu ora da IDE con la notifica delle eccezioni attiva, sto messaggio lo vedi.
Ma se un utente ti chiama segnalando questo problema TU saprai che la mail non parte ma non saprai perche'.
Il perche' te lo dice il messaggio della eccezione.
 
Ti suggerisco quindi di mostrare all'utente un messaggio composto cosi:
 
Msg := 'Il sistema segnala il seguente errore:'#13#10 +
        E.ClassName + #13#10 +
        E.Message;
 
Avere anche il *nome della classe di eccezione* è una mia paranoia che potrebbe risultare utile in presenza di piu' suites di componenti di terze parti.
 
Ovviamente (Ma non per tutti) se le tue applicazioni scrivono dei log magari questo livello di dettaglio potrebbe non essere necessario.
 
A.

 magari questo livello di dettaglio potrebbe non essere necessario.
Non mi sono spinto avanti fino a questo punto, nel senso che ancora al file 
di log non sono ancora arrivato.
 
Naturalmente prima o poi dovrai pure riscuotere i caffe' che ti devo !!!
 
Grazie ancora
 
Ciao
 
Daniele