es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Realice la autenticación del navegador mediante solicitudes REST – API de Gmail.

Me gustaría enviar mensajes de correo electrónico con nuestros correos corporativos proporcionados por Gmail. Para hacerlo, me gustaría usar la API de Gmail con comandos REST (lanzados básicamente con un código procedural PHP, por motivos de herencia).

Tengo ese código:

Voy a esta URL:

// https://accounts.google.com/o/oauth2/auth?client_id = mi_identificador_de_cliente & redirect_uri = urn:ietf:wg:oauth:2.0:oob & scope = https://www.googleapis.com/auth/gmail.send & response_type = code
// y obtengo un token como este: 4/1AX4XfWgmW0ZdxXpJn8YzkVeDs3oXZUHyJcR7abE2TuqQrcmo4c1W02ALD4I

/*
echo GoogleAuthCurl (& quot; GET & quot;, & #39; & #39;, array (
& # 39; client_id & # 39; => $GOOGLE_CLIENT_ID,
& # 39; redirect_uri & # 39; =& gt; & # 39; urn:ietf:wg:oauth:2.0:oob & # 39 ;,
& # 39; scope & # 39; =& gt; & # 39; https://www.googleapis.com/auth/gmail.send & # 39;,
& # 39; response_type & # 39; =& gt; & # 39; código & # 39;
), array ());

entonces puedo usar solicitudes en cURL para obtener mi token de acceso:

curl \
–solicitud POST \
–datos & quot; código = [código de autenticación del enlace de autorización] & client_id = [ID de cliente de la aplicación] & client_secret = [secreto de cliente de la aplicación] & redirect_uri = urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code" \
https://accounts.google.com/o/oauth2/token */

$ tokenJson = json_decode (GoogleTokenCurl (& quot; POST & quot;, & # 39; & # 39;, array (), array (
& # 39; code & # 39; =& gt; & # 39; 4/1AX4XfWiEWngRngF7qryjtkcOG1otVtisYpjHnej1E54Pujcrchef8REvdt0 & # 39 ;,
& # 39; client_id & # 39; =& gt; $GOOGLE_CLIENT_ID,
& # 39; client_secret & # 39; =& gt; $GOOGLE_CLIENT_SECRET,
& # 39; redirect_uri & # 39; =& gt; & # 39; urn:ietf:wg:oauth:2.0:oob & # 39 ;,
& # 39; grant_type & # 39; =& gt; & # 39; authorization_code & # 39;
)
));

print_r ($ tokenJson);

Hasta aquí, he recibido la autorización para mi encabezado. Mi problema está en el primer paso (con el consentimiento solicitado al usuario). Me gustaría poder realizar este paso sin poner mi URL en el navegador, validar dos pantallas para otorgar acceso antes de obtener el código de autorización.

También estoy interesado en consejos para crear mensajes de Gmail con solicitudes REST impulsadas por curl. Encontré una colección de Postman sobre todas las acciones que la API de Gmail puede hacer, pero uno o dos ejemplos de llamadas no harían daño:)

¡Gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para evitar tener que obtener manualmente el código de autorización de la pantalla de consentimiento, puede utilizar la API de Google OAuth2 para obtener un token de acceso de forma programática.
    Para ello, deberá seguir estos pasos:

    1. Registre su aplicación con Google para obtener un ID de cliente y una clave secreta de cliente.
    2. Utilice el ID de cliente y la clave secreta para realizar una solicitud POST al servidor OAuth2 de Google para obtener un token de acceso. Esto se puede hacer utilizando una biblioteca PHP como Guzzle o utilizando cURL directamente.
    3. Una vez que tenga un token de acceso, puede utilizarlo para autenticar sus solicitudes a la API de Gmail.
    4. Para enviar un correo electrónico mediante la API de Gmail, deberá construir una carga útil JSON y enviar una solicitud POST al punto final messages.send de la API de Gmail.

    Aquí hay un ejemplo de cómo podría obtener un token de acceso utilizando cURL en PHP:

    // Configure las opciones cURL para la solicitud de token
    $options = array(
        CURLOPT_URL => "https://accounts.google.com/o/oauth2/token",
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => array(
            'code' => 'AUTHORIZATION_CODE',
            'client_id' => 'YOUR_CLIENT_ID',
            'client_secret' => 'YOUR_CLIENT_SECRET',
            'redirect_uri' => 'urn:ietf:wg:oauth:2.0:oob',
            'grant_type' => 'authorization_code'
        ),
        CURLOPT_RETURNTRANSFER => true,
    );
    
    // Ejecute la solicitud de cURL y descodifique la respuesta
    $curl = curl_init();
    curl_setopt_array($curl, $options);
    $response = curl_exec($curl);
    $token = json_decode($response, true);
    
    // Almacene el token de acceso en algún lugar para su uso futuro
    $access_token = $token['access_token'];
    

    Para enviar un correo electrónico utilizando la API de Gmail, puede construir una carga útil JSON que contenga los datos del mensaje y enviar una solicitud POST al punto final messages.send. Aquí hay un ejemplo de cómo hacerlo utilizando cURL en PHP:

    // Construye la carga útil JSON del mensaje de correo electrónico
    $message = array(
        'raw' => base64_encode("From: sender@example.com\r\nTo: recipient@example.com\r\nSubject: Test Subject\r\n\r\nTest Body"),
    );
    
    // Configure las opciones cURL para enviar correo electrónico
    $options = array(
        CURLOPT_URL => "https://www.googleapis.com/gmail/v1/users/me/messages/send",
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => json_encode($message),
        CURLOPT_HTTPHEADER => array(
            'Authorization: Bearer ' . $access_token,
            'Content-Type: application/json'
        ),
        CURLOPT_RETURNTRANSFER => true,
    );
    
    // Ejecute la solicitud cURL y descodifique la respuesta
    $curl = curl_init();
    curl_setopt_array($curl, $options);
    $response = curl_exec($curl);
    $result = json_decode($response, true);
    
    // Verifique los errores y maneje la respuesta según sea necesario
    if (isset($result['error'])) {
        // Maneje el error
    } else {
        // Maneje la respuesta exitosa
    }
    

    Tenga en cuenta que deberá completar los valores apropiados para el ID de cliente, clave secreta de cliente, código de autorización y datos del mensaje en los ejemplos anteriores.

Comments are closed.