Fragment kodu z Delphi do C++ Buildera

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

idMessage := TidMessage.Create(self);

do C++ Buildera:

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.

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.

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.

0

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

0

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

//====================== wysylanie maila ze statusem ===========================
TIdMessage *idMessage = new TIdMessage ( this );//!!!!!!!
     IdMessage->Body->Assign(Memo1->Lines); //tekst maila
     IdMessage->From->Text = "[email protected]";
     IdMessage->Recipients->EMailAddresses = "[email protected]";
     IdMessage->Subject = "Temat maila";

     IdSMTP->Host = "poczta.interia.pl";
     IdSMTP->Port = 587;
     IdSMTP->AuthenticationType = atLogin;
     IdSMTP->UserId = "[email protected]";
     IdSMTP->Password = "haselko";

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

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

A to w Delphi:

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

//====================== wysylanie maila ze statusem ===========================
idMessage := TidMessage.Create(self);
     idMessage.Body.Append('');
     idMessage.From.Text := '[email protected]';
     idMessage.Recipients.EMailAddresses := '[email protected]';
     idMessage.Subject := 'Temat maila';

     idSMTP.Host := 'poczta.interia.pl';
     idSMTP.Port := 587;
     idSMTP.AuthenticationType := atLogin;
     idSMTP.Username := '[email protected]';
     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.

0

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

0

1.

Używasz innych pól:

IdSMTP->UserId = "[email protected]";

idSMTP.Username := '[email protected]';

  1. Jakiego typu jest IdMessage->Recipients->EMailAddresses?
0

adf88 użyłem

IdSMTP->UserId = "[email protected]";

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

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

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/[...]9-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?

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.

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