Fragment kodu z Delphi do C++ Buildera

Fragment kodu z Delphi do C++ Buildera
Reiko
  • Rejestracja:ponad 19 lat
  • Ostatnio:ponad 4 lata
0

Witam,

przepisuję swój program do wysyłania maili z Delphi do C++ Buildera. Jako że z C++ mam mniej doświadczenia niż z Delphi, chciałbym zapytać czy prawidłowo przetłumaczyłem poniższy kod z Delphi

Kopiuj
idMessage := TidMessage.Create(self);

do C++ Buildera:

Kopiuj
TIdMessage *idMessage = new TIdMessage ( this );

Pozdrawiam!

PS. Pytam dlatego że obydwa kody mi działają, ale w Delphi wysyła mi maila prawidłowo natomiast w C++ Builder zwraca mi błąd z serwera, pomimo że wszystkie parametry są takie same.

edytowany 1x, ostatnio: Reiko
adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
0

Powyższe jest OK. Użyj debuggera. Możesz nawet odpalić i Delphi i Buildera na raz i debuggerem przechodzić linijka po linijce w obydwu i patrzyć gdzie się pojawią różnice w wykonaniu.

Reiko
  • Rejestracja:ponad 19 lat
  • Ostatnio:ponad 4 lata
0

To nie wygląda mi na winę kodu tylko na "zewnętrzny" błąd, jakby serwerowi coś nie pasowało. Idę teraz na kolokwium, jak wrócę to wkleję komunikat błędu.

adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
0

Skoro serwer odpowiada inaczej niż powinien to sprawdź czy na pewno wysyłasz takie zapytanie jak trzeba, takie same jak w kodzie Delphi.

edytowany 1x, ostatnio: adf88
Reiko
  • Rejestracja:ponad 19 lat
  • Ostatnio:ponad 4 lata
0

Dla ścisłości oto kod w C++ Builderze:

Kopiuj
//====================== wysylanie maila ze statusem ===========================
TIdMessage *idMessage = new TIdMessage ( this );//!!!!!!!
     IdMessage->Body->Assign(Memo1->Lines); //tekst maila
     IdMessage->From->Text = "MojMailNadawcy@interia.pl";
     IdMessage->Recipients->EMailAddresses = "MojMailOdbiorcy@gmail.com";
     IdMessage->Subject = "Temat maila";

     IdSMTP->Host = "poczta.interia.pl";
     IdSMTP->Port = 587;
     IdSMTP->AuthenticationType = atLogin;
     IdSMTP->UserId = "MojMailNadawcy@interia.pl";
     IdSMTP->Password = "haselko";

     try
     {
       IdSMTP->Connect();
       IdSMTP->Send(idMessage);
     }
     __finally
     {
       IdSMTP->Disconnect();
       idMessage->Free();
       ShowMessage("Mail poszedl!");
     }

//------------------------------------------------------------------------------
}

A to w Delphi:

Kopiuj
procedure TGlowna.FormCreate(Sender: TObject);
var
  idMessage: TidMessage;
begin 

//====================== wysylanie maila ze statusem ===========================
idMessage := TidMessage.Create(self);
     idMessage.Body.Append('');
     idMessage.From.Text := 'MojMailNadawcy@interia.pl';
     idMessage.Recipients.EMailAddresses := 'MojMailOdbiorcy@gmail.com';
     idMessage.Subject := 'Temat maila';

     idSMTP.Host := 'poczta.interia.pl';
     idSMTP.Port := 587;
     idSMTP.AuthenticationType := atLogin;
     idSMTP.Username := 'MojMailNadawcy@interia.pl';
     idSMTP.Password := 'haselko';

     try
       idSMTP.Connect;
       idSMTP.Send(idMessage);

     finally
       idSMTP.Disconnect;
       idMessage.Free;
     end;

//------------------------------------------------------------------------------
end;

I wyskakuje mi komunikat: 554 5.5.1 Error: no valid recipients.

A w Delphi normalnie działa.

edytowany 1x, ostatnio: Reiko
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Sprawdź debuggerem, linijka po linijce co się dzieje i jakie są wartości poszczególnych pól/zmiennych.


adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
0

Używasz innych pól:

IdSMTP->UserId = "MojMailNadawcy@interia.pl";

idSMTP.Username := 'MojMailNadawcy@interia.pl';

  1. Jakiego typu jest IdMessage->Recipients->EMailAddresses?
edytowany 3x, ostatnio: adf88
Reiko
  • Rejestracja:ponad 19 lat
  • Ostatnio:ponad 4 lata
0

adf88 użyłem

IdSMTP->UserId = "MojMailNadawcy@interia.pl";

ponieważ w komponentach Indy z C++ Builder 6 nie ma takiego pola jak idSMTP.Username.

A IdMessage->Recipients->EMailAddresses jest typu AnsiString.

adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
0

