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.ary que se envíe una copia al correo del remitente. - El usuario será redirigido a
gracias.htmlsi el correo se envía correctamente.
Comentarios
No hay comentarios todavía. ¡Sé el primero en comentar!
Deja un comentario