Márcio Baroni Postado 2 Outubro Postado 2 Outubro Bom dia @Jhoni Conzatti A maioria dos fontes que vi, é criando um servidor http local para receber os tokens, por enquanto está funcionando... Só lembrando que os fontes que disponibilizei é baseado no https://github.com/geoffsmith82/GmailAuthSMTP @Juliomar Marchetti esse repositório https://github.com/rvk01/google-oauth2 é feito lazarus e synapse feito para o Gmail, mas acho que dá para fazer para Outlook... 2
Patrick Alves Postado 2 Outubro Postado 2 Outubro (editado) Bom dia pessoal! Eu fiz um implementação do OAuth2 no ACBrMail a unit1 do anexo é alteração do exemplo do ACBr. Ainda falta o tratamento erros, mas já está funcional. Referencias: https://github.com/rvk01/google-oauth2/tree/master https://www.emailarchitect.net/easendmail/ex/d/23.aspx ACBrMail.pas unit1.pas unit1.dfm Editado 2 Outubro por Patrick Alves 1
Márcio Baroni Postado 2 Outubro Postado 2 Outubro Muito bom @Patrick Alves Tive que trocar o TMemoryStream pelo TStringStream para funcionar, envio tanto pelo delphi como no lazarus...... Agora só aquela mensagem "Aguardando consentimento do usuário" vai dar problema....
Patrick Alves Postado 2 Outubro Postado 2 Outubro Ei @Márcio Baroni... to refatorando algumas coisas e incluindo o tratamento de erros. Vou trocar o memorystream aqui. Acho que a mensagem não precisa na realidade... algum tipo de timeout pode funcionar no lugar. Mais tarde eu coloco aqui as alterações.
Márcio Baroni Postado 2 Outubro Postado 2 Outubro Tarde @Patrick Alves Cara já que vc tá mexendo, uma coisa que vc poderia ajustar para pegar o tempo de expiração do token e armazenar na propriedade "ExpiraEm" quando faz a autenticação... var ... expires_in: Integer; begin ... FRefreshToken := json.AsString['refresh_token']; FAccessToken := json.AsString['access_token']; expires_in := json.AsInteger['expires_in']; if expires_in > 0 then FExpiraEm := IncSecond(Now, expires_in) else FExpiraEm := 0; ... end; Mas parabéns ficou muito bom....
Patrick Alves Postado 2 Outubro Postado 2 Outubro Correções e melhorias: * Adicionar tratamento de erros; * Adicionar propriedade AuthServerTimeout para o tempo de espera do consentimento do usuário; * Atualizar propriedade ExpiraEm na atualização do token; * Adicionar pmsOAuth ao enum TMailStatus e propagar seu status; * Refatorar procedure AutorizacaoInterativa; * Remover mensagem "Aguardando consentimento do usuário"; * Refatorar procedure AtualizarAccessToken; * Na requisição alterar o tipo do response de TMemoryStream para TStringStream; Em anexo (Unit1.pas e Unit1.dfm são do exemplo) ACBrMail.pas unit1.pas unit1.dfm
Patrick Alves Postado 3 Outubro Postado 3 Outubro Boa tarde! Testes realizados com configurações para google e microsoft, emails enviados com sucesso. Correções : * Corrigir chamada do procedimento AutorizacaoInterativa. Executa mesmo depois do consentimento; * Corrigir parametro refresh_token para obter access token. Microsoft não aceita para aplicativos desktop; ACBrMail.pas
Membros Pro valterpatrick Postado 3 Outubro Membros Pro Postado 3 Outubro 14 minutos atrás, Patrick Alves disse: Boa tarde! Testes realizados com configurações para google e microsoft, emails enviados com sucesso. Correções : * Corrigir chamada do procedimento AutorizacaoInterativa. Executa mesmo depois do consentimento; * Corrigir parametro refresh_token para obter access token. Microsoft não aceita para aplicativos desktop; ACBrMail.pas 44.27 kB · 0 downloads Só precisa desta unit? Valter Patrick Gerente de Projetos na empresa CTEC (33)98400-0936 GitHub: https://github.com/valterpatrick
Patrick Alves Postado 4 Outubro Postado 4 Outubro 14 horas atrás, valterpatrick disse: Só precisa desta unit? Essa é a unit do componente, só precisa reinstalar o pacote.
saulo.figueiredo Postado 4 Outubro Postado 4 Outubro Bom dia, no caso da Microsoft, como faço para conseguir as credenciais?
Patrick Alves Postado 4 Outubro Postado 4 Outubro 7 minutos atrás, saulo.figueiredo disse: Bom dia, no caso da Microsoft, como faço para conseguir as credenciais? Bom dia! Você precisa ter uma conta na Azure e criar um aplicativo lá. Depois é só configurar os parâmetros para autenticação no componente. Vou deixar aqui alguns links de referencia: https://learn.microsoft.com/pt-br/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth https://learn.microsoft.com/pt-br/entra/identity-platform/quickstart-register-app?tabs=certificate 1
Membros Pro valterpatrick Postado 4 Outubro Membros Pro Postado 4 Outubro 17 horas atrás, Patrick Alves disse: Boa tarde! Testes realizados com configurações para google e microsoft, emails enviados com sucesso. Correções : * Corrigir chamada do procedimento AutorizacaoInterativa. Executa mesmo depois do consentimento; * Corrigir parametro refresh_token para obter access token. Microsoft não aceita para aplicativos desktop; ACBrMail.pas 44.27 kB · 4 downloads Eu tentei e está dando este erro: Acesso bloqueado: a solicitação desse app é inválida Não foi possível fazer login, porque esse app enviou uma solicitação inválida. Tente novamente ou entre em contato com o desenvolvedor para falar sobre o problema. Saiba mais sobre o erro Se você é um desenvolvedor desse app, consulte os detalhes do erro. Erro 400: redirect_uri_mismatch O app está como Produção, segui os passos que vi na internet para criar a chave e tudo mais. Valter Patrick Gerente de Projetos na empresa CTEC (33)98400-0936 GitHub: https://github.com/valterpatrick
Membros Pro valterpatrick Postado 4 Outubro Membros Pro Postado 4 Outubro 5 minutos atrás, valterpatrick disse: Eu tentei e está dando este erro: Acesso bloqueado: a solicitação desse app é inválida Não foi possível fazer login, porque esse app enviou uma solicitação inválida. Tente novamente ou entre em contato com o desenvolvedor para falar sobre o problema. Saiba mais sobre o erro Se você é um desenvolvedor desse app, consulte os detalhes do erro. Erro 400: redirect_uri_mismatch O app está como Produção, segui os passos que vi na internet para criar a chave e tudo mais. Eu fui testando e achei a solução para o meu problema. No Google Console tenho de deixar a mesma URL que eu colocar no envio. Estava colocando outra, por que tinha seguido um tutorial diferente. Valter Patrick Gerente de Projetos na empresa CTEC (33)98400-0936 GitHub: https://github.com/valterpatrick
Patrick Alves Postado 4 Outubro Postado 4 Outubro (editado) @valterpatrick Se atenta para o tipo de aplicativo que vc escolher, quando vc escolhe app para computador não é preciso informar o redirectURI no cadastro do app no google. No caso que apresentou ele validou o redirectURI porque vc informou app para web. Da uma olhada: https://developers.google.com/identity/protocols/oauth2/native-app?hl=pt-br Editado 4 Outubro por Patrick Alves incluir link
Membros Pro valterpatrick Postado 4 Outubro Membros Pro Postado 4 Outubro Agora, Patrick Alves disse: @valterpatrick Se atenta para o tipo de aplicativo que vc escolher, quando vc escolhe app para computador não é preciso informar o redirectURI no cadastro do app no google. No caso que apresentou ele validou o redirectURI porque vc informou app para web Eu segui o tutorial abaixo para fazer o cadastro: O que me indica para criar o cadastro correto no Google? Valter Patrick Gerente de Projetos na empresa CTEC (33)98400-0936 GitHub: https://github.com/valterpatrick
Patrick Alves Postado 4 Outubro Postado 4 Outubro Agora, valterpatrick disse: O que me indica para criar o cadastro correto no Google? o tipo de integração que vc está fazendo...
Membros Pro valterpatrick Postado 4 Outubro Membros Pro Postado 4 Outubro 16 minutos atrás, Patrick Alves disse: o tipo de integração que vc está fazendo... Quando eu coloco por exemplo "http://127.0.0.1:1500" no campo ID da Loja, eu tenho de fazer alguma outra alteração no meu programa? Tipo criar alguma coisa para receber conexão na porta 1500 por exemplo, sei lá. Na documentação referente a UWP, explica que é para colocar a porta que meu aplicativo detecta, como eu faço? Valter Patrick Gerente de Projetos na empresa CTEC (33)98400-0936 GitHub: https://github.com/valterpatrick
Patrick Alves Postado 4 Outubro Postado 4 Outubro @valterpatrick UWP é para aplicativos publicados na Microsoft Store, acho que não é o seu caso! Tenta escolher app para computador.
Membros Pro valterpatrick Postado 4 Outubro Membros Pro Postado 4 Outubro Agora, Patrick Alves disse: @valterpatrick UWP é para aplicativos publicados na Microsoft Store, acho que não é o seu caso! Tenta escolher app para computador. Blz, vou testar. Valeu. Valter Patrick Gerente de Projetos na empresa CTEC (33)98400-0936 GitHub: https://github.com/valterpatrick
Membros Pro valterpatrick Postado 4 Outubro Membros Pro Postado 4 Outubro 3 horas atrás, Patrick Alves disse: @valterpatrick UWP é para aplicativos publicados na Microsoft Store, acho que não é o seu caso! Tenta escolher app para computador. Estou tendo problema agora este erro: Erro: SMTP Error: Unable to send MailFrom. 535 5.7.8 https://support.google.com/mail/?p=BadCredentials d9443c01a7336-20c13934817sm1435145ad.158 - gsmtp 530 5.7.0 https://support.google.com/mail/?p=WantAuthError d9443c01a7336-20c13934817sm1435145ad.158 - gsmtp Valter Patrick Gerente de Projetos na empresa CTEC (33)98400-0936 GitHub: https://github.com/valterpatrick
Patrick Alves Postado 4 Outubro Postado 4 Outubro (editado) 17 minutos atrás, valterpatrick disse: Estou tendo problema agora este erro: Vc conseguiu autenticar o usuário pelo componente? Capturou o AccessToken? Editado 4 Outubro por Patrick Alves
Membros Pro valterpatrick Postado 4 Outubro Membros Pro Postado 4 Outubro 3 minutos atrás, Patrick Alves disse: Vc conseguiu autenticar o usuário pelo componente? Capturou o AccessToken? Sim capturei AccessToken e ele é informado no password: if fAutenticador.AccessToken <> '' then fSMTP.Password := fAutenticador.AccessToken; Contudo, quando chega na parte abaixo do código dá os erros que citei: for vAttempts := 1 to fAttempts do begin if fSMTP.MailFrom(fFrom, Length(fFrom)) then Break; AddErrorMsg(fSMTP.ResultString); if vAttempts >= fAttempts then SmtpError('SMTP Error: Unable to send MailFrom.' + sLineBreak + ErrorMsgs); end; Erros: Erro: SMTP Error: Unable to send MailFrom. 535 5.7.8 https://support.google.com/mail/?p=BadCredentials d9443c01a7336-20c13934817sm1435145ad.158 - gsmtp 530 5.7.0 https://support.google.com/mail/?p=WantAuthError d9443c01a7336-20c13934817sm1435145ad.158 - gsmtp Na minha conta do Google está mostrando como autorizado. Valter Patrick Gerente de Projetos na empresa CTEC (33)98400-0936 GitHub: https://github.com/valterpatrick
Patrick Alves Postado 4 Outubro Postado 4 Outubro (editado) @valterpatrick Verifica se suas configurações estão parecidas com essa: [Email] [email protected] FromName=Patrick Host=smtp.gmail.com Port=587 [email protected] Pass=strongpassword TLS=Sim [OAuth2] AccessTokenUrl=https://oauth2.googleapis.com/token AuthorizationTokenUrl=https://accounts.google.com/o/oauth2/v2/auth ClientId=seuclientid ClientSecret=seuclientsecret RedirectURI=http://127.0.0.1:1500 Scope=https://mail.google.com/ * Lembrando que o scope deve estar definido também na configuração do aplicativo lá no Cloud Api Console do google Editado 4 Outubro por Patrick Alves
Membros Pro valterpatrick Postado 4 Outubro Membros Pro Postado 4 Outubro Eu selecionei o escopo, mas está pedindo para fazer uma verificação, é assim mesmo? Eu coloquei em anexo o arquivo "Configuração OAUTH Gmail.pdf", que é o passo a passo que eu segui para criar as credenciais. Poderia verificar se eu fiz certo? Configuração OAUTH Gmail.pdf Valter Patrick Gerente de Projetos na empresa CTEC (33)98400-0936 GitHub: https://github.com/valterpatrick
Patrick Alves Postado 4 Outubro Postado 4 Outubro 14 minutos atrás, valterpatrick disse: mas está pedindo para fazer uma verificação, é assim mesmo? Acho que pode ser porque vc colocou o app para produção... acredito que a verificação é o processo que eles fazem pra certificar que é vc mesmo... Ainda não coloquei um app em produção... kkkk Se voltar o app para teste acho que não vai ter mais a verificação... Pra não ter erro nos testes que fiz eu coloquei o scopo global https://mail.google.com/
Recommended Posts
Crie uma conta ou entre para comentar
Você precisar ser um membro para fazer um comentário
Criar uma conta
Crie uma nova conta em nossa comunidade. É fácil!
Crie uma nova contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora