Jak SKUTECZNIE wysyłać email z poziomu Delphi7?

0

Witam,
to moje pierwsze podejście do tematu Indy w Delphi7.
Potrzebuję napisać procedurę (a właściwie poprawić), która będzie wysyłać wiadomość e-mail z poziomu Delphi.
Program służy do obsługi zleceń i - w założeniach - o każdej zmianie statusu zlecenia Klient ma być informowany przez e-mail.

Na podstawie danych z sieci udało mi się napisać następujący fragment (oczywiście, przygotowanie dokładnej treści wiadomości pomijam, jako nieistotne dla problemu):

// ------------------------- PRZYGOTOWANIE WIADOMOŚCI ---------------------///
  Form1.IdMessage1.Recipients.EMailAddresses := MessageEditForm.le_odbiorca.Text;
  form1.IdMessage1.Subject := MessageEditForm.le_Temat.Text;
  Form1.IdMessage1.Body.Text := MessageEditForm.Memo_tresc.Text;
  

// --------------------- WYSYŁANIE WIADOMOŚCI ---------------------------- ///

  Form1.idSMTP1.Host:='poczta.o2.pl';
  Form1.idSMTP1.Username:='adres nadawcy';
  Form1.idSMTP1.Password:= 'hasło do konta pocztowego';
  Form1.idSMTP1.Send(Form1.idMessage1);

Użyte komponenty z pakietu Indy9 to:
TIdSMTP, TIdMessage, TIdSSLIOHandlerSocket (przy I10 zastąpiłem go TIdSSLIOHandlerSocketOpenSSL)

Niestety, wynikiem działania tej procedury jest błąd 'Could not load SSL Library', zarówno przy próbie wysłania wiadomości przez serwer tlen.pl, jak też przez gmail.com.

Walczyłem z tym 2 dni, przeczytałem mnóstwo wskazówek, robiłem mnóstwo poprawek i nadal efekt zerowy...

W końcu przeszedłem na Indy10 - czytałem, że mniej problematyczny w stosunku do 9. Zmodyfikowałem lekko kod (na potrzeby I10), ale.... mam już totalny przecier z mózgu i nadal brak efektu...
Jak to ugryźć?
Jak skonfigurować komponenty?

0

