Cómo enviar Correos desde tu Web con la API de Zoho Mail

C. Nahuel Baglietto

5. Enviar correos con la API

Usa el Access Token y el accountId para enviar correos. Aquí tienes un ejemplo de cómo hacerlo con cURL:

curl -X POST \
'https://mail.zoho.com/api/accounts/2427012000000008002/messages' \
-H 'Authorization: Zoho-oauthtoken TU_ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"fromAddress": "tucuenta@zoho.com",
"toAddress": "destinatario@example.com",
"ccAddress": "copia@example.com",
"subject": "Prueba de correo",
"content": "Este es un mensaje de prueba."
}'

Si la solicitud es exitosa, obtendrás una respuesta como esta:

{
  "status": {
    "code": 200,
    "description": "success"
  },
  "data": {
    "messageId": "1234567890"
  }
}
6. Integrar en PHP

Crea un archivo PHP (zoho_send.php) para manejar el envío de correos desde un formulario. Aquí tienes el código:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Configuración de credenciales
$client_id = '2000.ASDEMfsdfsdfFHMLMHJ9QJ7123234rtf'; // Reemplaza con tu Client ID
$client_secret = '8jfdshfdshfdshdsf7f160937ee10b1264fea08123lksdfslkdlkj'; // Reemplaza con tu Client Secret
$refresh_token = '2000.dfsdfsdfwer890c044ef135e0f03706027.b873c97715dec552cpwpe80rkjqw4e98'; // Tu Refresh Token
$account_id = '6727088000000009002'; // Reemplaza con tu accountId

// Función para obtener un nuevo Access Token usando el Refresh Token
function getNewAccessToken($client_id, $client_secret, $refresh_token) {
    $url = 'https://accounts.zoho.com/oauth/v2/token';
    $data = [
        'refresh_token' => $refresh_token,
        'client_id' => $client_id,
        'client_secret' => $client_secret,
        'grant_type' => 'refresh_token'
    ];

    $options = [
        'http' => [
            'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
            'method'  => 'POST',
            'content' => http_build_query($data)
        ]
    ];

    $context = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

    if ($result === FALSE) {
        die('Error al obtener el nuevo Access Token. Detalles: ' . print_r(error_get_last(), true));
    }

    $response = json_decode($result, true);
    return $response['access_token'];
}

// Verifica si el formulario se envió
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Recupera los datos del formulario
    $name = $_POST['name'];
    $email = $_POST['email']; // Correo del remitente
    $message = $_POST['message'];

    // Configuración del correo
    $from_email = 'web@xxx.com.ar'; // Tu dirección de correo
    $to_email = 'xxx@xxx.com.ar'; // Correo principal (destinatario)
    $subject = 'Nuevo mensaje de contacto de ' . $name;
    $body = "Nombre: $name\nCorreo electrónico: $email\nMensaje:\n$message";

    // Access Token (puedes almacenarlo en un archivo o base de datos para no solicitarlo siempre)
    $access_token = '1000.be3428e2bc69f8e3f121bb4e0d7ca1da.07a6522fab57275d036ffc349ea9f3fr';

    // URL de la API de Zoho Mail
    $url = "https://mail.zoho.com/api/accounts/$account_id/messages";

    // Datos del correo
    $data = [
        'fromAddress' => $from_email,
        'toAddress' => $to_email, // Correo principal (nbaglietto@chinaimport.com.ar)
        'ccAddress' => $email, // Copia al remitente (el correo que ingresó en el formulario)
        'subject' => $subject,
        'content' => $body
    ];

    // Configuración de la solicitud HTTP
    $options = [
        'http' => [
            'header'  => "Authorization: Zoho-oauthtoken $access_token\r\n" .
                         "Content-type: application/json\r\n",
            'method'  => 'POST',
            'content' => json_encode($data)
        ]
    ];

    // Realiza la solicitud
    $context = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

    // Si la solicitud falla, intenta obtener un nuevo Access Token y reintentar
    if ($result === FALSE) {
        // Obtén un nuevo Access Token
        $new_access_token = getNewAccessToken($client_id, $client_secret, $refresh_token);

        // Actualiza el Access Token en la solicitud
        $options['http']['header'] = "Authorization: Zoho-oauthtoken $new_access_token\r\n" .
                                     "Content-type: application/json\r\n";

        // Reintenta la solicitud con el nuevo Access Token
        $context = stream_context_create($options);
        $result = file_get_contents($url, false, $context);

        // Si sigue fallando, muestra un error
        if ($result === FALSE) {
            die('Error al enviar el correo. Detalles: ' . print_r(error_get_last(), true));
        }
    }

    // Decodifica la respuesta JSON
    $response = json_decode($result, true);

    // Verifica si la solicitud fue exitosa
    if (isset($response['status']['code']) && $response['status']['code'] === 200) {
        // Redirige al usuario a la página de confirmación
        header('Location: gracias.php');
        exit();
    } else {
        die('Error en la API de Zoho Mail: ' . print_r($response, true));
    }
} else {
    // Si el formulario no se envió, redirige al formulario
    header('Location: contactoz.php');
    exit();
}
?>
        

Crea un formulario HTML (contactoz.php) para que los usuarios ingresen sus datos:

<form action="zoho_send.php" method="POST">
<label for="name">Nombre:</label>
<input type="text" id="name" name="name" required>
<label for="email">Correo electrónico:</label>
<input type="email" id="email" name="email" required>
<label for="message">Mensaje:</label>
<textarea id="message" name="message" rows="5" required></textarea>
<button type="submit">Enviar</button>
</form>

Crea una página de confirmación (gracias.html) para redirigir al usuario después de enviar el correo:

Crea un formulario HTML (contactoz.php) para que los usuarios ingresen sus datos:

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gracias</title>
</head>
<body>
<h1>¡Gracias!</h1>
<p>Tu mensaje ha sido enviado correctamente.</p>
</body>
</html>
  1. Completa el formulario en contactoz.php.
  2. Haz clic en "Enviar".
  3. Verifica que el correo llegue a tucorreo@tudominio.com.ar y que se envíe una copia al correo del remitente.
  4. El usuario será redirigido a gracias.html si el correo se envía correctamente.

Deja un comentario

Comentarios

No hay comentarios todavía. ¡Sé el primero en comentar!