Wysyłanie maila z użyciem Indy 9.

0

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ąć?

user image

++

0

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ć.

0

Pokaż kod.

Był już taki problem:
[Delphi] Wysyłanie maila indy

0

uzyj synapse. kiedys tez uzywalem indy to szajs.

0

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

1

@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.

0

Próbowałem zmienić na INDY10 i dupa wyszła, przy odpalaniu programu nie znajduje pliku "IdSMTPBase.dcu".

0

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.

0

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).

2

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).

0

Podpowie mi ktoś jak poprawnie ustawić ścieżki? Nie ogarniam za bardzo do czego te ścieżki dać ;/

1

Jakiego kompilatora używasz bo jak Delphi 7 to Enviroment Options zakładka Library i w Library path

0

A do czego konkretnie tą ścieżkę ustawić? Do jakiegoś konkretnego folderu?

1

@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\

1

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.

0

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

1

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.

0

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?

0

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?

0
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\

0

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

1

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ł.

0

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.

0

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ś.

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