Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-09-2023
Avatar de HerensugeBeltz
HerensugeBeltz HerensugeBeltz is offline
Miembro
 
Registrado: may 2021
Ubicación: Hondarribia
Posts: 88
Poder: 4
HerensugeBeltz Va por buen camino
Envío de correos SMTP de office365 con Indy10

Hola,

Desarrollamos una aplicación de escritorio (C++Builder 10.1) que usa los componentes Indy incluidos en dicha versión para el envío de emails. El problema es que los clientes que tienen el correo con office365 cada vez tienen más problemas con los envíos y tienen que bajar la seguridad de su cuenta (y me temo que pronto no podrán enviar más correos de la manera tradicional).
Al parecer hay dos alternativas: implementar OAuth2 (no parece algo sencillo en una aplicación de escritorio) o utilizar la API de Microsoft Graph. Alguna solución comercial tal vez?

Mi pregunta es, hay alguien con aplicaciones de escritorio en C++ Builder o Delphi con el mismo problema? Alguien que me pueda informar sobre cómo lo han solucionado?
Agradezco cualquier ayuda que me ayude a seguir adelante.
Gracias.
Responder Con Cita
  #2  
Antiguo 28-09-2023
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Diré, no como la solución, pero, como una posible solución (porque, acaso la solución sería una implementación en Delphi sin más), que acaso podría pensarse en usar un "servidor / puente", es decir, supongamos que tenemos un hosting que permite ejecutar PHP (lo que es común), entonces, podríamos implementar acaso el envío del correo en un script PHP, que, recibiese los argumentos necesarios desde una llamada que se hiciese desde nuestra aplicación Delphi.

La idea es dejar al servidor (PHP o cualquier otro lenguaje) lo que es el envío del correo, mientras que, nuestra aplicación Delphi, lo "único" que tendría que hacer sería una llamada HTTP POST al script de nuestro servidor. Este llevaría a cabo la tarea y proporcionaría la respuesta necesaria a nuestra aplicación: "Ok" (Se envío el correo), "Error: Algún error", etc. Ya digo que no es la solución, que, sería implementar el asunto en la propia aplicación Delphi, pero, en fin, lo dejo caer por si pudiera resultar útil en un momento dado.

P.S. Acaso la implementación de "OAuth2" (por ejemplo) sería más sencilla desde el servidor, aunque, insisto en que acaso la verdadera solución sería pegarse con eso en la propia aplicación Delphi, pues, digo yo que debe ser posible hacer algo así. Seguro que algún compañero nos da una mejor pista o solución para implementar el asunto en la propia aplicación Delphi.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 29-09-2023
Avatar de HerensugeBeltz
HerensugeBeltz HerensugeBeltz is offline
Miembro
 
Registrado: may 2021
Ubicación: Hondarribia
Posts: 88
Poder: 4
HerensugeBeltz Va por buen camino
El problema que le veo a tu propuesta es que nuestra aplicación está distribuida en unos 100 clientes; no veo factible configurarle el servidor a cada uno. Por otra parte, si usásemos nuestro servidor, cada vez que tuviesen un problema con el envío nos llamarían a nosotros, además de que en los correos se maneja información confidencial (contrato de la LPD con cada clientes)...
En fin, como bien dices, lo ideal sería implementarlo en la propia aplicación.
Gracias por tu respuesta.
Responder Con Cita
  #4  
Antiguo 29-09-2023
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

La verdad es que lleva razón. Es decir, podría acaso haberme ahorrado la respuesta: no es lo que se pretendía hacer, no ofrece una solución, en definitiva, debería haberme ahorrado dicha respuesta. ¡Pido disculpas!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 29-09-2023
Avatar de HerensugeBeltz
HerensugeBeltz HerensugeBeltz is offline
Miembro
 
Registrado: may 2021
Ubicación: Hondarribia
Posts: 88
Poder: 4
HerensugeBeltz Va por buen camino
Cita:
Empezado por dec Ver Mensaje
Hola a todos,

La verdad es que lleva razón. Es decir, podría acaso haberme ahorrado la respuesta: no es lo que se pretendía hacer, no ofrece una solución, en definitiva, debería haberme ahorrado dicha respuesta. ¡Pido disculpas!
En absoluto. Toda colaboración vale y puede aportar algo.
Un saludo y buen fin de semana.
Responder Con Cita
  #6  
Antiguo 29-09-2023
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

En este hilo de Delphi Praxis, donde se trata, justamente, de lo que se trata en este hilo: "Indy + OAuth2", participa el gran Remy Lebeau, y, parece que Indy no soportaría actualmente OAuth2, aunque, se propone alguna posibilidad: pero no se implementa, simplemente se sugiere / propone.

