Newsgroup: it.comp.lang.delphi
Titolo: D7 - invio posta - ERROR: 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM [DB6P190CA0008.EURP190.PROD.OUTLOOK.COM]

Salve,
           Per inviare una e-mail da delphi 7 ho provato con un esempio che
utilizza i componenti Indy SMTP E MAILmessage.
 
Ottengo questo errore :
 ERROR: 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM [
DB6P190CA0008.EURP190.PROD.OUTLOOK.COM
]
 
 con questo codice:
-------------------------------------------------------------
procedure TFwps.Binvio2Click(Sender: TObject);
begin
  try
 
  SMTP.Host := '
SMTP-MAIL.OUTLOOK.COM
';
  SMTP.Port := 587;
 
  MailMessage.From.Address := '
xxxx...@oulook.com
';
  MailMessage.Recipients.EMailAddresses :='
xxxxx...@yahoo.it
';
 
  MailMessage.Subject := '...'; 
  MailMessage.Body.Text := '...';  
 
  SMTP.Username :='
xxxx...@outlook.com
';
  SMTP.Password :='xxxxxxxxx';
 
  SMTP.Connect(1000) ;
  SMTP.Send(MailMessage) ;
 
  except on E:Exception do begin
    SMTP.Disconnect;
    memo0.Lines.Insert(0, 'ERROR: ' + E.Message) ;
  end;
  end;
end; 
--------------------------------------------------------------
Ho fatto già molte ricerche, sembra qualcosa che riguarda la configurazione
SMTP di Office ma io non ho installato Office.
 
Ho già risolto diversamente con un exe a cui passo i paramentri che servono: SwithMail.exe
ma per puntiglio vorrei risolvere anche il problema qua sopra.
Solo se qualcuno lo ha già risolto.
 
Grazie,
Eugenio.
 

>   MailMessage.From.Address := '
xxxx...@oulook.com
';
 
Forse mi sbaglio, ma vedo che hai compilato 
   MailMessage.From 
 
ma non
   MailMessage.Sender
 

 
Ciao Eugenio,
 
anch'io utilizzo SMTP per l'invio di mail, se non ricordo male esiste la proprietà "Auth" qualcosa dove devi settarla a true, potrebbe essere questa la causa, al limite te lo vedo stasera a casa e ti mando il mio codice.
 
Ciao da Enrico Giudici c/o Anthelios.


  MailMessage.Sender è di tipo  TidAdressItem
  e non so a quale item fa riferimento
 
  cmq grazie, proverò anche questo
:-)
 
 
 

Ciao da Enrico Giudici c/o Anthelios.
 
Auth non c'č
Authenticate mi pare di averlo provato 
gli altri no
 
  smtp.Authenticate
  smtp.AuthenticationType
  smtp.AuthSchemesSupported
 
il messaggio di errore in effetti parla di un client non autenticato
per mandare email anonime.
 
non so, posso riprovare
:-)
 
 

 
 
anch'io facendo delle prove ho avuto problemi con yahoo, mi dava errore tipo il tuo, prova a mettere un'altro provider per sicurezza e vedi se ti da lo stesso errore.
 
Comunque domani ti giro il mio codice per inviare le mail.


> Auth non c'?

Grazie mille,
Ciao,
:-)
 

Ciao Eugenio,
 
come promesso qui di seguito la funzione che uso per mandare mail, utilizzo i componenti Indy ( TIdSMTP, TIdMessage )
 
Spero che ti serva.
 
Ciao da Enrico Giudici c/o Anthelios
 
function TDM.InviaMail(cHostSMTP    : string;
                       cPortaSMTP   : string;
                       cUserSMTP    : string;
                       cPasswordSMTP : string;
                       cFromMail    : string;
                       cToMail      : string;
                       cBCCMail     : string;
                       cOggettoMail : string;
                       cBodyMail    : string;
                       oListaFile   : tstrings): string;
var
    nIndice : integer;
    cCodErrore, cDesErrore : string;
begin
    ServerSMTP.Host := cHostSMTP;
    ServerSMTP.Port := StrToInt(cPortaSMTP);
    ServerSMTP.AuthenticationType := atNone;
    //
    if (trim(cUserSMTP) <> '') or
       (trim(cPasswordSMTP) <> '') then
       ServerSMTP.AuthenticationType := atLogin;
    //
    ServerSMTP.Username := cUserSMTP;
    ServerSMTP.Password := cPasswordSMTP;
    //
    MailMessage.From.Address := cFromMail;
    MailMessage.Recipients.EMailAddresses := cToMail;
    MailMessage.BccList.Add.Address := cBCCMail;
    MailMessage.Subject := cOggettoMail;
    MailMessage.Body.Text := cBodyMail;
    //
    for nIndice := 0 to oListaFile.Count-1 do
        begin
          if FileExists(oListaFile.Strings[nIndice]) then
             TIdAttachment.Create(MailMessage.MessageParts, oListaFile.Strings[nIndice]);
        end;
    //
    cCodErrore := '0-';
    cDesErrore := '';
    //
    try
      try
        ServerSMTP.Connect;
        ServerSMTP.Send(MailMessage);
      except on E:Exception do
        begin
          cCodErrore := '1-';
          cDesErrore := E.Message;
        end;
      end;
    finally
       begin
           MailMessage.MessageParts.Clear;
           if ServerSMTP.Connected then ServerSMTP.Disconnect;
           //
           for nIndice := 0 to oListaFile.Count-1 do
               begin
                 DeleteFile(pchar(oListaFile.Strings[nIndice]));
               end;
           //
           Result := cCodErrore + cDesErrore;
       end;
    end;
end;

On Wed, 26 Sep 2018 23:31:08 -0700 (PDT), 
enrico....@gmail.com
 wrote:
 
