Esqueci a senha UserControl - enviar email
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.
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
Curtidas 0
Respostas
Rodrigo Barra
14/09/2012
O erro está dando nesta função:
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.
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.
GOSTEI 0
Alisson Santos
14/09/2012
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.
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.
GOSTEI 0
Rodrigo Barra
14/09/2012
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;GOSTEI 0
Rodrigo Barra
14/09/2012
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.
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);GOSTEI 0
Alisson Santos
14/09/2012
mais nesse teste que você fez o usuário existe ou não?
GOSTEI 0
Rodrigo Barra
14/09/2012
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.
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.
GOSTEI 0
Mário Reis
14/09/2012
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
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
GOSTEI 0
Erick
14/09/2012
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
GOSTEI 0
Mário Reis
14/09/2012
Dando dois clicks em cima do DPK respectivo.
GOSTEI 0
Erick
14/09/2012
Boa Noite, esse código funcionou mesmo? E onde coloco ele? Estou com o mesmo problema!
GOSTEI 0