Jump to content

valterpatrick

Membros Pro
  • Posts

    515
  • Joined

  • Last visited

  • Days Won

    2

valterpatrick last won the day on March 3

valterpatrick had the most liked content!

1 Follower

About valterpatrick

Contact Methods

  • Website URL
    https://github.com/valterpatrick

Recent Profile Visitors

2,147 profile views

valterpatrick's Achievements

  1. Amigo, muito obrigado. Deu super certo. Apenas sugiro que altere esta parte no seu código na unit.pas: Use GetAccessToken ao invés de InteractiveAuthentication, pois no InteractiveAuthentication ele limpa os campos de token, já no GetAccessToken ele utiliza o InteractiveAuthentication e já retorna o campo certinho. procedure TForm1.btnConsentimentoClick(Sender: TObject); const msg = 'Será solicitado ao usuário permissão para enviar emails em seu nome.' + 'O código retornado será armazenado para futura solicitação do token de acesso'; var IniFile: string; Ini: TIniFile; begin Application.MessageBox(msg, 'Informação', 64); AjustaParametrosDeEnvio; //Antes: {ACBrMail1.Authenticator.InteractiveAuthentication;} //Depois: ACBrMail1.Authenticator.GetAccessToken; // ACBrMail1.Authenticator.AuthorizeToken contem o codigo de autorização para solicitar access token // Apos autorização atualizar tokens de acesso inválidos IniFile := ChangeFileExt(Application.ExeName, '.ini'); Ini := TIniFile.Create(IniFile); try Ini.WriteString('OAuth2', 'RefreshToken', ACBrMail1.Authenticator.RefreshToken); Ini.WriteString('OAuth2', 'AccessToken', ACBrMail1.Authenticator.AccessToken); Ini.WriteDateTime('OAuth2', 'ExpiraEm', ACBrMail1.Authenticator.ExpiresIn); finally Ini.Free; end; end; Eu vou tentar agora com o Hotmail
  2. No meu caso o email de desenvolvedor e do app é o mesmo, eu tenho de fazer diferente?
  3. Em relação a criação das credenciais no google? Muda alguma coisa? Como você fez o seu?
  4. Alteramos o dockerfile e resolveu. Creio que era algum problema relacionado a dependências. dockerfile.txt
  5. Estou utilizando credenciais "App para computador" e não marquei o escopo na tela de permissão oauth, só enviei o escopo na requisição e cliquei para permitir, obtive o Access Token e Refresh Token, mas está dando o erro: Erro: SMTP Error: Unable to send Mail data. 503 5.5.1 specifications. 41be03b00d2f7-7e9f6c4a1c1sm4122261a12.81 - gsmtp Referência: https://support.google.com/a/answer/3726730?hl=pt-BR
  6. Eu concordo com você, mas o problema é mais o cliente querer aderir a isto e ele não reclamar dos custos. Os valores da AWS não são altos e creio que na maioria dos meus clientes ficaria em menos de R$0,50 por mês. Se tudo não der certo, vou aconselhar a usar o AWS SES do qual já uso. AWS: https://aws.amazon.com/pt/ses/pricing/
  7. Testa isto aqui: procedure TConsultaCadastro.Execute; begin CoInitialize(nil); NFe := TACBrNFe.Create(nil); try try Synchronize(GetData); NFe.WebServices.ConsultaCadastro.UF := FUF; if Length(FCPF_CNPJ) > 11 then NFe.WebServices.ConsultaCadastro.CNPJ := FCPF_CNPJ else NFe.WebServices.ConsultaCadastro.CPF := FCPF_CNPJ; NFe.WebServices.ConsultaCadastro.Executar; Synchronize(RetornoSucesso); except on E: Exception do begin FErro := E.Message; if Trim(FErro) = '' then FErro := 'Erro desconhecido na consulta do cadastro na Sefaz.'; Synchronize(RetornoErro); end; end; finally CoUnInitialize; NFe.Free; end; end; Segue algumas informações improtantes: # cSit = Situação do contribuinte: 0 = Não habilitado; 1 = Habilitado; # indCredNFe = Indicador de contribuinte credenciado a emitir NF-e: 0 = Não credenciado para emissão da NF-e; 1 = Credenciado; 2 = Credenciado com obrigatoriedade para todas operações; 3 = Credenciado com obrigatoriedade parcial; 4 = SEFAZ não fornece a informação. Este indicador significa apenas que o contribuinte é credenciado para emitir NF-e na SEFAZ consultada; [ # indCredCTe = Indicador de contribuinte credenciado a emitir CT-e: 0 = Não credenciado para emissão da CT-e; 1 = Credenciado; 2 = Credenciado com obrigatoriedade para todas operações; 3 = Credenciado com obrigatoriedade parcial; 4 = SEFAZ não fornece a informação. Este indicador significa apenas que o contribuinte é credenciado para emitir CT-e na SEFAZ consultada; # xRegApur = Regime de Apuração do ICMS do Contribuinte; # IEUnica = IE única, este campo será informado quando o contribuinte possuir IE única; # IEAtual = IE atual (em caso de IE antiga consultada); Vou te mostrar o exemplo de retorno, eu salvo em um arquivo .ini: Config := TIniFile.Create(ExtractFileDir(Application.ExeName) + '\Config.ini'); try Config.EraseSection('CONSULTA_CADASTRO_SEFAZ'); Config.WriteBool('CONSULTA_CADASTRO_SEFAZ', 'Usado', True); Config.WriteInteger('CONSULTA_CADASTRO_SEFAZ', 'cStat', NFe.WebServices.ConsultaCadastro.cStat); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'xMotivo', NFe.WebServices.ConsultaCadastro.xMotivo); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'UF', NFe.WebServices.ConsultaCadastro.UF); Config.WriteInteger('CONSULTA_CADASTRO_SEFAZ', 'cUF', NFe.WebServices.ConsultaCadastro.cUF); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'CNPJ', NFe.WebServices.ConsultaCadastro.CNPJ); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'CPF', NFe.WebServices.ConsultaCadastro.CPF); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'IE', IfThen(NFe.WebServices.ConsultaCadastro.IE.Trim = '', NFe.WebServices.ConsultaCadastro.RetConsCad.IE, NFe.WebServices.ConsultaCadastro.IE)); Config.WriteDateTime('CONSULTA_CADASTRO_SEFAZ', 'dhCons', NFe.WebServices.ConsultaCadastro.dhCons); Config.WriteInteger('CONSULTA_CADASTRO_SEFAZ', 'QuantCadEst', NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad.Count); for I := 0 to NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad.Count - 1 do begin Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'IE_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].IE); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'CNPJ_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].CNPJ); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'CPF_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].CPF); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'UF_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].UF); Config.WriteInteger('CONSULTA_CADASTRO_SEFAZ', 'cSit_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].cSit); Config.WriteInteger('CONSULTA_CADASTRO_SEFAZ', 'indCredNFe_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].indCredNFe); Config.WriteInteger('CONSULTA_CADASTRO_SEFAZ', 'indCredCTe_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].indCredCTe); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'xNome_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].xNome); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'xFant_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].xFant); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'xRegApur_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].xRegApur); Config.WriteInteger('CONSULTA_CADASTRO_SEFAZ', 'CNAE_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].CNAE); Config.WriteDate('CONSULTA_CADASTRO_SEFAZ', 'dIniAtiv_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].dIniAtiv); Config.WriteDate('CONSULTA_CADASTRO_SEFAZ', 'dUltSit_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].dUltSit); Config.WriteDate('CONSULTA_CADASTRO_SEFAZ', 'dBaixa_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].dBaixa); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'IEUnica_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].IEUnica); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'IEAtual_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].IEAtual); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'xLgr_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].xLgr); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'nro_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].nro); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'xCpl_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].xCpl); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'xBairro_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].xBairro); Config.WriteInteger('CONSULTA_CADASTRO_SEFAZ', 'cMun_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].cMun); Config.WriteString('CONSULTA_CADASTRO_SEFAZ', 'xMun_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].xMun); Config.WriteInteger('CONSULTA_CADASTRO_SEFAZ', 'CEP_' + (I + 1).ToString, NFe.WebServices.ConsultaCadastro.RetConsCad.InfCad[I].CEP); end; finally Config.Free; end;
  8. Coloca dentro de um Try Except. try NFe.NotasFiscais[I].Validar; except on E: Exception do begin // Exibir mensagem com o E.message end end
  9. Quem ainda tem, está funcionando, mas não aparece mais a opção para configurar senha de app. Eu segui conforme está descrito ai, mas o problema que tenho é que eu preciso fazer alguns procedimentos para que o Google libere o envio de email quando eu uso o escopo "https://mail.google.com/". Tenho de criar um video no youtube e etc. Eu não sei se este é o caminho que todos estão fazendo agora, se for isto mesmo vou gravar um video, mas se não for eu gostaria de saber. Estou nesta dúvida agora. Pelo o que vi eu teria de seguir isto: https://support.google.com/cloud/answer/13463073?visit_id=638638963772284873-1041678242&hl=pt-br&rd=1#restricted-scopes Se tivesse alguém que fez recente e pudesse explicar se este é o caminho mesmo.
  10. Segue o print do erro em anexo: (node:24): Gtk-WARNING **:11:19:21.588: cannot open display:
  11. Eu não achei este escopo, achei o https://mail.google.com/ sem o openid. No caso que preciso apenas enviar e-mail, como ficaria? No caso, como ficou o seu?
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.