Witam!
Próbuję napisać prosty program, który wysyła maila na podany adres w Delphi 7 przy użyciu Indy 9, lecz wyskakuje błąd. Wie ktoś jak to ogarnąć?
++
Witam!
Próbuję napisać prosty program, który wysyła maila na podany adres w Delphi 7 przy użyciu Indy 9, lecz wyskakuje błąd. Wie ktoś jak to ogarnąć?
++
No świetnie że podałeś kod i wiemy w jaki sposób napisałeś program komunikat mówi jedynie że przekroczono limit czasu oczekiwania na połączenie a powodów może być dużo od błędnie wpisanej nazwy serwera SMTP lub portu przez zablokowanie programu na firewallu do braku połączenia awarii neta lub serwera z którym miał się łączyć.
Pokaż kod.
Był już taki problem:
[Delphi] Wysyłanie maila indy
uzyj synapse. kiedys tez uzywalem indy to szajs.
Dokładnie mam ten sam kod co w linku.
http://forum.4p[...]/Newbie/172690-delphi_wysylanie_maila_indy
IdMessage1.Body.Append('tresc maila');
IdMessage1.From.Name := 'imie od kogo';
IdMessage1.From.Address := 'adres od kogo';
IdMessage1.Recipients.EMailAddresses := '[email protected]';
IdMessage1.Subject := 'temat';
idSMTP1.Username := '[email protected]';
idSMTP1.Password := 'haslo';
idSMTP1.Host := 'smtp.gmail.com';
idSMTP1.AuthenticationType:=atLogin; // autoryzacja SMTP
idSMTP1.Connect;
try
idSMTP1.Send(IdMessage1); //wyślij
finally
idSMTP1.Disconnect;
end;
dodanie znacznika <code class="delphi"> - fp
@poczatkujacy599 skończ hejtować nie znasz pakietu nie masz pojęcia jak używać i płaczesz nie ma rzeczy którą można zrobić w Synsapse a nie można w Indy.
Tamten kod działa (tyle że w Indy 10 w 9 nie wiem bo już dawno nie mam i Tobie radzę zmienić na 10) ale NIE obsługuje SSL, dalej nie wiadomo z jakiego serwera poczty korzystasz czy to GMail czy innego i jakie ustawienia wpisałeś naturalnie nie chodzi o login i hasło tylko host i port.
Zmiana Indy z 9 na 10 dla Delphi 7:
1. Pobierz i wypakuj (ja zawsze do DELPHI\Source\Indy10) najnowszą wersję Indy z http://indy.fulgan.com/ZIP/ (w tej chwili jest to plik Indy10_5076.zip)
2. Wejdź w Components -> Install Packages... tam usuń wszystko co związane z Indy
3. Otwieraj i kompiluj pliki DPK po kolei (SuperCore nie koniecznie jeżeli nie korzystasz)
INDY\Lib\System\IndySystem70.dpk
INDY\Lib\Core\IndyCore70.dpk
INDY\Lib\Protocols\IndyProtocols70.dpk
INDY\Lib\SuperCore\IndySuperCore70.dpk
4. Otwieraj i instaluj pliki DPK po kolei (SuperCore nie koniecznie jeżeli nie korzystasz)
INDY\Lib\Core\dclIndyCore70.dpk
INDY\Lib\Protocols\dclIndyProtocols70.dpk
INDY\Lib\SuperCore\dclIndySuperCore70.dpk
5. Wejdź w Tools -> Enviroment Options zakładka Library i w Library path dodaj ścieżki do podfolderów Indy (System, Core, Protocols i ew. SuperCore)
EDIT: Widzę edytowałeś chodzi o GMail nie wiem czy aktualnie można się łączyć z GMail bez SSL (chyba nie) i prawdopodobnie dlatego tamten kod nie działa... jak nikt wcześniej nie pomoże to jutro napisze przykład łączenia z obsługą SSL (czy tam TLS nie wiem czego GMail aktualnie używa) bo teraz muszę wyjść i prawdopodobnie wrócę późno.
Próbowałem zmienić na INDY10 i dupa wyszła, przy odpalaniu programu nie znajduje pliku "IdSMTPBase.dcu".
Pod tym adresem: http://indy.fulgan.com/ZIP/Indy10_5076.zip - taki plik, jak IdSMTPBase.pas
na pewno istnieje. Także za pewnie nie dodałeś ścieżki dla library w opcjach IDE. Ale może jednak byś rozważył posłużenie się Synapse. Pyskujący gostek o nicku początkujący, hateował. Ale ja moge jeśli byś zdecydował się na Synapse podesłać Ci przykładowe kody moich dwóch programów pisanych kiedyś dla wprawy z użyciem Synapse do e-mailowania.
Jeden wysyła e-maile, z załącznikiem. A drugi odebrane e-maile w skrzynce rozpoznaje po żądaneym temacie i pozwala wysłać na nie automatyczną odpowiedź. Oba testowalem z kontami na gmail.com i poczta.o2.pl i działają ok. A z Synapse zawsze jest - imo - mniej problemów niż z Indy.
Nie dodałeś ścieżki do INDY\lib\Protocols w opcjach kompilatora bo tam jest ten plik coś więcej z przykładem jutro (a właściwie dzisiaj rano).
Obiecany przykład dla GMAIL:
begin
IdMessage1.Body.Append('tresc maila');
IdMessage1.From.Name := 'imie od kogo';
IdMessage1.From.Address := 'adres od kogo';
IdMessage1.Recipients.EMailAddresses := '[email protected]';
IdMessage1.Subject := 'temat';
IdSMTP1.IOHandler:= IdSSLIOHandlerSocketOpenSSL1; //IdSSLIOHandlerSocketOpenSSL znajdziesz na zakładce Indy I/O Handlers
IdSMTP1.UseTLS:= utUseImplicitTLS;
IdSMTP1.Username := '[email protected]';
IdSMTP1.Password := 'haslo';
IdSMTP1.Host := 'smtp.gmail.com';
IdSMTP1.Port:= 465;
IdSMTP1.Connect;
try
IdSMTP1.Send(IdMessage1); //wyślij
finally
IdSMTP1.Disconnect;
end;
olesio napisał(a):
A z Synapse zawsze jest - imo - mniej problemów niż z Indy.
hmm pierwsze słyszę o problemach z Indy (czasem są pewne wynikające z błędów ale to bardzo sporadycznie i na pewno Synapse też nie jest ich pozbawione) a w Synapse zwykle (nie zawsze) trzeba się więcej "nakodzić" aby uzyskać to co w Indy można właściwie "naklikać" (w przypadku tego kodu też większość można ustawić w Object Inspector ja zrobiłem w kodzie aby nie tłumaczyć co i gdzie ustawić) za to użycie Indy przez to że ma dużo gotowych rozwiązań generuje większe exe niż z użyciem Synapse (a co dopiero ogóle bezpośrednio Winsock) tyle że wielkość pliku w obecnych czasach najczęściej nie ma wielkiego znaczenia. Oba pakiety mają swoje wady i zalety. Najlepiej znać oba i używać jednego z nich w zależności od potrzeb (jak chcesz coś zrobić na szybko najczęściej Indy będzie lepszym wyborem).
Podpowie mi ktoś jak poprawnie ustawić ścieżki? Nie ogarniam za bardzo do czego te ścieżki dać ;/
Jakiego kompilatora używasz bo jak Delphi 7 to Enviroment Options zakładka Library i w Library path
A do czego konkretnie tą ścieżkę ustawić? Do jakiegoś konkretnego folderu?
@babubabu wprawdzie jeszcze się śmieję gdy to piszę ale nie musisz być tak brutalny bo dział Newbie jest do pomagania osoba nie posiadającym żadnej wiedzy o programowaniu.
Wracając do pytania
TU_GDZIE_MASZ_INDY\Lib\System
TU_GDZIE_MASZ_INDY\Lib\Core
TU_GDZIE_MASZ_INDY\Lib\Protocols
ewentualnie
TU_GDZIE_MASZ_INDY\Lib\SuperCore\
Nie mam teraz dostępu do swojego PC. Ale wiem, że łatwo to znaleźć w ustawieniach IDE (menu Tools). Zdaje się tam gdzie inne ścieżki. Jeśli mnie pamięć nie myli to po myślniku w Library Path, dodać własną. Najlepiej wrzucić do podkatalogu LIB\Indy tam gdzie Delphi. Jest chyba też słowo $(Delphi) czy jakoś tak zastępująca ścieżkę do Delphi. Najlepiej uważnie poszukaj. Wiem, że piszę mało precyzyjnie ale tego pola edycyjnego nie da się przeoczyć moim zdaniem.
Edit: no zostałem ubiegnięty ;) Ale ok, teraz wszystko powinno być jasne.
Tutaj ustawiłem ścieżkę do Indy 10
http://i.imgur.com/9bVsQna.png
Wywala mi taki błąd przy próbie uruchomienia programu
http://i.imgur.com/qcV6cg0.png
A skąd on się wziąl w sekcji uses? Bo nie mam teraz jak tego sprawdzić, ale może taki moduł był w wersji 9, a w wersji 10 coś zostało pozmieniane. I jest zbędny albo znajduje się w jakimś podkatalogu.
Olesio, masz może gg? Myślę, że szybciej bym rozwiązał swój problem.
#edit
Nie wiem jak naprawić ten "błąd", instalacja indy10 jest jak dla mnie "dupna", po "zainstalowaniu" jej jest taki błąd i nie wiem czemu. Może by przeinstalować Delphi i od nowa wgrać indy10?
Sprawdź po prostu czy taki plik istnieje w całym pakiecie. Ja Indy nie używam jak wiadomo i unikam go na rzecz Synapse. A GG posiadam, ale pisz na forum, tak jak zasugerował FP w komentarzu. Nie uruchamiam za często GG na Androidzie, bo wole gdy całe archiwum trzyma mi AQQ. W zipie takiego pliku nie znalazłem, ale szukanie na Androidzie mam utrudnione. A bez tego unitu, jak rozumiem się nie kompiluje?
uses
Windows, Messages, SysUtils, Variants, Controls, Classes, Forms, StdCtrls,
IdMessage, IdAntiFreezeBase, IdAntiFreeze, IdIOHandler, IdIOHandlerSocket,
IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase,
IdMessageClient, IdSMTPBase, IdSMTP;
Moduł dExplicitTLSClientServerBase istniał i istnieje tylko trzeba było dodać tamte ścieżki do Library path on jest w INDY\Lib\Protocols\
Wpisałem taką ścieżkę(bez enterów) i nadal wyskakuje błąd, że jakiegoś pliku nie ma, lecz nie tego samego co w ześniej.
$(DELPHI)\Lib;
$(DELPHI)\Bin;
$(DELPHI)\Imports;
$(DELPHI)\Projects\Bpl;
$(DELPHI)\Lib\Indy10_5076\Lib;
$(DELPHI)\Lib\Indy10_5076\Lib\Protocols
Błąd
[Fatal Error] Unit1.pas(8): File not found: 'IdCmdTCPServer.dcu'
dodanie znaczników <code> - fp
No to w czym problem? Tak trudno uruchomić TotalCmd albo inny file mananger, na przykład darmowy FAR. I pod nim przeszukać gdzie plik się znajduje? Ten jest akurat w podkatalogu CORE. Btw, ja zawsze pamiętam, że Indy jakie instalowałem nie miało potrzeby dodania aż tylu podkatalogów. Ale może tak było w starszych wersjach. A nie wiem czy wrzucenie wszystkich Id*.pas
i ewentualnie plików *.inc
nie namiesza czegoś.
Anyway, ja bym zrobił tak. Pod jakimś filemanagerem, skopiował ściężki do wszystkich podkatalogów, wkleił je do jakiegoś edytora i podmienił na przykład C:\Program Files\...
odpowiednio na $(DELPHI)\Lib\Indy10_5076
, porozdzielał średnikami i dał wszystko w jednej lini. A następnie wkleił w odpowiednie pole. Ok, rozumiem dział Newbie, ale podstaw pracy z plikami chyba tutaj nie powinniśmy imo uczyć :/ Jak ktoś chce programować, to podstawy użyania programów i systemu operacyjnego - fajnie żeby znał.
Tutaj kiedyś pisałem pod nickiem poczonkujoncy, masz moduł wysyłania e-mail z wątkiem i pod indy 9 http://4programmers.net/Forum/Delphi_Pascal/160970-Wysy%C5%82ka_Maili_Delphi?start=0 Logowało na Gmail bez problemu, a teraz to nie wiem.
ZAinstaluj jeszcze raz Indy i zrób wszysko po kolei tak jak wcześniej napisałem i musi działać, coś po prostu źle zrobiłeś.