En dicho hilo, un compañero "Delphiano", apunta a este proyecto de Github: creo que podría servirle, de modo que, puede echarle un vistazo a ver qué tal. Sino me equivoco (no lo he mirado con detenimiento) lo que este proyecto hace es, precisamente, lo que Remy Lebeau propone, para dar a Indy soporte para OAuth2.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 02-10-2023 a las 10:47:32.
Responder Con Cita
  #7  
Antiguo 02-10-2023
Avatar de HerensugeBeltz
HerensugeBeltz HerensugeBeltz is offline
Miembro
 
Registrado: may 2021
Ubicación: Hondarribia
Posts: 88
Poder: 4
HerensugeBeltz Va por buen camino
Le echaré un vistazo.
Muchas gracias!!
Responder Con Cita
  #8  
Antiguo 02-10-2023
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Cita:
Empezado por HerensugeBeltz Ver Mensaje
Le echaré un vistazo.
Muchas gracias!!
¡No hay de qué, a ver si hay suerte, hombre!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 26-08-2024
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.591
Poder: 21
newtron Va camino a la fama
Buenas.


Me acabo de enterar de que este otoño gmail dejará de funcionar desde programas externos a no ser que sea con oauth.


HerensugeBeltz ¿al final solucionaste este tema?


Gracias y un saludo.
__________________
Be water my friend.
Responder Con Cita
  #10  
Antiguo 26-08-2024
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
De momento, que yo sepa, se puede seguir usando "contraseñas de aplicación".
Responder Con Cita
  #11  
Antiguo 27-08-2024
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.591
Poder: 21
newtron Va camino a la fama
Gracias Antonio pero échale un vistazo a esto:


https://support.google.com/a/answer/14114704?hl=es


https://workspaceupdates.googleblog....s-support.html


Saludos.
__________________
Be water my friend.
Responder Con Cita
  #12  
Antiguo 27-08-2024
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por newtron Ver Mensaje
" ... Ya no utilizarás una contraseña para acceder (con la excepción de las contraseñas de aplicación). ... "
Responder Con Cita
  #13  
Antiguo 27-08-2024
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.591
Poder: 21
newtron Va camino a la fama
Gracias Antonio. No me había percatado de ese detalle aunque la verdad es que no sé si fiarme mucho.


A ver si llega ese día, todo se bloquea y nos pilla en "bragas" porque usar oauth no parece fácil.


Saludos.
__________________
Be water my friend.
Responder Con Cita
  #14  
Antiguo 27-08-2024
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
"Contraseña de aplicación" sigue funcionando, lo uso desde hace años.
Seguramente con el tiempo lo irán cambiando también, pero de momento no hay fechas que yo sepa.
Responder Con Cita
  #15  
Antiguo Hace 2 Semanas
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 143
Poder: 15
iMia Va por buen camino
hola a todos,
refloto el tema, porque en outlook, no me funcionan las contraseñas de aplicación.
El caso es que en GMail funciona perfectamente.
Outlook permite crear contraseñas de aplicación, previa activación de la verificación en dos pasos, pero no deja indicar para qué aplicación; simplemente te crea una contraseña, sin indicar el tipo de aplicación ni a qué tiene acceso.

Y aunque la pongas esa contraseña en los datos del smtp, no funciona. Sigue apareciendo el error: 535 5.7.139 Authentication unsuccessful, basic authentication is disabled
SMTP: smtp-mail.outlook.com - También he probado : smtp.office365.com
STARTTLS on
port: 587
user: xxx@outlook.com
pass: yyy
Responder Con Cita
  #16  
Antiguo Hace 2 Semanas
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 235
Poder: 1
navbuoy Va por buen camino
Le pregunte a mi querido ChatGPT y me dice:

Implementar el envío de correos electrónicos con OAuth2 en Delphi utilizando Indy10 implica varios pasos, incluyendo la configuración de OAuth2, el uso de las bibliotecas de Indy para enviar correos y la autenticación con el token de acceso. A continuación, te proporcionaré una guía paso a paso sobre cómo hacerlo.

Requisitos Previos
Delphi con Indy10: Asegúrate de que tienes Delphi instalado con las bibliotecas Indy10 disponibles.
Cuenta de Correo: Necesitarás una cuenta de correo electrónico que soporte OAuth2 (por ejemplo, Gmail, Outlook).
Bibliotecas Adicionales: Es posible que necesites las bibliotecas de OAuth2, como IdOAuth2 de Indy.
Paso 1: Configuración de OAuth2
Para usar OAuth2, necesitas registrar tu aplicación en la consola de desarrolladores de tu proveedor de correo electrónico (por ejemplo, Google). Esto te proporcionará:

