Fórum Esqueci a senha UserControl - enviar email #423662

14/09/2012

0

Olá. Estou tentando enviar email pelo UserControl na opção Esqueci minha Senha. Mas só quando clico nela, ou qualquer parte que envia emails (como qd se cadastra no sistema) dá o erro: Winsock getHostName failed.
Já tentei configurar com email da hotmail, yahoo, do servidor do meu site e sempre dá este erro. Não tenho certeza se é alguma configuração errada q fiz no UCMail ou sei lá o quê. Se alguem tiver alguma idéia da resolução, desde já agradeço.
Rodrigo Barra

Rodrigo Barra

Responder

Posts

17/09/2012

Rodrigo Barra

O erro está dando nesta função:
function ALgetLocalHostName: String;
var
{$IFDEF DELPHI12_UP}
  Buffer: PAnsiChar;
{$ELSE}
  Buffer: array [0 .. 255] of char;
{$ENDIF}
  WSAData: TWSAData;
begin
  WSAData.wVersion := 0;
  WSAStartup(MAKEWORD(2, 2), WSAData);
  try
    Buffer := '';
    if gethostname(Buffer, SizeOf(Buffer)) <> 0 then
      raise Exception.Create('Winsock GetHostName failed');
    Result := StrPas(Buffer);
  finally
    if WSAData.wVersion = 2 then
      WSACleanup;
  end;


E está caindo nesta mensagem: raise Exception.Create('Winsock GetHostName failed');
Alguém que conhece sobre sockets, envio de email em delphi tem alguma luz de como posso resolver o problema.
Obrigado.
Responder

Gostei + 0

17/09/2012

Alisson Santos

Gostaria de saber se debugou o programa, e caso tenha feito, o que ele retorna nas linhas.
Pois como disse pode ser configuração, pode ser bloqueio do proprio sistema operacional, pode ser bloqueio do proprio servidor de e-mail não aceitando spam.
Entendeu, tem que verificar se está trazendo tudo correto e ver qual é a linha errada, caso realmente esteja errada.
Responder

Gostei + 0

17/09/2012

Rodrigo Barra

Abaixo o método EsqueceuSenha:

procedure TUserControl.ActionEsqueceuSenha(Sender: TObject);
var
  FDataset, FDataPer: TDataSet;
begin
  FDataset := DataConnector.UCGetSQLDataset('Select * from ' +
    TableUsers.TableName + ' Where ' + TableUsers.FieldLogin + ' = ' +
    QuotedStr(TfrmLoginWindow(FFormLogin).EditUsuario.Text));

  FDataPer := DataConnector.UCGetSQLDataset('select ' + TableUsers.FieldUserName +
     ' from ' + TableUsers.TableName + ' Where ' + TableUsers.FieldUserID +
    ' = ' + FDataset.FieldByName(TableUsers.FieldProfile).AsString);
  try
    if not FDataset.IsEmpty then
   //if FDataset.RecordCount > 0 then
    begin
      {$IFNDEF FPC}
      MailUserControl.EnviaEsqueceuSenha
        (FDataset.FieldByName(TableUsers.FieldUserID).AsInteger,
        FDataset.FieldByName(TableUsers.FieldUserName).AsString,
        FDataset.FieldByName(TableUsers.FieldLogin).AsString,
        FDataset.FieldByName(TableUsers.FieldPassword).AsString,
        FDataset.FieldByName(TableUsers.FieldEmail).AsString,
        FDataPer.FieldByName(TableUsers.FieldUserName).AsString)
      {$ENDIF}
    end
    else
      MessageDlg(UserSettings.CommonMessages.InvalidLogin, mtWarning,
        [mbOK], 0);
  finally
    FDataset.Close;
    FDataset.Free;
  end;
end;
Responder

Gostei + 0

17/09/2012

Rodrigo Barra

Primeiramente, se o usuário não existir ele dá o seguinte erro:
Exception Class TDBXError: Unnexpected end for comando line 1, column 50 no segundo select.

FDataPer := DataConnector.UCGetSQLDataset('select ' + TableUsers.FieldUserName +
     ' from ' + TableUsers.TableName + ' Where ' + TableUsers.FieldUserID +
    ' = ' + FDataset.FieldByName(TableUsers.FieldProfile).AsString);
Responder

Gostei + 0

17/09/2012

Alisson Santos

mais nesse teste que você fez o usuário existe ou não?
Responder

Gostei + 0

17/09/2012

Rodrigo Barra

Já se o usuário existir ele dá erro naquela função que postei lá em cima: ALgetLocalHostName;
Esta função está na classe SMTPClient. E o erro "Winsock gethostname failed."

Fiz umas alterações que diz neste artigo, https://www.devmedia.com.br/usercontrol/485 , mas que não fizeram diferença.
Responder

Gostei + 0

31/05/2015

Mário Reis

Rodrigo,

Esta função funciona:
Function GetIPAddress: String;
type pu_long = ^u_long;
var varTWSAData : TWSAData;
varPHostEnt : PHostEnt;
varTInAddr : TInAddr;
namebuf : Array[0..255] of ansichar;
begin
try
try
If WSAStartup($101,varTWSAData) <> 0 Then
Result := ''
Else Begin
gethostname(namebuf,sizeof(namebuf));
varPHostEnt := gethostbyname(namebuf);
varTInAddr.S_addr := u_long(pu_long(varPHostEnt^.h_addr_list^)^);
Result := inet_ntoa(varTInAddr);
End;
except
Result := '';
end;
finally
WSACleanup;
end;
end;

Me dê fio de bak.
Abr
Responder

Gostei + 0

23/08/2015

Erick

Boa Tarde, como se abre o código fonte do UserControl? Estou com o mesmo problema, mas não consigo abrir o arquivo .PAS dos forms, só aparece em .DCU aqui
Responder

Gostei + 0

23/08/2015

Mário Reis

Dando dois clicks em cima do DPK respectivo.
Responder

Gostei + 0

05/09/2015

Erick

Boa Noite, esse código funcionou mesmo? E onde coloco ele? Estou com o mesmo problema!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar