Problem z wysyłaniem @ synapse-gmail

0

Witam próbuje wysłać @ poprzez synapse ,
kompilacja przebiega bez problemu jednak program wypluwa błąd, próbowałem zmieniać port jednak bez rezultatu,
jakieś rady.

 procedure TUstawienia.WyslijMaila;

var
  EMail: TSMTPSend;
  TrescMaila: TStrings;
  Msg: TMimeMess;
  MimePart: TMimePart;
  tmpStr: UTF8String;
begin
  TrescMaila:= TStringList.Create;
  TrescMaila.Add('Treść maila.test');


  Msg:= TMimeMess.Create;
  Msg.Header.From:= '"NADAWCA MAILA"<[email protected]>';
  Msg.Header.ToList.Add('[email protected]');
  tmpStr:= 'Test';
  Msg.Header.Subject:= tmpStr;
  Msg.Header.XMailer:= '[email protected]';
  Msg.AddPartHTML(TrescMaila,nil);
  Msg.EncodeMessage;


  EMail:= TSMTPSend.Create;
  EMail.UserName:= '[email protected]';
  EMail.Password:=  'Haslo do konta nadawcy';
  EMail.TargetHost:= 'smtp.gmail.com';
  EMail.TargetPort:= '465';
  EMail.AutoTLS:= True;


  if EMail.Login then
    begin
      if EMail.AuthDone then
      begin
        EMail.MailFrom('[email protected]', Length('[email protected]'));
        EMail.MailTo('[email protected]');
        Application.ProcessMessages;
        if EMail.MailData(Msg.Lines) then
          EMail.Logout;
      end
    else
      begin
        ShowMessage('Błąd podczas wysyłki maila.');
        EMail.Free;
        TrescMaila.Free;
        Msg.Free;
        Exit;
      end;
    end
  else
    begin
      ShowMessage('Błąd podczas wysyłki maila.2');
      EMail.Free;
      TrescMaila.Free;
      Msg.Free;
      Exit;
    end;
  ShowMessage('Mail wysłany pomyślnie.');
  EMail.Free;
  TrescMaila.Free;
  Msg.Free;
end;
0

jednak program wypluwa błąd

A może byś był łaskawy i podał nazwę błędu?

0

wypluwa blad podany w kodzie 'Błąd podczas wysyłki maila.2'

0

Ale poniższy fragment kodu zawiera dane poczty wychodzącej wiec dane POP raczej nie wiele tu dadzą. Chyba ze się mylę.

 
  EMail:= TSMTPSend.Create;
  EMail.UserName:= '[email protected]';
  EMail.Password:=  'Haslo do konta nadawcy';
  EMail.TargetHost:= 'smtp.gmail.com';
  EMail.TargetPort:= '465';
  EMail.AutoTLS:= True;
0

Racja. Mój błąd :P .

Zobacz sobie (jeżeli jeszcze nie patrzyłeś)
http://support.google.com/mail/bin/answer.py?hl=pl&answer=13287
http://www.synapse.ararat.cz/doku.php/public:howto:smtpsend

poza tym, ja bym sobie zajrzał debuggerem do środka synapse i zobaczył czy na uwierzytelnieniu się wywala czy na połaczeniu czy na czymś innym jeszcze.

0

Próbowałem juz zmieniać SSL na TSL a co za tym idzie również port wychodzący z debugiem jeszcze się nie bawiłem, ale faktycznie spróbuje.

0

Jeszcze zapomniałem powiedzieć że synapse ma jakąś opcję wyrzucania błędów jako wyjątków i jakieś procedury zwracające ostatni błąd. Ja bym je zapytał co się stało.

0

Bulid programu wykazuje błąd w procedurze , procedure TBlockSocket' biblioteki 'blckscok', skonczyły mi się pomysły.

0

Bulid programu wykazuje błąd w procedurze , procedure TBlockSocket' biblioteki 'blckscok', skonczyły mi się pomysły.

Czy ty wiesz że TBlockSocket to klasa a nie procedura? poza tym: Blcksock. I jaki build???

Kolego, zobacz jaki jest błąd po loginie, tam powinno być coś ciekawego. Albo ustaw sobie rzucanie wyjątków a potem sobie go wyśtwietl. Bo teraz gadasz jakieś głupoty których nie jestem w stanie zrozumieć. Mów po polsku.

0

Prześledziłem procedurę przez Trace Intro i całość zaczyna się zapętlać przy

,function GetIconvIDFromCP(Value: TMimeChar): AnsiString;' (synachar)

Na tym kod staje.

z Delphi bawię się od 3mcy, i jest moim pierwszym językiem wiec proszę o wyrozumiałość.

0

Trace Intro

Trace into? Widać twoja znajomość angielskiego taka jaka delphi... >.>

Mówiłeś że wyskakuje błąd a nie że się zawiesza więc naucz się używać debuggera.

poza tym, mówiłem żebyś użył mechanizmu lasterror i wyjątków, nie możesz tego zrobić? To jest prostsze niż debugger i będzie zapewne wystarczyć.

0

