Uso de HttpClient en Java para Enviar
Correos con la API de Mandrill
1. Enviar un Correo Electrónico Básico
Este ejemplo muestra cómo enviar un correo electrónico utilizando la API de Mandrill a
través de la URL https://mandrillapp.com/api/1.0/messages/send.json en Java. Se utiliza la
clase HttpClient de Java para enviar una solicitud POST.
Código:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MandrillEmailSender {
public static void main(String[] args) throws Exception {
String apiKey = "TU_API_KEY";
String apiUrl = "https://mandrillapp.com/api/1.0/messages/send.json";
// Crear el cuerpo de la solicitud
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("key", apiKey);
Map<String, Object> message = new HashMap<>();
message.put("html", "<p>Hola, este es un mensaje de prueba.</p>");
message.put("subject", "Asunto de prueba");
message.put("from_email", "
[email protected]");
message.put("from_name", "Tu Nombre");
Map<String, Object> recipient = new HashMap<>();
recipient.put("email", "
[email protected]");
recipient.put("name", "Nombre del Destinatario");
message.put("to", List.of(recipient));
requestBody.put("message", message);
// Convertir el cuerpo de la solicitud a JSON
ObjectMapper objectMapper = new ObjectMapper();
String requestBodyJson = objectMapper.writeValueAsString(requestBody);
// Crear el cliente HTTP y la solicitud
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(apiUrl))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(requestBodyJson))
.build();
// Enviar la solicitud y obtener la respuesta
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
// Imprimir el estado y cuerpo de la respuesta
System.out.println("HTTP Status: " + response.statusCode());
System.out.println("Response: " + response.body());
}
}
2. Enviar un Correo Electrónico con un Archivo Adjunto
Este ejemplo extiende el anterior para incluir la funcionalidad de adjuntar un archivo al
correo electrónico. El archivo se codifica en base64 y se añade en la sección attachments del
mensaje.
Código:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MandrillEmailSenderWithAttachment {
public static void main(String[] args) throws Exception {
String apiKey = "TU_API_KEY";
String apiUrl = "https://mandrillapp.com/api/1.0/messages/send.json";
// Ruta del archivo que deseas adjuntar
String filePath = "ruta/a/tu/archivo.pdf";
String encodedFile = encodeFileToBase64(filePath);
// Crear el cuerpo de la solicitud
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("key", apiKey);
Map<String, Object> message = new HashMap<>();
message.put("html", "<p>Hola, este es un mensaje de prueba con archivo
adjunto.</p>");
message.put("subject", "Asunto con adjunto");
message.put("from_email", "
[email protected]");
message.put("from_name", "Tu Nombre");
Map<String, Object> recipient = new HashMap<>();
recipient.put("email", "
[email protected]");
recipient.put("name", "Nombre del Destinatario");
message.put("to", List.of(recipient));
// Adjuntar el archivo
Map<String, Object> attachment = new HashMap<>();
attachment.put("type", "application/pdf"); // Tipo MIME del archivo
attachment.put("name", "archivo.pdf"); // Nombre del archivo
attachment.put("content", encodedFile); // Contenido del archivo en base64
message.put("attachments", List.of(attachment));
requestBody.put("message", message);
// Convertir el cuerpo de la solicitud a JSON
ObjectMapper objectMapper = new ObjectMapper();
String requestBodyJson = objectMapper.writeValueAsString(requestBody);
// Crear el cliente HTTP y la solicitud
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(apiUrl))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(requestBodyJson))
.build();
// Enviar la solicitud y obtener la respuesta
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
// Imprimir el estado y cuerpo de la respuesta
System.out.println("HTTP Status: " + response.statusCode());
System.out.println("Response: " + response.body());
}
// Método para codificar un archivo en base64
public static String encodeFileToBase64(String filePath) throws Exception {
Path path = Paths.get(filePath);
byte[] fileBytes = Files.readAllBytes(path);
return Base64.getEncoder().encodeToString(fileBytes);
}
}