![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
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:
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);
}
}
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 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;
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;
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: 14-10-2024 a las 11:53:35. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Problemas con SMTP en smtp.office365.com | gguerrini | Internet | 5 | 14-10-2021 16:28:26 |
| Envio de correos SIN SSL | Rc96 | Internet | 4 | 15-09-2017 19:42:58 |
| ?Envio de correos ? | jasmad | Lazarus, FreePascal, Kylix, etc. | 16 | 02-10-2012 15:45:02 |
| servidor de correos SMTP | metroyd | Varios | 0 | 21-10-2007 23:57:36 |
| Envio de Correos Masivo | Esau | Internet | 2 | 10-04-2007 01:46:11 |
|