Przy pomocy pakietu Indy (v 10.1.5) bezskutecznie próbuję wysłać maila przy pomocy konta pocztowego na Interii.
Mam problem z uwierzytelnianiem i otrzymuję błąd : Error: authentication failed:
Podejrzewam, ale nie mam pewności, że do uwierzytelniania Interia wymaga mechanizmu SASL nie obsługiwanego przez Indy, np. OAUTHxxx
Poniżej testowy kod, który bez problemu nawiązuję połącznie i wysyła maile z Gmail i Onet ale nie działa z Interią.
Może ktoś coś podpowie
procedure TForm2.Button2Click(Sender: TObject);
begin
try
IdSMTP1.Disconnect;
// ustawinie parametrów SSL
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1;
IdSMTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
// powiązanie komponentów IdSASLxxxx z UserProvider
IdSASLCRAMMD51.UserPassProvider := IdUserPassProvider1;
IdSASLPlain1.UserPassProvider := IdUserPassProvider1;
IdSASLSKey1.UserPassProvider := IdUserPassProvider1;
IdSASLCRAMSHA11.UserPassProvider := IdUserPassProvider1;
IdSASLOTP1.UserPassProvider := IdUserPassProvider1;
IdSASLDigest1.UserPassProvider := IdUserPassProvider1;
IdSASLDigest1.UserPassProvider := IdUserPassProvider1;
// powiązanie komponentów IdSASLxxxx z klientem pocztowym IDSMTP
IdSMTP1.SASLMechanisms.Clear;
IdSMTP1.SASLMechanisms.Add.sasl := IdSASLCRAMMD51;
IdSMTP1.SASLMechanisms.Add.sasl := IdSASLPlain1;
IdSMTP1.SASLMechanisms.Add.sasl := IdSASLSKey1;
IdSMTP1.SASLMechanisms.Add.sasl := IdSASLCRAMSHA11;
IdSMTP1.SASLMechanisms.Add.sasl := IdSASLOTP1;
IdSMTP1.SASLMechanisms.Add.sasl := IdSASLDigest1;
IdSMTP1.SASLMechanisms.Add.sasl := IdSASLDigest1;
IdSMTP1.SASLMechanisms.Add.sasl := IdSASLAnonymous1;
IdSMTP1.SASLMechanisms.Add.sasl := IdSASLExternal1;
// hasło i login
self.IdUserPassProvider1.Username := trim(self.edtUser.Text); // <- użytkownik
self.IdUserPassProvider1.Password := trim(self.edtPasswd.Text); // <- hasło
// poostałe parametry IDSMTP
IdSMTP1.Host := 'poczta.interia.pl';
IdSMTP1.AuthType := satSASL;
IdSMTP1.UseEhlo := true;
IdSMTP1.port := 465;
IdSMTP1.UseTLS := utUseExplicitTLS;
IdSMTP1.ConnectTimeout := 2000;
if not IdSMTP1.Connected then
IdSMTP1.Connect;
// treść wiadomości
IdMessage1.Sender.Address := trim(self.edtUser.Text);
IdMessage1.From.Name := 'TEST A';
IdMessage1.From.Address := trim(self.edtUser.Text);
IdMessage1.Subject := 'TEST B';
IdMessage1.Recipients.EMailAddresses := trim(self.edtRecipient.Text);
IdSMTP1.Send(IdMessage1); // <==== TUTAJ WYJĄTEK: "Error: authentication failed:"
self.Memo1.Lines.Add('OK ..');
except
on e: exception do
begin
self.Memo1.Lines.Add('Error');
self.Memo1.Lines.Add(e.Message);
end;
end;
end;
Do celów testowych wszystkie niezbędne komponenty z pakietu Indy umieściłem na formie, ale docelowo chciał bym utworzyć klasę obsługującą uwierzytelnienie SASL i dziedziczącą z TIdSmtp