Komponent do wysylania maili | inny niz Indy

0

Czesc, szukam komponentu do wysylania maili. Musi miec obsluge SMTP i autoryzacje (uwierzytelnianie).

Nie porponujcie mi tylko Indy 9/10. Juz testowalem, dla moich wymagan nie jest on dobry, potrzebuje alternatywy. Slyszalem, ze FastNet jest dobry, ale platny :/

Zatem prosze Was o zamieszczenie nazwy komponentu, linka do niego oraz (co wazne!) przykladowego kodu do wysylania maili (podobnego do tych, co sa w FAQ) - aby uniknac kolejnych pytan.

Z gory wielkie dzieki!!!

0

Szukaj MailMessage2000, przykłady w zestawie powinny być.

0

synapse

0

Misiekd, juz kilka razy polecales Synapse, moglbys podac przykladowy kod na wysylanie maila ale odnoszacy sie do Synapse?

Chodzi mi o takie cos:

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;

ale to co podalem to Indy, przerob mi to na Synapse :)

MailMessage2000 - nie moge tego znalezc, jak wpisuje te fraze na google to znajduje jeden wynik, ktory do niczego konkretnego nie prowadzi. Mozesz mi napisac jakis link do tych komponentow i ew. przykladow?

0

Synapse + opakowanie (VisualSynapse)

a przykład rano bo mmi się teraz nie chce :P

0

Ok, super. Wydaje mi sie, ze do moich skromnych potrzeb Synapse bedzie idealne. Czekam zatem z niecerpliwoscia na ten przyklad (jeszcze raz przypominam, kod ma byc taki jak z Indy, ktory przedstawilem wyzej - czyli normalne wysylanie maila przy uzyciu SMTP).

Ok, to jak juz tak drecze wszystkich to jeszcze jedno, SYNAPSE ma moze funkcje podobna do tej z Indy? np.:

Label1.Caption:=IdHTTP1.Get('www.google.pl');

Jezeli tak, to prosze o malutki przykladzik.

0
haman napisał(a)

Ok, super. Wydaje mi sie, ze do moich skromnych potrzeb Synapse bedzie idealne. Czekam zatem z niecerpliwoscia na ten przyklad (jeszcze raz przypominam, kod ma byc taki jak z Indy, ktory przedstawilem wyzej - czyli normalne wysylanie maila przy uzyciu SMTP).

to jest najprostsza wersja

  with SendMail1 do
  begin
    From := '[email protected]';
    ToOne := '[email protected]';
    //ToList := [email protected];
    Subject := 'Temat';
    Text := 'Tresc';
    Send;
  end;

Ok, to jak juz tak drecze wszystkich to jeszcze jedno, SYNAPSE ma moze funkcje podobna do tej z Indy? np.:

Label1.Caption:=IdHTTP1.Get('www.google.pl');

Jezeli tak, to prosze o malutki przykladzik.

może ściągnij sobie przykłady do synapse i je zobacz, co?

0
haman napisał(a)

Ok, to jak juz tak drecze wszystkich to jeszcze jedno, SYNAPSE ma moze funkcje podobna do tej z Indy? np.:

Label1.Caption:=IdHTTP1.Get('www.google.pl');

Jezeli tak, to prosze o malutki przykladzik.

W tak prostej wersji chyba nie. Ale możesz sobie ściągnąć bibliotekę, którą napisałem w oparciu o synapse, która na coś takiego pozwala. Konkrety: HTTP

0

Hmm, w samym Synapse jest cos takiego:

function HttpGetText(const URL: string; const Response: TStrings): Boolean;
A very usefull function, and example of use can be found in the THTTPSend object. It implements the GET method of the HTTP protocol. This function sends the GET method for URL document to an HTTP server. Returned document is in the "Response" stringlist (without any headers). Returns boolean TRUE if all went well.

Ale nijak to nie dziala. Robie tak:
HttpGetText('www.google.pl',sl);
gdzie sl:tstringlist;
albo tak: HttpGetText('http://www.google.pl',sl);

Jakbym nie robil, ciagle wyskakuje blad.

Wie ktos moze o co chodzi? Pytanie glownie do tych, co juz udzielali sie w tym temacie ;)

0

nie miałem styku z synapse ale tak z ciekawości dla formalności spytam ... zainicjalizowałeś te sl ? ;P

0

tzn. zrobilem tak

var sl:tstringlist;

chyba wystarczy tak? czy jest jakis komponent do tego, ktory trzeba wkleic?

0

Chodzi raczej o to, czy sl := TStringList.Create; nie zapomniałeś...

0

O ja.. glupio mi teraz ;) Fakt, zapomnialem o tym; nawet na googlach mozna to znalezc: http://pl.wikibooks.org/wiki/TStringList
Dzieki wielkie wszystkim za odpowiedzi! Synapse naprawde fajnie, szybko dziala i w dodatku o wiele mniej po zbudowaniu zajmuje niz Indy.

pozdrawiam! [browar]

0

No wiadomo, że działa szybciej i lżej od Indy, bo Indy to krowa :P
Ogólnie rzecz ujmując Synapse opiera się na niskopoziomowej obsłudze gniazdek, a Indy robi wszystko za Ciebie, najczęściej jednak więcej, niż tego oczekujesz/potrzebujesz. Stąd moja opinia jest taka, że Indy wymięka przy Synapse :P

0