Myślę ze ironia jest zbędna, nikt z nas nie urodził się z umiejętnością programowania, prawda. Każdy popełnia błędy nawet najbardziej banalne (pop/smtp) ;p.
Tak jak napisałem post wyżej dopiero zaczynam naukę programowania i będę niezwykle wdzięczny, za wskazanie jak użyć "mechanizmu lasterror" (ewentualnie przykładowy kod wykorzystujący lasterror w synapse, w google niewiele jest na ten temat). Z góry bardzo dziękuję.

1

Myślę ze ironia jest zbędna, nikt z nas nie urodził się z umiejętnością programowania, prawda. Każdy popełnia błędy nawet najbardziej banalne (pop/smtp) ;p.

Cóż, trochę racji masz :-] . Ale to nie był pierwszy raz gdy pomyliłeś się przy 'przepisywaniu'. A czasami jedna literka robi ogromną różnicę, więc jednak polecałbym trzymania się nazewnictwa (w końcu po coś schowek jest :P ).

Tak jak napisałem post wyżej dopiero zaczynam naukę programowania i będę niezwykle wdzięczny, za wskazanie jak użyć "mechanizmu lasterror" (ewentualnie przykładowy kod wykorzystujący lasterror w synapse, w google niewiele jest na ten temat). Z góry bardzo dziękuję.

Ze w google nie ma to nie uwierzę, ale możliwe że nie umiesz znaleźć (bo ciężko szukać czegoś o czym bardzo mało się wie).
Więc oto jak znalazłem o tym informację:
1.Wszedłem na moją ulubioną wyszukiwarkę
2.Wpisałem sobie 'synapse'
3.Znalazłem to: http://www.ararat.cz/synapse/doku.php/start (strona domowa synapse)
4.Przeszedłem do reference guide
5.'Classes, Interfaces, Objects and Records'
6.Ctrl+F i wpisałem SMTP. Kliknełem na obiekt
7.Przejrzałem sobie wartości i znalazłemm ResultCode i ResultString
8.Kliknełem sobie oba i zobaczyłem co o tym jest napisane
9.I już wiadomo gdzie synapse sobie zapisuje informacje o wyniku ostatniej operacji.
Więc w swój kod możesz wklepać że jeżeli nie uda się login to:

writeln('oho! nie dziala login. Wynik: ',smtp.ResultString);

Albo jeżeli jesteś pr0.haxor

raise exception.Create('Oho! Nie dziala login. Wynik: '+smtp.ResultString);

i to jest ten cały mechanizm lasterror. Proste!

1

gmail do wysyłki dla TLS używa portu 587 a nie 465 ale to przecież wiesz bo pierwsze co zrobiłeś to sprawdziłeś czy masz dobre porty powpisywane http://support.google.com/mail/bin/answer.py?hl=pl&answer=13287

dodałeś też do uses ssl_cryptlib i masz w systemie/w katalogu z exe plik cl32.dll

BTW http://4programmers.net/Forum/Delphi_Pascal/123403-Delphi_Synapse_-gt_HTTPSend_-gt_ProgressBar

0

Mam cl32.dll w folderze projektu w uses ssl_cryptlib jednak niewiele to dało nadal taki sam rezultat, port ustawiam na 465 czyli SSL. Jeśli chodzi o podany przez kolegę Miska link to kod mega rozbudowany, mi zależy na wysyłce @ w kilku określonych przypadkach a na sama treść ma być generowana z poziomu kodu (bez editow itp.). Wiec na ta chwile pozostaje lasterror, możne to coś wyjaśni.

1

@tayamoto: Przenalizuj sobie kod dołaczony do tego posta. Przed chwilą sprawdzłęm. Działa z gmailem. Wysłałem sobie testowy e-mail na inne konto z którego korzystam na o2.pl, jednak wiadomo zawsze tam będzie to lądowało w spamie, nie dochodziłem jak to zmienić. Ważne abyś miał te dwie dllki do korzystania z SSL, które dołaczyłem, jak i dołaczony do sekcji uses moduł o nazwie ssl_openssl. To będzie potrzebne do googla, o ile się nie mylę. Natomaist ustawienia dla gmaila w moim programie powinny być następujące:

Adres serwera SMTP: smtp.gmail.com
Port: 587
Nazwa użytkownika: [email protected]
Nadawca: koniecznie coś wpisz
Adres nadawcy: [email protected] (dla gmaila jest to o ile pamiętam koniecznie, bo inaczej nie wyśle
0

Ok zataszczyło niestety nie mam już siły na walkę z gmailem wiec wysyłka odbywa się przez inny serwer pocztowy z portem 25, i na razie przez wzgląd na moje nerwy :) niech tak zostanie.
Dziękuje Wam za wszystkie porady i zainteresowanie tematem.

0

Witam
Postanowiłem ponownie podejść do nieszczęsnego Gmaila i znów lipa. Prześledziłem już chyba wszystkie tematy o wysyłaniu maili w synapse. Niby wszystko wygląda ok, odczytałem kody kolegi olesia oraz klasę Miskad mechanizm wygląda podobnie wiec dlaczego to nie wysyła. Zaznaczę tylko ze jeśli zmienię dane na serwer pocztowy z portem 25 wszystko działa rewelacyjnie. Poniżej dodaje kod całej formy, oczywiście folder projektu zawiera dll. o których mowa we wcześniejszych postach. Czy ktoś ma jakieś pomysły, tylko proszę nie odsyłajcie mnie do googla cały dzień tam szukam.

 

unit Unit6;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, SMTPSend, MIMEPart, MIMEMess, ExtCtrls;

type
  TKomunikacja = class(TForm)
    
    Button2: TButton;
    CheckBox3: TCheckBox;
    procedure WyslijMaila;
    procedure Button2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Komunikacja: TKomunikacja;

implementation

uses Unit3, ssl_openssl;

{$R *.dfm}

procedure TKomunikacja.Button2Click(Sender: TObject);
begin
 WyslijMaila;
end;

procedure TKomunikacja.WyslijMaila;
var
  EMail: TSMTPSend;
  TrescMaila: TStrings;
  Msg: TMimeMess;
  MimePart: TMimePart;
  tmpStr: UTF8String;
 begin
  TrescMaila:= TStringList.Create;
  TrescMaila.Add('TreϾ maila.test');
 

  Msg:= TMimeMess.Create;
  Msg.Header.From:= '[email protected]';
  Msg.Header.ToList.Add('[email protected]');
  tmpStr:= 'Test';
  Msg.Header.Subject:= tmpStr;
  Msg.Header.XMailer:= '[email protected]';
  Msg.AddPartHTML(TrescMaila,nil);
  Msg.EncodeMessage;
 
 
  EMail:= TSMTPSend.Create;
  EMail.UserName:= '[email protected]';
  EMail.Password:=  'haslo_nadawcy';
  EMail.TargetHost:= 'smtp.gmail.com';
  EMail.TargetPort:= '587';
  EMail.AutoTLS:= True;

  if EMail.Login then
    begin
      if EMail.AuthDone then
      begin
        EMail.MailFrom('[email protected]', Length('[email protected]'));
        EMail.MailTo('[email protected]');
        Application.ProcessMessages;
        if EMail.MailData(Msg.Lines) then
          EMail.Logout;
      end
    else
      begin
        ShowMessage('B³¹d podczas wysy³ki maila.');
        EMail.Free;
        TrescMaila.Free;
        Msg.Free;
        Exit;
      end;
    end
  else
    begin
      ShowMessage('B³¹d podczas wysy³ki maila');
      EMail.Free;
      TrescMaila.Free;
      Msg.Free;
      Exit;
    end;
  ShowMessage('Mail wys³any pomyœlnie.');
  EMail.Free;
  TrescMaila.Free;
  Msg.Free;
 end;


end.

0

i sprawdziłeś debuggerem dlaczego nie wysyła...

0

Tak puściłem to debugerem i całość zatrzymuje się na:

EMail.Login

Ale.. sprawdziłem jakie wartości przyjmują poszczególne stale i.

EMail.TargetHost:= 'smtp.gmail.com'; przyjmuje wartość 127.0.0.1
EMail.TargetPort:= '587'; przyjmuje wartość '25'

Dlaczego u mnie jest '25' a debugujac kod kolegi Olesia jest wartosc '587' wtf

0

i nie wpadłeś na to, żeby na tej linijce wcisnąć F7 i zobaczyć na czym naprawdę się zatrzymuje i z jakim błędem. BTW na 99% będzie to brak obsługi SSLa (brak bibliotek albo ich niezgodność)

0

Biblioteki dll. mam z projektu Olesia czyli oba pliki v9.8.4
natomiast cala procedura nie wraca z

if ReadResult <> 220 then

Potem zaczyna skakać po rożnej maści klasach.

0
tayamoto napisał(a)

if ReadResult <> 220 then

a ReadResult wynosi............

Potem zaczyna skakać po rożnej maści klasach.

i to jest problem poskakać za nią i zobaczyć gdzie i na czym DOKŁADNIE się wywala

0

Hey
Problem rozwiązany..nie pytajcie gdzie tkwił (okazało się ze był banalny). teraz usiłuję ogarnąć odbieranie maili, główny kod to przerobiony kod wujka miska :) ze strony:

http://4programmers.net/Forum/Newbie/181519-webbrowser_-_pobieranie_plikow

Docelowo program ma się łączyć ze skrzynka np co 5 minut, sprawdzać adresy nadawców jeśli adres jest zgodny z wzorcem to odczytywać zawartość maila dekodować i pobierać ja do Edita, memo. W chwili obecnej udaje mi się zalogować na skrzynkę ale nie mam pojęcia jak zrobić pozostałe dwie operacje.
Czy mogę prosić o wskazanie jakiegoś dobrego rozwiązania. Ewentualnie jakiegoś przykładowego kodu który pobiera zdekodowana wiadomość do fizycznego komponentu.
Wiem ze pytanie jest nowe ale nie chce zaśmiecać forum nowymi (być możne banalnymi) tematami.

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