Client ID
Client Secret
Redirect URI
Paso 2: Obtener el Token de Acceso
Para obtener un token de acceso, deberás realizar el flujo de autorización de OAuth2. Aquí te muestro cómo hacerlo utilizando una función de ejemplo. El proceso de obtención del token puede variar dependiendo del proveedor de servicios de correo electrónico.

Ejemplo de obtención del token de acceso:

Código:
uses
  IdHTTP, IdSSL, IdSSLOpenSSL, System.JSON;

function GetAccessToken(ClientID, ClientSecret, RefreshToken: string): string;
var
  IdHTTP: TIdHTTP;
  IdSSL: TIdSSLIOHandlerSocketOpenSSL;
  Params: TStringList;
  Response: string;
  JSONResponse: TJSONObject;
begin
  IdHTTP := TIdHTTP.Create(nil);
  IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  Params := TStringList.Create;
  try
    IdHTTP.IOHandler := IdSSL;

    // Establecer los parámetros para la solicitud de token
    Params.Add('client_id=' + ClientID);
    Params.Add('client_secret=' + ClientSecret);
    Params.Add('refresh_token=' + RefreshToken);
    Params.Add('grant_type=refresh_token');

    // Hacer la solicitud POST para obtener el token
    Response := IdHTTP.Post('https://oauth2.googleapis.com/token', Params);
    JSONResponse := TJSONObject.ParseJSONValue(Response) as TJSONObject;

    try
      Result := JSONResponse.GetValue('access_token').Value; // Extraer el token
    finally
      JSONResponse.Free;
    end;
  finally
    Params.Free;
    IdSSL.Free;
    IdHTTP.Free;
  end;
end;
Paso 3: Enviar Correo Electrónico con Indy10
Una vez que hayas obtenido el token de acceso, puedes usar Indy10 para enviar correos electrónicos.

Ejemplo de envío de correo:

Código:
uses
  IdSMTP, IdMessage;

procedure SendEmail(EmailAddress, Subject, Body, AccessToken: string);
var
  SMTP: TIdSMTP;
  Msg: TIdMessage;
begin
  SMTP := TIdSMTP.Create(nil);
  Msg := TIdMessage.Create(nil);
  try
    // Configurar SMTP
    SMTP.Host := 'smtp.gmail.com'; // Cambia según tu proveedor
    SMTP.Port := 587;
    SMTP.UseTLS := utUseExplicitTLS;
    
    // Establecer las credenciales con el token de acceso
    SMTP.AuthType := atOAuth2;
    SMTP.OAuth2.ClientID := '<Tu Client ID>';
    SMTP.OAuth2.ClientSecret := '<Tu Client Secret>';
    SMTP.OAuth2.AccessToken := AccessToken;
    SMTP.Username := EmailAddress; // La dirección de correo electrónico
    
    // Crear el mensaje
    Msg.From.Address := EmailAddress;
    Msg.Recipients.Add.Email := EmailAddress; // Cambia según el destinatario
    Msg.Subject := Subject;
    Msg.Body.Text := Body;
    
    // Conectar y enviar el mensaje
    SMTP.Connect;
    try
      SMTP.Send(Msg);
    finally
      SMTP.Disconnect;
    end;
  finally
    Msg.Free;
    SMTP.Free;
  end;
end;

Paso 4: Integrar Todo

Ahora puedes integrar los pasos anteriores en tu aplicación. Aquí tienes un ejemplo de cómo podrías usar las funciones:

Código:
procedure TForm1.btnSendEmailClick(Sender: TObject);
var
  AccessToken: string;
begin
  // Obtén el token de acceso
  AccessToken := GetAccessToken('<Tu Client ID>', '<Tu Client Secret>', '<Tu Refresh Token>');
  
  // Envía el correo
  SendEmail('<tu_email@gmail.com>', 'Asunto', 'Cuerpo del mensaje', AccessToken);
end;
Consideraciones Finales
Manejo de Errores: Asegúrate de implementar el manejo de errores en el código de producción.
Seguridad: Mantén tus credenciales seguras y no las incluyas directamente en el código.
Bibliotecas de Dependencia: Asegúrate de que las bibliotecas de Indy y las dependencias de SSL estén correctamente configuradas en tu proyecto.
Pruebas: Realiza pruebas exhaustivas para asegurarte de que el flujo de autorización y el envío de correos funcionen correctamente.
Con esto deberías poder enviar correos electrónicos utilizando Indy10 y OAuth2 en Delphi.
Responder Con Cita
  #17  