przeciez do wyslania e-maila przez smtp moze posluzyc kazdy komponent TCP/IP,
wystarczy tylko funkcja SendString , smtp jest przystosowany do obslugi z poziomu telnetu wiec to mozna wykorzystac, zalaczniki tez idzie wysylac telnetem kodujac je w base64 :)

0

Przepraszam, a czy pisząc ten post korzystałeś z telnetu? KAŻDĄ operację w necie możesz wykonać telnetem, pytanie tylko, do jakiego stopnia jest to nieopłacalne czasowo. Bo jedyną rzeczą, jaką robi telnet jest wyświetlanie tego, co wysłał serwer i przekazywanie tego, co wklepiesz.

0
function SendMail(SmtpServer, ToAddress, FromAddress, Subject, Body: string): boolean;
var
  MailSocket: TClientSocket;
  MailBuffer: array [0..2048] of char;
begin
  Result := False;
  MailSocket := TClientSocket.Create;
  MailSocket.Connect(SmtpServer, 25);
  while MailSocket.Connected do
  begin
    MailSocket.ReceiveBuffer(MailBuffer, 2048);
    if not MailSocket.Connected then Break;
    if Copy(MailBuffer, 1, 3) <> '220' then Break;
    MailSocket.SendString('HELO ' +{ adres smtp SMTP }+ #13#10);
    MailSocket.ReceiveBuffer(MailBuffer, 2048);
    if not MailSocket.Connected then Break;
    if Copy(MailBuffer, 1, 3) <> '250' then Break;
    MailSocket.SendString('MAIL FROM: <' + FromAddress + '>' + #13#10);
    MailSocket.ReceiveBuffer(MailBuffer, 2048);
    if not MailSocket.Connected then Break;
    if Copy(MailBuffer, 1, 3) <> '250' then Break;
    MailSocket.SendString('RCPT TO: <' + ToAddress + '>' + #13#10);
    MailSocket.ReceiveBuffer(MailBuffer, 2048);
    if not MailSocket.Connected then Break;
    if Copy(MailBuffer, 1, 3) <> '250' then Break;
    MailSocket.SendString('DATA' + #13#10);
    MailSocket.ReceiveBuffer(MailBuffer, 2048);
    if not MailSocket.Connected then Break;
    if Copy(MailBuffer, 1, 3) <> '354' then Break;
    MailSocket.SendString('From: ' + FromAddress + #13#10 + 'To: ' + ToAddress + #13#10 + 'Subject: ' + Subject + #13#10#13#10 + Body + #13#10 + '.' + #13#10);
    MailSocket.ReceiveBuffer(MailBuffer, 2048);
    if not MailSocket.Connected then Break;
    if Copy(MailBuffer, 1, 3) <> '250' then Break;
    MailSocket.SendString('QUIT' + #13#10);
    Result := True;
  end;
  MailSocket.Disconnect;
  MailSocket.Free;
end;

code by Aphex

dorobic autoryzacje i wysylanie zalacznikow to juz naprawde nie jest problem

0

Tja... A teraz porównaj wielkość programu postawionego na VCL'owym ClientSocket i tego na Indy. I szybkość ich działania najlepiej.

0

Adamie naprawde nie chce sie z toba klucic bo nie mialem na mysli atakowanie twoich wypowedzi tylko pokazanie alternatywna metode
akurat twój argument co do wielkosci tych aplikacji Indy a przyklad ktory zacytowalem z kodów aphexa zmiażdżył by go,

0

zreszta sprawdz sobie sam http://iamaphex.net/downloads/
jak jego aplikacje moga byc malutkie, akurat on sie wtym specjalizuje

0

Hmm... Nic dziwnego - co prawda nazwa ta sama, ale nie podkresliłeś, że to nie jest TEN TClientSocket, o którym mówię :). Ten gość napisał sobie własną niskopoziomową obsługę gniazdek, co widać, jak się przyjrzysz jego kodowi. Przytoczyłeś jednak wyrwaną z kontekstu prockę, która nie wskazuje tego w żaden sposób. Tak czy inaczej, ten ClientSocket nie ma (poza nazwą i sposobem użycia) wiele wspólnego z VCL'owskim CS o którym mówiłem. Zwracam honor.

//Dopisane: Z innej strony ciekawe jak to zostało zrobione, bo po ściągnięciu potrzebnych źródeł i skompilowaniu otrzymałem program niemal 2 razy większy od tego, co jest załączone jako binarka :D Chyba, że jakaś inna wersja Delphi, w sumie bardzo prawdopodobne, albo kombinacje z jakimiś packerami Run-Time, choć nie wiem, czy przy tej wielkości aplikacji działałyby na plus.

0

sorry racja nie powiedzialem ze to nie jest ten TClientSocket
taa a ten jego exe jest przejechany upx`em, ale i tak sama app jest dosc mala
hmm w ogóle podejrzewam ze ClientSocket ten standardowy i tak jest mniejszy niz komponenty indy co do szybkosci dzialania tu nie bede sie wypowiadal bo nie sprawdzalem tego, ostatnio przerabialem komponent do GyGy wlasnie wyrzucajac indy zamieniajac na standardowy clientsocket no i udalo mi sie zjechac jakies ponad 100KB mniej

0

Tak, jest mniejszy od Indy, ale większy od Synapse. Szczególnie, jeśli założysz, że sama aplikacja nie będzie korzystać z VCL. Synapse ma jednak jedną wadę, korzysta z TStream, przez co faktycznie trochę rośnie, ale w porównaniu z Indy to jeszcze jest piórko :)

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