W folder gdzie masz program wrzuć biblioteki libeay32.dll i ssleay32.dll (Pobierz je stąd : http://indy.fulgan.com/SSL/). Oczywiści nie zapomnij podłączyć tego komponentu od szyfrowania do idSMTP.IOHandler. Dla Gmail, konfiguracja będzie wyglądała tak :
Host : smtp.gmail.com
Port : 465
Szyfrowanie : TLSv1
Parametr UseTLS dla idSMTP ustaw na utUseImplicitTLS.

Będzie działało na 100%, bo właśnie testowałem.

PS. Host i Port wpisuj do idSMTP, podpięty komponent od SSL/TLS sam się dostosuje.
PS2. Sprawdziłem jak sprawa się ma dla o2.pl(tlen.pl) i w konfiguracji nic nie trzeba zmieniać oprócz oczywiście hosta.

Pozdrawiam.

0

Dzięki za pomoc - poszło dalej, jednak nadal wywala mi błąd.
Z poziomu kompilatora:
user image

Z poziomu programu:
user image

Nadal jestem głupi...

0

Może kAzek się wypowie także, bo to tutaj niemal ekspert od Delphi + Indy. Jednak jeżeli nie musi to być konieczne oparte o Indy, to polecam spróbować z Synapse. Dołączony do tego posta jest kod + exek + wymagane przez Synapse również te dwie dllki, w wersjach pobranych ze strony projektu Synapse. Całóśc była testowana na o2.pl oraz gmail i działała. Jednak jeżeli musi to być pod Indy to może ktoś inny coś lepszego doradzi. Nie chcę narzucać Synapse, bo wielu mi to tutaj zarzucało, ale wiem że Indy nierozwijane sprawia problemy, a ja mam je wprawdzie w palecie komponentów pod Delphi 7, jednak praktycznie nie korzystałem z nich od bardzo długiego czasu.

0

@olesio, pobrałem, odpaliłem Twój program i... 'Nie można się zalogować! Błąd:'
Nie wiem już co to może być, bo skoro u Ciebie hulało, u Golden_Mind's hulało, a u mnie się sypie...

Uściślając: Win7U32, Avira Personal, D7PE...
Nawet wyłączyłem Thunderbirda, GoogleTalka i wszystko inne, co mogło się logować do poczty... i nadal nic...

0

Co prawda nie mam pod ręka zrobionego klienta IMAP, ale możesz zobaczyć jak to działa przy POP3 i SMTP, program gotowy i z bibliotekami, w załączniku.Wpisałem Ci już odpowiednie porty i hosty w programie. Masz tam dodatkowo zrobiony przeze mnie postęp pobierania mail'ów i ich wysyłania.

Sorki zapomniałem o źródłach : http://www.wrzuc.to/8f3mRxcF9x.wt

0
fourup napisał(a)

@olesio, pobrałem, odpaliłem Twój program i... 'Nie można się zalogować! Błąd:'
Nie wiem już co to może być, bo skoro u Ciebie hulało, u Golden_Mind's hulało, a u mnie się sypie...

Uściślając: Win7U32, Avira Personal, D7PE...
Nawet wyłączyłem Thunderbirda, GoogleTalka i wszystko inne, co mogło się logować do poczty... i nadal nic...

Sprawdziłem podesłany tytaj mój program wysyłając z gmaila na konto w o2.pl. Wprawdzie e-mail ląduje w spamie, ale dochodzi. Ważne jest chyba przy gmailu żeby w polu adres nadawcy był prawidłowy adres w postaci [email protected]. Może jak na chwile wyłączyć antywirusa albo firewall to pójdzie, chociaż to nie powinno przeszkadzać. Jeżeli podałeś dobre dane servera. Natomiast nie wiem jak będzie z obsługa IMAP. Ja pisałem ten program dośc dawno i pod kątem obsługi SMTP.

0

Ostatecznie skrypt na serwerze wysyłający maila i z poziomu Delphi wywoływanie go

0

Głupi pomysł, (ja tak kiedyś robiłem, ale to dalej głupi pomysł)
Lepiej tak
Połóż na formę komponenty TidMessage i TidSMTP.

Message.From.Name := 'Jan Kowalski';  //Nazwa Nadawcy
Message.From.Address := '[email protected]';  //Adres Nadawcy
Message.Recipients.EMailAddresses := '[email protected]';  //Adres Odbiorcy
Message.Subject := 'Jagódki';  //Temat

SMTP.UserName := [email protected]';  //Jeszcze raz login nadawcy
SMTP.Password := '12344321';                  //Hasło nadawcy
SMTP.Host :=  'smtp.poczta.onet.pl';       //Protokół
SMTP.Port := 587;                                  //Port
SMTP.AuthenticationType := atLogin;      // autoryzacja SMTP
SMTP.Connect;
  try
    SMTP.Send(Message);
  finally
    SMTP.Disconnect;
  end;
0

@janusz po jakiego czorta, podajesz mu kod, który on sam już dawno napisał ?
Btw. Sprawdziłem czy również email wysłany z konta gmail na o2.pl ląduj w spamie jak to wygląda przy kodzie olesia, ale jak się okazało u mnie e-mail pokazuje się w Odebranych, więc wszystko jest w porządku.

Pozdrawiam.

0

No, i dzisiaj już mi banglają proggi...
Wersja Golden_Mind'a - wszysko działa poprawnie, ale na porcie 587 (google).
Wersja Olesia - działa, ale wysyła pocztę dopiero za drugim podejsciem do tego samego adresu. Za pierwszym razem wywala, że wymagana autentyfikacja ...

Generalnie i mój kod nagle ożył i działa jak należy... :O

Dziękuję wszystkim za wielką pomoc!

Jak skończę ten fragment, będę musiał się zabrać za synchronizację danych z kompa lokalnego z serwerem... to też będzie penie jazda... Ale ja twardy jestem i łatwo nie odpuszczam... ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1