The 554 5.5.1 error is the SMTP error "no valid recipients". It can occur if you've misspelled the recipient addresses but it can also occur if you are not properly authenticating to the outgoing server.
(źródło: http://answers.microsoft.com/en-us/office/forum/office_2003-outlook/error-554-551-y-sent-messages-are-stopped-by/49514fd3-2621-42cb-a911-1710bc7a72f5?msgId=ab6059c9-35e2-4729-ab5b-62f6ab64d764)

Tak więc wydaje mi się, że coś może być nie tak danymi do logowania. Czy zawierają one może jakieś znaki spoza ascii? Może z kodowaniem jest problem? Może to pole UserID to jednak nie to o co chodzi?

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:mniej niż minuta
  • Lokalizacja:Gorlice
0

Kod jest poprawny (z wyjątkiem błędów typu komunikat o poprawnym wysłaniu w __finally, braku sprawdzania Connected itp) i mail jest wysyłany jeżeli tylko podasz poprawne dane logowania.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
Reiko
  • Rejestracja:ponad 19 lat
  • Ostatnio:ponad 4 lata
0
kAzek napisał(a):

Kod jest poprawny (z wyjątkiem błędów typu komunikat o poprawnym wysłaniu w __finally, braku sprawdzania Connected itp) i mail jest wysyłany jeżeli tylko podasz poprawne dane logowania.

Nie jest wysyłany bo na Delphi działa ana Builderze nie.

KA
Przecież sprawdziłem i działa.
adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
0

Co znaczy "działa". Wysyła maila czy nie?

edytowany 1x, ostatnio: adf88
Reiko
  • Rejestracja:ponad 19 lat
  • Ostatnio:ponad 4 lata
0

Tak, w Delphi wysyła maila normalnie. Na BCB nie. Spokoju nie daje mi ten komunikat. Wydaje mi się że jakoś źle definiuję metodę gdzie wpisuję adres odbiorcy skoro pokazuje "brak prawidłowych odbiorców"...

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:mniej niż minuta
  • Lokalizacja:Gorlice
0

Tłumaczę po raz 2 że sprawdziłem i ten kod działa przynajmniej w C++ Builder 6 i Indy 8.0.25 (czyli wersja która się instaluje wraz z kompilatorem).

Chwilunia proszę Pana a czemu raz IdMessage a raz idMessage dla C++ wielkość liter to przecież różnica tu tworzysz w kodzie dynamicznie idMessage a na formie pewnie masz położony IdMessage kod się skompiluje ale efekt może być taki o jakim piszesz.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
Reiko
  • Rejestracja:ponad 19 lat
  • Ostatnio:ponad 4 lata
0

kAzek właśnie chodzi o to że próbowałem to skompilować na BCB6 z tą wersją która instaluje się z kompilatorem i już myślałem że to kwestia wersji indy (bo na delphi 7 są już Indy 9) więc próbowałem ściągać indy 9 i do tego zainstalowałem update do BCB i troszkę mi się chyba sknocił. Teraz gdy uruchamiam ten program, pokazuje mi się komunikat:
user image

Nie wiem czy to jest spowodowane bibliotekami indy czy jak.

Co do problemu z wielkościami liter, idMessago to element tworzony w metodzie:

Kopiuj
TIdMessage *idMessage = new TIdMessage ( this );

natomiast IdMessage to komponent IdMessage1, więc na końcu mamy wysyłanie tego pierwszego za pomocą komponentu:

Kopiuj
IdSMTP->Send(idMessage);
edytowany 1x, ostatnio: Reiko
adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
0

Wypełniasz IdMessage. Wysyłasz idMessage. Czyż nie?

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:mniej niż minuta
  • Lokalizacja:Gorlice
0
  1. Co do błędu usuń Indy i zainstaluj ponownie
  2. co z tego że wysyłasz idMessage (to utworzone dynamicznie) jak wypełniasz wszędzie IdMessage zdecyduj się i wywal albo to tworzenie dynamicznie czyli:
Kopiuj
TIdMessage *idMessage = new TIdMessage ( this )

oraz

Kopiuj
idMessage->Free();

i wyślij

Kopiuj
IdSMTP->Send(IdMessage);

albo odwrotnie zmień wszędzie w kodzie na z małej litery.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
Reiko
  • Rejestracja:ponad 19 lat
  • Ostatnio:ponad 4 lata
0

Ahh sorry kAzek, nie zrozumiałem Cię, już rozumiem :) Powiedz mi tylko jak usunąć Indy i zainstalować jeszcze raz? Nie mam tego w Dodaj/Usuń programu a jak reinstaluję całego BCB to problem wciąż jest ten sam. Pytam bo poprawiłem ten kod na małe litery ale ten komunikat znowu się pojawia.

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:mniej niż minuta
  • Lokalizacja:Gorlice
0

Błąd ten nie musi być powodowany zwaleniem Indy być może coś w projekcie dziwnie namieszałeś i BCB po prostu głupieje i sypie dziwnymi komunikatami. Zanim weźmiesz się za instalację spróbuj kod odpowiedzialny za wysłanie maila zrobić jako nowy projekt.

Jeżeli jednak będziesz musiał instalować to:
Component -> Intall Packages tam zaznacz Internet Direct i Remove jak usunie zamknij BCB a następnie pobierz
http://www.indyproject.org/downloads/Indy_9_00_17_src.zip
a jak zainstalować masz opisane http://www.elektroda.pl/rtvforum/topic1736739.html#8374319


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 2x, ostatnio: kAzek
Reiko
  • Rejestracja:ponad 19 lat
  • Ostatnio:ponad 4 lata
0

kAzek to nic nie daje, jest to samo. Co ciekawe - ten komunikat pojawia się jak uruchamiam ten program osobno, nie spod środowiska BCB. Spróbuje jeszcze raz go przeinstalować. Być może ten update mi namieszał.

KA
A w nowym projekcie próbowałeś to robić i to samo?
Reiko
  • Rejestracja:ponad 19 lat
  • Ostatnio:ponad 4 lata
0

Nie, nowego nie robiłem. Usunąłem indy, zainstalowałem jeszcze raz i to samo. Już usunąłem BCB i usuwam jeszcze po nim wpisy i pliki. Zainstaluje na nowo bez update i zobacze co mi to da.

Reiko
E, jest to samo ;//

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.