Antiguo Hace 2 Semanas
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Tengo un programa en funcionamiento que usa estos parámetros, prueba con ellos:
Cita:
TLS = utUseRequireTLS
TLSver = sslvSSLv23
puerto=587
Responder Con Cita
  #18  
Antiguo Hace 2 Semanas
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 143
Poder: 15
iMia Va por buen camino
Muchas gracias NavBouy,
un código fantástico que le servirá a muchos!

Tengo claro, obtener el Token y con ese token enviar el correo.
Tengo que tener una cuenta outlook propia de mi aplicación, darme de alta en Azure, añadir mi aplicación. Ahí obtengo mi IdClient, mi client Secret y refresh token.

¿Con eso obtengo el token y envío como si fuese el cliente?

¿Donde se tiene en cuenta la contraseña del cliente?

Si mañana otro cliente mio que tenga yahoo o un servidor de esos que te hacen una web y te crean un dominio y redirigen el mail,
¿¿tengo que dar de alta mi aplicación para tener ese ClientId, clientSecret y tokenRefresh y poder acceder al smtp enviar correos desde ese servidor??
Responder Con Cita
  #19  
Antiguo Hace 2 Semanas
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 235
Poder: 1
navbuoy Va por buen camino
supongo que si, yo no he hecho ninguna app con eso del correo con Tokens pero imagino que se obtiene en la propia cuenta de Google o quien sea el proveedor (en algun sitio debe estar)

y si, lo de la contraseña y eso debe pedirsela al usuario en algun panel de configuracion o algo y que la guarde en algun sitio para no estar pidiendosela siempre.

ChatGPT me informo de esto (sorry por poner codigo en C++):

Cita:
Para enviar correos usando OAuth con Google Mail (Gmail), el token de acceso se obtiene como parte del proceso de autenticación de OAuth. No se almacena directamente en un lugar fijo, sino que es generado dinámicamente durante el proceso de autenticación. A continuación te explico los pasos principales para obtener el token de acceso:

1. Crear el proyecto en Google Cloud:
Debes crear un proyecto en Google Cloud Console, y habilitar la API de Gmail para tu proyecto.
Luego, configura las credenciales OAuth 2.0. Para ello, crea un ID de cliente OAuth. Este ID estará asociado a tu aplicación, y será el punto inicial para obtener los tokens necesarios.

2. Proceso de OAuth 2.0:
Usa las credenciales que has configurado (client ID y client secret) para solicitar a los usuarios que autoricen tu aplicación a acceder a su cuenta de Gmail.
En este paso, el usuario interactúa con una página de autorización de Google. Si el usuario concede acceso, Google te devolverá un código de autorización.

3. Intercambiar el código de autorización por un token de acceso:
Usa el código de autorización que obtuviste para intercambiarlo por un token de acceso. Este token es el que permite a tu aplicación realizar solicitudes a la API de Gmail en nombre del usuario.
Este intercambio lo haces mediante una solicitud HTTP POST a los servidores de Google.

4. Refrescar el token de acceso:
El token de acceso tiene una vida útil limitada. Una vez que expire, deberás usar un token de actualización para solicitar un nuevo token de acceso sin necesidad de que el usuario vuelva a autorizar la aplicación.
Código ejemplo para obtener el token de acceso:

Código:
// Paso 1: Crear las credenciales en Google Cloud Console
// Paso 2: Obtener el código de autorización usando el endpoint de autorización de Google
// Paso 3: Intercambiar el código de autorización por un token de acceso

#include <curl/curl.h>
#include <json/json.h>

// Requiere libcurl y una biblioteca de JSON
void getAccessToken(std::string clientID, std::string clientSecret, std::string authCode) {
    CURL* curl;
    CURLcode res;

    curl = curl_easy_init();
    if(curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Content-Type: application/x-www-form-urlencoded");

        std::string postFields = "code=" + authCode +
                                 "&client_id=" + clientID +
                                 "&client_secret=" + clientSecret +
                                 "&redirect_uri=urn:ietf:wg:oauth:2.0:oob" +
                                 "&grant_type=authorization_code";

        curl_easy_setopt(curl, CURLOPT_URL, "https://oauth2.googleapis.com/token");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postFields.c_str());

        // Enviar la solicitud y obtener el token de acceso
        res = curl_easy_perform(curl);
        
        // Si el resultado es CURLE_OK, el token se habrá recibido
        if(res != CURLE_OK)
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));

        curl_easy_cleanup(curl);
    }
}
Dónde se usa el token de acceso:
El token de acceso es utilizado para autenticar cualquier solicitud que haga tu aplicación a la API de Gmail. Debes incluirlo en el encabezado HTTP de la solicitud como un "Bearer token":

