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>
- Completa el formulario en
contactoz.php
. - Haz clic en "Enviar".
- Verifica que el correo llegue a
tucorreo@tudominio.com.ar
y que se envíe una copia al correo del remitente. - El usuario será redirigido a
gracias.html
si el correo se envía correctamente.
Comentarios
No hay comentarios todavía. ¡Sé el primero en comentar!
Deja un comentario