Fragment kodu z Delphi do C++ Buildera

Fragment kodu z Delphi do C++ Buildera
Reiko
  • Rejestracja: dni
  • Ostatnio: dni
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.

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

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

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

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

Używasz innych pól:

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

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

  1. Jakiego typu jest IdMessage->Recipients->EMailAddresses?
Reiko
  • Rejestracja: dni
  • Ostatnio: dni
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: dni
  • Ostatnio: dni
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: dni
  • Ostatnio: dni
  • 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.

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

adf88
  • Rejestracja: dni
  • Ostatnio: dni
0

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

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

Reiko
  • Rejestracja: dni
  • Ostatnio: dni
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);
adf88
  • Rejestracja: dni
  • Ostatnio: dni
0

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

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

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

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

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

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.