Wysyłka Maili Delphi

0

Witam, chciałbym napisac program w Delphi ktory po kliknieciu w button wysyla mi mail z trescia Edit boxa.
Sa 3 pola na Formie, po kliknieciu Wyslij zeby wysylalo na moj mail. Napisalem prosta przegladarke w Delphi ale w ogóle sie na tym nie znam, nie umiem instalowac componentow, Indy czy co to tam jest :P, jezeli taki temat byl to przepraszam, jezeli ktos bylby tak laskawy i mogl mi napisac jak sie to robi, lub jak sie instaluje IdMessage, IdSMTP bede bardzo wdzieczny, Dzieki !

0
Alayah napisał(a)

... jak sie instaluje IdMessage, IdSMTP bede bardzo wdzieczny, Dzieki !

Algorytm instalacji:

  1. indy_setup.exe
  2. Next
  3. Next
  4. ...

itd.

0
</quote>

Algorytm instalacji:

  1. indy_setup.exe
  2. Next
  3. Next
  4. ...

itd.</quote>

Tyle ze nie moge nigdzie znajsc instalki do Indy, same source code bo linki w ktorych byly instalki wygasly :(

0

Do jasnej ciasnej, ile się z Miśkiemd mamy powtarzać, że Indy ssie i Synapse rządzi. Dlaczego nie chcesz do
wysyłania emaili używać czegoś co jest prostsze i lepsze od badziewnego Indy. Pamiętajcie Synapse rządzi ;P
Ok, oto opis co masz zrobić. 1. Ze strony http://synapse.ararat.cz/doku.php/download pobierasz synapse i do
katalogu ze swoim projektem rozpakowujesz lub po rozpakowaniu kopiujesz moduły o następujących nazwach:

blcksock.pas
smtpsend.pas
sswin32.pas
synacode.pas
synafpc.pas
synaip.pas
synautil.pas
synsock.pas

Bo Synapse się nie instaluje tylko rozpakowuje i używa. Możesz także wypakować te pliki do podkatalogu
LIB w Delphi. Jednak ja mam taki zwyczaj, i Tobie też polecam, że moduły wszystkich używanych w kodzie
niestandardowych modułów trzymam w katalogu z projektem, a ewentualne komponenty (poza SynEditem i
Indy, które mam zainstalolwane, ale już nie używam) mimo że mogę je instalować w używanym Delphi 7 to
tworzę je dynamicznie. Robię to po to aby ewentualnie jak jakaś osoba otrzyma ode mnie kod źródlowy, to
mogła otworzyć plik projektu i całość bez problemów skompilowac bez potrzeby instalowania komponnetów
u siebie. 2. To Teraz dodajesz do uses moduł smtpsend. 3. Resztę załatwi poniższy kod. Adres nadawacy
oraz odbiorcy muszą być prawidłowe. W Memo1.Lines jest treść e-maila, bo wymagany jest tu typ TStrings.
Kod poniżej wysyła z konta na poczta.o2.pl i działa dobrze. Testowane pod Delphi 7 Personal. Mail doszedł.

  if SendToEx('[email protected]', '[email protected]', 'Temat', 'poczta.o2.pl:587', Memo1.Lines, 'user', 'pass') = True then
  begin
    ShowMessage('Wysłane OK.');
  end
  else
  begin
    ShowMessage('Jakiś błąd!');
  end;

Pakiet Synapse zawiera także inne moduły, a w nich klasy do wysyłania i odbierania e-maili. Jednak do tej
prostej operacji lepiej skorzystać z gotowej funkcji. Oczywiście poza tym Synapse świetnie obsluguje też:
protokół FTP oraz HTTP. I mam nadzieję, że post szybko nie zniknie żeby mozna do niego odslyać innych.

0

Wielkie T H X olesio. Niewiem jak moge ci sie odwdzieczyc :P zaraz przetestuje ale z tego co widze w 99% bedzie dzialac, Dziekowa.

0

olesio: "dodajesz do uses modul stmpsend"

Wiem, pewnie myslicie po co wgl zaczynam sie bawic w Delphi nie znajac podstaw, ale niewiem jak dodac modul do uses .. :P ..

0

Synapse jest do d**y

Ja uzywam tego wlasnego modulu i dziala dobrze. Wszystko w watkach ze zwracaniem rezultatu.

SendMailIndy.pas

unit SendMailIndy;

interface

uses
  IdMessage, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdMessageClient, IdSMTP, Classes;

type
  TStatus = (sWyslano, sNiePolaczono, sNieWyslano);

  TEmail = record
    Host,
    Login,
    Haslo,
    AdresOdbiorcy,
    Temat,
    Tresc,
    Zalacznik: String;
  end;

  TOnStatusEvent = procedure(AStatus: TStatus; AEmail: TEmail) of object;

  TWyslijMail = class(TThread)
  private
    FEmail: TEmail;
    FOnStatus: TOnStatusEvent;
    FStatus: TStatus;
  protected
    procedure Execute; override;
    function Send: TStatus;
    procedure DoOnStatus;
  public
    constructor Create(Email: TEmail; OnStatus: TOnStatusEvent);
  end;

implementation


constructor TWyslijMail.Create(Email: TEmail; OnStatus: TOnStatusEvent);
begin
  FreeOnTerminate:= True;
  FEmail := Email;
  FOnStatus := OnStatus;

  inherited Create(False);
end;

procedure TWyslijMail.Execute;
begin
  FStatus := Send;

  Synchronize(DoOnStatus);
end;

procedure TWyslijMail.DoOnStatus;
begin
  if Assigned(FOnStatus) then
    FOnStatus(FStatus, FEmail);
end;

function TWyslijMail.Send: TStatus;
var
  idSMTP: TIdSMTP;
  idMessage: TIdMessage;
begin
  idSMTP    := TidSMTP.Create(nil);
  idMessage := TidMessage.Create(nil);
  try
   idMessage.Clear;  //czyszczenie zawartości komponentu IdMessage
   idSMTP.Host := fEmail.Host;  //ustawienie adresu IP/nazwy serwera
   idSMTP.Username := fEmail.Login;  //ustawienie nazwy użytkownika
   idSMTP.Password := fEmail.Haslo;  //ustawienie hasła użytkownika
   idSMTP.AuthenticationType := atLogin;  //ustawienie trybu authentifikacji

   if not IdSMTP.Connected then begin
     try
       IdSMTP.Connect(-1);
     except
       Result := sNiePolaczono;
     end;
   end;

   //jeżeli połaczenie jest zestawione ? wysyłanie wiadomości
   if idSMTP.Connected then
   begin
     idMessage.From.Text := fEmail.Login;    //dodanie informacji od kogo
     idMessage.Subject := fEmail.Temat;       //dodanie tematu
     idMessage.Recipients.EMailAddresses := fEmail.AdresOdbiorcy;  //dodanie adresu odbiorcy
     idMessage.Body.Append(fEmail.Tresc); //treść

     //dodanie załącznika do wiadomości
     if fEmail.Zalacznik <> '' then
       TidAttachment.Create(idMessage.MessageParts, fEmail.Zalacznik);
     try
       try
         idSMTP.Send(idMessage);     //wysyłanie wiadomości
         Result := sWyslano;
       except
         Result := sNieWyslano;
       end;
     finally
       idSMTP.Disconnect;
     end;
   end;

  finally
   idSMTP.Free;
   idMessage.Free;
  end;
end;

end.

i uzycie

procedure RezultatWyslaniaEmail(AStatus: TStatus; AEmail: TEmail);

{...}

procedure TMainForm.RezultatWyslaniaEmail(AStatus: TStatus; AEmail: TEmail);
begin
  case AStatus of
    sWyslano     : ShowMessage('Wyslano pomyslnie');
    sNiePolaczono: ShowMessage('Nie polaczono z serwerem');
    sNieWyslano  : ShowMessage('Polaczono z serwerem, ale wystapil blad podczas wysylania maila');
  end;
end;

procedure TMainForm.Button1Click(Sender: TObject);
begin
  Dane.Host := 
  Dane.Login :=
  Dane.Haslo :=
  Dane.AdresOdbiorcy := 
  Dane.Temat :=
  Dane.Tresc :=
  Dane.Zalacznik :=

  TWyslijMail.Create(Dane, MainForm.RezultatWyslaniaEmail);
end;

Synapse wywal bo to szajs

0

Poczonkujoncy: e tam, nie znasz się, nie umiesz napisać swojego nicka to i na Synapse się nie znasz.
Synapse też można używać w wątkach. A jak uważasz, że Synapse jest złe, to napisz własny pakiet i
to od zera to chętnie go przetestuje jak będzie miał takie możliwości plus szybkość działania, jak ma
Synapse - to zwracam honor. A do Alayah: daruj sobie programowanie albo poczytaj jakieś kursy, a
tak to masz problem z banałami. Widzisz na początku kodu modułu sekcję uses? Zobacz, jak dodane
sa tam inne standardowe moduły, to będziesz wiedział, jak masz dopisać kolejny isnitejący. Proste i.

0

@Poczontkujoncy: Dzieki, jakbym sie ciut bardziej znal na obsludze programu to bym doszedl jak to wykminic :P

@olesio: wszystko Dziala, wielkie Dzieki

0

Czy Synapse obsługuje SSL? Jeśli nie, to z gmail się go nie użyje.

0
Tajemniczy Don Pedro napisał(a)

Czy Synapse obsługuje SSL? Jeśli nie, to z gmail się go nie użyje.

obsługuje i działa z gmailem

0

Znam Indy, a Synapse znam tylko z zachwalań niektórych forumowiczów. Liczba pochwał skłoniła mnie do zainteresowania się tym pakietem. Pytanie z ciekawości, jak się to sprawdza jako klient SMTP, chodzi mi w szczególności o wiadomości wieloczęściowe ? W zależności czy mail ma część html, czy nie, czy ma załączniki czy nie, czy jest z obrazkami czy nie, każda kombinacja owocuje różną docelową strukturą maila (multipart/mixed, related, etc). Jak synapse to łyka ? W Indy jest to dosyć proste.

b

0

a jak ma łykać?? Piszesz co wysyła i wysyła

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