Purtroppo mi da lo stesso errore:
 
1-5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM [
DB6PR07CA0123.eurprd07.prod.outlook.com
]
 
Ci riproverņ domani.
Con SwithMail.exe  funziona e i valori che gli passo
sono gli stessi che passo alla tua funzione InviaMail.
Controllerņ meglio.
Grazie ancora comunque vada.
:-)
Ciao,
Eugenio.
 

Prova con questo spezzo di codice...
La mia variabile IdMessage corrisponde alla vostra MailMessage
 
 { --- Azzeramento Messaggio --- }
  IdMessage.Clear;
 
 { --- Mittente --- }
  with IdMessage.Sender do begin
    Name    := FromName;
    Address := FromMail;
  end;
 
 { --- From --- }
  with IdMessage.From do begin
    Name    := FromName;
    Address := FromMail;
  end;
 
 { --- Risposta a (ReplyTo) --- }
  with IdMessage.ReplyTo.Add do begin
    Name    := DestName;
    Address := DestMail;
  end;
 
Puoi anche omettere "Risposta a..." non è obbligatorio

Forse vi può anche servire questo altro pezzo di codice...
Se dovete connettervi ad un server in TLS o SSL (come ad esempio Aruba o Gmail) dovete gestire anche la connessione SSL...
 
Io utilizzo un record di scambio che contiene tutte le informazioni per l'invio delle mail (RecMail), compresi i parametri di connessione e le modalità di autenticazione.
 
La compilazione condizionale che vedete mi serve per la compilazione con le varie versioni di Delphi.
 
Nelle dichiarazioni è necessario aggiungere:
    IdSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL;
 
che deve essere creato prima di utilizzarlo:
 
 { --- Autenticazione --- }
  try
    IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create( Fb );
  except
    IdSSLIOHandlerSocketOpenSSL := Nil;
  end;
 
deve essere collegato con degli eventi di gestione:
 
 { --- Eventi per Controllo Autenticazione --- }
  if IdSSLIOHandlerSocketOpenSSL <> Nil
    then begin
       IdSSLIOHandlerSocketOpenSSL.OnGetPassword := DoSSLIOHandlerSocketOpenSSLGetPassword;
       IdSSLIOHandlerSocketOpenSSL.OnStatus      := DoSSLIOHandlerSocketOpenSSLStatus;
      {$ifdef DelphiIndyOld}
       IdSSLIOHandlerSocketOpenSSL.OnStatusInfo  := DoSSLIOHandlerSocketOpenSSLStatusInfo;
      {$endif}
    end;
 
 
 
utilizzato:
 
 { --- Autenticazione Tls & GMail --- }
  if RecMail.AuthMode in (MailAuthMode_Tls + MailAuthMode_Ssl + MailAuthMode_Gmail + MailAuthMode_ArubaPec)
    then begin
     { --- Aggiunte --- }
      IOHandler := IdSSLIOHandlerSocketOpenSSL;
 
     { --- Modalità di Autenticazione Implicita / Esplicita --- }
      if RecMail.AuthMode in (MailAuthMode_Ssl + MailAuthMode_ArubaPec)
        then UseTLS := utUseImplicitTLS
        else UseTLS := utUseExplicitTLS;
 
     { --- SSL --- }
      if IdSSLIOHandlerSocketOpenSSL <> Nil
        then begin
          IdSSLIOHandlerSocketOpenSSL.Destination := RecMail.SmtpHost + ':' + Str000(RecMail.SmtpPort);
          IdSSLIOHandlerSocketOpenSSL.Host := RecMail.SmtpHost;
          IdSSLIOHandlerSocketOpenSSL.Port := RecMail.SmtpPort;
 
         { --- Opzioni Autenticazione --- }
          case RecMail.AuthMode of
           // Tls
            maTls:      IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;
            maTlsv1:    IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;
           {$ifdef DelphiXEN}
            maTlsv1_1:  IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1_1;
            maTlsv1_2:  IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1_2;
           {$else}
            maTlsv1_1:  IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;
            maTlsv1_2:  IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;
           {$endif}
 
           // Ssl
          //maSsl:      IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;
            maSsl:      IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv23;
            maSslv2:    IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv2;
            maSslv23:   IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv23;
            maSslv3:    IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv3;
 
           // Gmail
            maGmail:    IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;
 
           // Aruba Pec
            maArubaPec: IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv23;
          end;
          IdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode := sslmUnassigned;
          IdSSLIOHandlerSocketOpenSSL.SSLOptions.VerifyMode := [];
          IdSSLIOHandlerSocketOpenSSL.SSLOptions.VerifyDepth := 0;
        end;
    end;
 
 
e alla fine liberato
 
  try
    IdSSLIOHandlerSocketOpenSSL.Free;
  except
  end;
 

Se dovete connettervi ad un server in TLS o SSL (come ad esempio Aruba o Gmail) dovete gestire anche la connessione SSL...
 
Grazie mille Alessandro,
Ho l'impressione che dovrò studiarmi parecchie cose...
Per il momento una soluzione l'ho trovata ,  forse ne troverò anche un'altra
ma sono cose che non conosco bene e preferisco prenderle con le pinze.
 
Saluti,
Eugenio.
 
 

Ciao,
  come ha anticipato Alessandro devi configurare la "parte" SSL.
Io mando in automatico delle email tramite yahoo, qui gia' da un paio di 
anni e' richiesta l'autenticazione SSL (settando su yahoo la funzione invio 
da terze parti ... o simila).
 
Non e' cosi' complicato settare l'SSL, per quello c'e' un componte.
Sono, pero', necessarie un paio di DDL (libeay32.dll ssleay32.dll).
 
Ciao
 
Daniele