Problem z wysyłaniem @ synapse-gmail

Problem z wysyłaniem @ synapse-gmail
tayamoto
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
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.

Kopiuj
 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"<homecontroll@gmail.com>';
  Msg.Header.ToList.Add('odbiorca@serwer.com');
  tmpStr:= 'Test';
  Msg.Header.Subject:= tmpStr;
  Msg.Header.XMailer:= 'homecontroll@gmail.com';
  Msg.AddPartHTML(TrescMaila,nil);
  Msg.EncodeMessage;


  EMail:= TSMTPSend.Create;
  EMail.UserName:= 'homecontroll@gmail.com';
  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('homecontroll@gmail.com', Length('homecontroll@gmail.com'));
        EMail.MailTo('odbiorca@gmail.com');
        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;
  • Rejestracja: dni
  • Ostatnio: dni
0

jednak program wypluwa błąd

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

tayamoto
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
0

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

tayamoto
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
0

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

Kopiuj
 
  EMail:= TSMTPSend.Create;
  EMail.UserName:= 'homecontroll@gmail.com';
  EMail.Password:=  'Haslo do konta nadawcy';
  EMail.TargetHost:= 'smtp.gmail.com';
  EMail.TargetPort:= '465';
  EMail.AutoTLS:= True;
  • Rejestracja: dni
  • Ostatnio: dni
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.

tayamoto
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
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.

  • Rejestracja: dni
  • Ostatnio: dni
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.

tayamoto
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
0

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

  • Rejestracja: dni
  • Ostatnio: dni
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.

tayamoto
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
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ść.

  • Rejestracja: dni
  • Ostatnio: dni
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ć.

tayamoto
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
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ę.

  • Rejestracja: dni
  • Ostatnio: dni
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:

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

Albo jeżeli jesteś pr0.haxor

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

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

Misiekd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7923
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

tayamoto
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
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.

olesio
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
  • Postów: 4191
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:

Kopiuj
Adres serwera SMTP: smtp.gmail.com
Port: 587
Nazwa użytkownika: user@gmail.com
Nadawca: koniecznie coś wpisz
Adres nadawcy: tensamusercoemail@gmail.com (dla gmaila jest to o ile pamiętam koniecznie, bo inaczej nie wyśle
tayamoto
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
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.

tayamoto
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
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.

Kopiuj
 

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:= 'nadawca@gmail.com';
  Msg.Header.ToList.Add('odbiorca@gmail.com');
  tmpStr:= 'Test';
  Msg.Header.Subject:= tmpStr;
  Msg.Header.XMailer:= 'nadawca@gmail.com';
  Msg.AddPartHTML(TrescMaila,nil);
  Msg.EncodeMessage;
 
 
  EMail:= TSMTPSend.Create;
  EMail.UserName:= 'nadawca@gmail.com';
  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('nadawca@gmail.com', Length('nadawca@gmail.com'));
        EMail.MailTo('odbiorca@gmail.com');
        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.

Misiekd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7923
0

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

tayamoto
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
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

Misiekd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7923
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ść)

tayamoto
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
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.

Misiekd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7923
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

tayamoto
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 81
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.