Código:
Authorization: Bearer YOUR_ACCESS_TOKEN
Si no tienes experiencia previa con OAuth y APIs, puede ser útil revisar la documentación oficial de OAuth 2.0 en Google y también consultar ejemplos en otros lenguajes para familiarizarte con el flujo completo.

CODIGO DELPHI:

Código:
uses
  IdHTTP, IdSSLOpenSSL, System.SysUtils, System.Classes;

procedure GetAccessToken(const ClientID, ClientSecret, AuthCode: string);
var
  HTTP: TIdHTTP;
  SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
  Params: TStringList;
  Response: TStringStream;
begin
  HTTP := TIdHTTP.Create(nil);
  SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  Params := TStringList.Create;
  Response := TStringStream.Create;
  
  try
    HTTP.IOHandler := SSLHandler;

    // Configurar los parámetros para la solicitud POST
    Params.Add('code=' + AuthCode);
    Params.Add('client_id=' + ClientID);
    Params.Add('client_secret=' + ClientSecret);
    Params.Add('redirect_uri=urn:ietf:wg:oauth:2.0:oob');
    Params.Add('grant_type=authorization_code');

    // Hacer la solicitud POST para obtener el token de acceso
    try
      HTTP.Post('https://oauth2.googleapis.com/token', Params, Response);
      ShowMessage('Response: ' + Response.DataString);  // Aquí obtienes el token de acceso en formato JSON
    except
      on E: Exception do
        ShowMessage('Error: ' + E.Message);
    end;

  finally
    HTTP.Free;
    SSLHandler.Free;
    Params.Free;
    Response.Free;
  end;
end;
Explicación del código:
TIdHTTP se utiliza para hacer la solicitud HTTP POST a la URL de Google (https://oauth2.googleapis.com/token).
Los parámetros necesarios para la solicitud POST se agregan al TStringList, como el código de autorización, el client ID y el client secret.
El SSLHandler (de Indy) se utiliza para manejar la conexión segura a los servidores de Google.
El resultado de la solicitud se guarda en un TStringStream (en formato JSON), que contiene el token de acceso.

Uso del token de acceso:
Una vez que obtengas el token de acceso (en formato JSON), podrás extraer el campo access_token y utilizarlo en futuras solicitudes HTTP a la API de Gmail, enviándolo en el encabezado de autenticación como un "Bearer token".


Ejemplo de uso del token de acceso en otra solicitud:

Código:
procedure SendAuthenticatedRequest(const AccessToken: string);
var
  HTTP: TIdHTTP;
  SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
  Response: TStringStream;
begin
  HTTP := TIdHTTP.Create(nil);
  SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  Response := TStringStream.Create;
  
  try
    HTTP.IOHandler := SSLHandler;
    HTTP.Request.CustomHeaders.Values['Authorization'] := 'Bearer ' + AccessToken;

    try
      HTTP.Get('https://www.googleapis.com/gmail/v1/users/me/messages', Response);
      ShowMessage('Response: ' + Response.DataString);
    except
      on E: Exception do
        ShowMessage('Error: ' + E.Message);
    end;

  finally
    HTTP.Free;
    SSLHandler.Free;
    Response.Free;
  end;
end;
Este ejemplo hace una solicitud GET autenticada a la API de Gmail para obtener los mensajes de correo del usuario autenticado.

Consideraciones adicionales:
Recuerda que el token de acceso tiene un tiempo de vida limitado (normalmente 1 hora). Después, deberás usar un token de actualización para solicitar un nuevo token de acceso.
Necesitarás el paquete OpenSSL para Delphi si no lo tienes instalado.

Última edición por navbuoy fecha: Hace 2 Semanas a las 12:53:35.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problemas con SMTP en smtp.office365.com gguerrini Internet 5 14-10-2021 17:28:26
Envio de correos SIN SSL Rc96 Internet 4 15-09-2017 20:42:58
?Envio de correos ? jasmad Lazarus, FreePascal, Kylix, etc. 16 02-10-2012 16:45:02
servidor de correos SMTP metroyd Varios 0 22-10-2007 00:57:36
Envio de Correos Masivo Esau Internet 2 10-04-2007 02:46:11


La franja horaria es GMT +2. Ahora son las 01:18:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi