Delphi FAQ Sieć Poczta

Jak wysłać e-mail poprzez komponenty Indy lub FastNet

Ktos

Zaraz mie szlag trafi jak sie ktos jescze o to zapyta:
dajemy na forme TIdMessage (MessageSend) i TIdSMTP (SMTP)

 MessageSend.Body.Append('tresc maila'); 
 MessageSend.From.Name := 'imie od kogo';
 MessageSend.From.Address := 'adres od kogo';
 MessageSend.Recipients.EMailAddresses := 'Odbiorca';
 MessageSend.Subject := 'temat';
 
 { UserName bądź UserId - to jest zeleżne od wersji Indy. ja pisałem na Indy 8 }
 SMTP.UserName := 'nazwa użytkownika serwera SMTP';
 SMTP.Password :=  'hasło';
 SMTP.Host :=  'adres serwera SMTP';
 SMTP.AuthenticationType:=atLogin; // autoryzacja SMTP
 SMTP.Connect; 
 try
  SMTP.Send(MessageSend); //wyślij
 finally
  SMTP.Disconnect; 
 end; 

Załączniki, jakby komuś nie chciało czytać się komentarzy poniżej:
TIdAttachment.Create(MessageSend.MessageParts, OpenDialog1.FileName);

Natomiast, jeżeli mamy dostęp do komponentów FastNet (których już nawiasem mówiąc nie ma w nowszych Delphi) to możemy użyć takiego kodu:

NMSMTP1 to komponent TNMSMTP.

begin 
  NMSMTP1.Host := 'smtp.MojaSkrzynka.pl'; // serwer SMTP
  NMSMTP1.Port := 25; // port SMTP
  NMSMTP1.UserID := 'ToJa'; // użytkownik serwera
  NMSMTP1.Connect; // połączenie
  Sleep(100); // poczekaj
  NMSMTP1.PostMessage.FromAddress := '[email protected]'; // z jakiego adresu
  NMSMTP1.PostMessage.FromName := 'Kowalski'; // nazwisko użytkownika
  NMSMTP1.PostMessage.Subject := Edit1.Text; // temat
  NMSMTP1.PostMessage.ToAddress.Add('[email protected]'); // na jaki adres wysłać
  NMSMTP1.PostMessage.Body.Add('Tresc'); // treść maila
  NMSMTP1.SendMail; // wysyła
  NMSMTP1.Disconnect; // rozłącza
end; 

18 komentarzy

Dla Delphi X10 należy podać takie wartości autentykacji:
SMTP.AuthType:=satDefault; // autoryzacja SMTP
Reszta działa poprawnie w 2017 roku

Moje doświadczenia z indy10 pozwalają mi stwierdzić że ich komponenty zawierają zbyt dużo błędów, aby napisać chociaż prostą aplikację. Zrobiłem prosty serwerek FTP, lokalnie działał bez zarzutu, między dwoma komputerami niestety połączenie było zrywane - nie znalazłem przyczyny. Napisanie mini chata za pomoca komponentów indy miało identyczny efekt: lokalnie wszystko dobrze w sieci całkowita porażka. Ostatnie moje doświadczenie dotyczy komponentów idPOP3 i SMTP. W sumie można powiedzieć, że działają, lecz występuje problem z załącznikami. Gdy sprawdzamy załączniki po raz pierwszy można zapisać znaleziony załącznik na dysk, Gdy próbujemy odczytać ponownie załącznik kończy się to niepowodzeniem. Napisanie własnego klienta pocztowego na indy więc odpada. Przekopałem się przez sieć i nie znalazłem rozwiązania tych problemów o których pisałem wcześniej. Jeśli komuś uda się rozwiązać wymienione przeze mnie problemy proszę zapodać gdzieś tu rozwiązania

Mi to nie działa wypisuje mi "Connection time out " i blokuje kompa lub scoket 1049 i tak dalej
wpisałem tam gdzie serwer SMTP "mail.tlen.pl" port 25 tak samo ja w Książce "Delphi 7 Cwiczenia zaawansowane " macie jakąś rade ???????Kod źródłowy z ksiązki sie kompiluje ale pożnij nic
Pozdrawiam

chee jakie sendmessage??? Ma byc MessageSend!!!

nic nie napisales o zabezpieczeniach. jak zrobic zeby NIC sie nie robilo po zlym wpisaniu loginy/hasla - brak netu itp. ?

nic nie napisales o zabezpieczeniach. jak zrobic zeby NIC sie nie robilo po zlym wpisaniu loginy/hasla - brak netu itp. ?

[Error] Unit11.pas(118): Undeclared identifier: 'atLogin'

taak wszystko fajnie pięknie ale nikt nie wspomniał o autentykacjii błąd \"delphowca\" jest przez to powodowany a wystarczy 1 linijka przed wysyłką :D
SMTP1.AuthenticationType:=atLogin;

w indy 10 trzeba zrobic tak:
uses
...,idAttachmentFile,...;

...
var
idAttachment : TidAttachmentFile;

begin
...
// dodanie zalacznika;
try
idAttachment := TIdAttachmentFile.Create(Form1.Message.MessageParts,'FileName');
except
idAttachment.CleanupInstance ;
end;

...

end;

Message to TidMessage component.

Załączniki nie działają w INDY 10 :(

a co z autoryzacją?

SMTP.UserName a nie SMTP.UserID !!!
To zależy od wersji Indy!!!!

SMTP.UserName a nie SMTP.UserID !!!

nie moge znalezc sendmessage...

Okey, tyle na temat wysylania... pozostaje jeszcze kwestia odbierania...

o co ci chodzi? jaki niezly numer?

Azgon, no problem z załącznikami:

TIdAttachment.Create(MessageSend.MessageParts, OpenDialog1.FileName); Jeszcze coś?

ps: Sorry Ktos, ale numer to niezły

Spoko, ale moglbys jeszcze napisać coś o załącznikach ...