Product
Ya está disponible el SDK de Mailgun para Objective-C
Este artículo fue publicado originalmente por Jay Baird en el blog sobre DevOps de Rackspace. El equipo de Rackspace ha estado utilizando Mailgun en varios proyectos (como este), y acaba de publicar un SDK de código abierto para integrar Mailgun en aplicaciones de iOS. De hecho, Jay se sienta justo detrás del equipo de Mailgun en la oficina de Rackspace de San Francisco. Hemos publicado el artículo completo aquí en nuestro blog, pero te animamos a que eches un vistazo al blog de DevOps de Rackspace para encontrar otros artículos técnicos interesantes.
Uno de mis servicios favoritos aquí en Rackspace es Mailgun, un conjunto de API que te permite enviar emails y gestionar listas de correo a través de una API REST. A la vuelta de un viaje reciente a San Antonio, decidí que iba a añadir una interfaz de Objective-C para enviar emails a través de Mailgun usando mi propia interfaz de iOS en lugar de usar el MFMailComposeViewController de Apple. Ahora esta biblioteca es de código abierto en Github y está disponible a través de Cocoapods.
Instalación
Para instalar el SDK de Mailgun, puedes usar el fantástico Cocoapods o instalarlo directamente desde el código fuente añadiendo Mailgun.(h|m) y MGMessage.(h|m) a tu proyecto de Xcode. Si prefieres realizar la instalación manualmente, también tendrás que seguir las instrucciones para instalar la biblioteca AFNetworking .
Uso del SDK de Mailgun
Actualmente, las únicas funciones de la API de Mailgun compatibles con el SDK son enviar emails, suscribirse a listas de correo y darse de baja de ellas. Me pareció que estas son las características más comunes que utilizaría cualquier desarrollador de aplicaciones, pero en el futuro se añadirán más funciones de la API de Mailgun. Puedes encontrar la documentación completa de la biblioteca en el directorio Docs de Github o en <cocoadocs.org.
Envío de un mensaje
Para enviar un mensaje rápidamente a través del SDK de Mailgun, crearemos nuestro cliente usando el método de clase clientWithDomain:apiKey: cuyos argumentos son tu dominio de Mailgun y clave de API específicos. Para este ejemplo, usaremos samples.mailgun.org y key-3ax6xnjp29jd6fds4gc373sgvjxteol0.
Mailgun *mailgun = [Mailgun clientWithDomain:@"samples.mailgun.org" apiKey:@"key-3ax6xnjp29jd6fds4gc373sgvjxteol0"];
El envío de mensajes puede hacerse de varias formas. Puedes usar el método de instancia sendMessageTo:from:subject:body para enviar rápidamente un mensaje sencillo o único como este:
[mailgun sendMessageTo:@"Jay Baird " from:@"Excited User " subject:@"Mailgun is awesome!" body:@"A unicode snowman for you! "];
También puedes construir un mensaje con más funciones mediante el objeto MGMessage. A continuación voy a crear un objeto MGMessage con la imagen de un gato como adjunto, ya que el único propósito de internet es propagar fotos de gatos, y lo enviaré mediante el SDK:
UIImage *catImage = [UIImage imageNamed:@"cat-pic-01"]; MGMessage *message = [MGMessage messageFrom:@"Excited User " to:@"Jay Baird " subject:@"Mailgun is awesome!" body:@"Mailgun is great, here is a picture of a cat."];
[message addImage:catImage withName:@”cat-pic-01″ type:PNGFileType];
Esto adjunta una UIImage al MGMessage que he creado. Los datos de la UIImage se añadirán como adjunto al mensaje.
Existe una interfaz idéntica para OS X que acepta una NSImage y un NSBitmapImageFileType.
Una vez construido nuestro mensaje, podemos añadir destinatarios mediante el método addRecipient:, añadir destinatarios CC y BCC con addCC: y addBCC: e incluso añadir etiquetas, variables y una gran cantidad de características compatibles con la API de Mailgun. Echa un vistazo al encabezado de MGMessage.h para ver todo lo que es compatible.
Para enviar este mensaje construido especialmente, puedes usar los métodos del cliente sendMessage: o el método de devolución de llamada basado en bloques sendMessage:success:failure:. Aquí usaremos este último para mostrar un mensaje al usuario cuando el MGMessage se envíe correctamente, o mostrar un error si hubo alguno.
[mailgun sendMessage:message success:^(NSString *messageId) {
NSLog(@"Message %@ sent successfully!", messageId);
} failure:^(NSError *error) {
NSLog(@"Error sending message. The error was: %@", [error userInfo]);
}];
Suscripción y baja de listas de correo
Las listas de correo de Mailgun ofrecen una forma cómoda de enviar correos a múltiples destinatarios usando una dirección de email alias. Mailgun envía una copia del mensaje mandado a la dirección alias a todos los miembros suscritos a la lista de correo. Añadir una función de suscripción y baja a tu aplicación puede ser una manera estupenda de mantener el compromiso y el contacto con tus clientes enviándoles actualizaciones y consejos periódicos. Para suscribir a un usuario a una lista de correo, usaremos el mismo cliente de Mailgun que creamos en el primer ejemplo:
Mailgun *mailgun = [Mailgun clientWithDomain:@"samples.mailgun.org" apiKey:@"key-3ax6xnjp29jd6fds4gc373sgvjxteol0"];
Para este ejemplo, he creado un AboutViewController que tiene un UITextFieldv donde el usuario puede introducir su dirección de email y pulsar un botón para suscribirse. Así es como gestiono la acción del botón de suscribirse:
UITextField *mailTextField = [[UITextField alloc] initWithFrame:CGRectZero];
[mailgun subscribeToList:@”news@sampleapp.org” email:mailTextField.text success:^{
NSLog(@”Successfully subscribed user to mailing list!”);
} failure:^(NSError *error) {
NSLog(@”There was an error while subscribing to the mailing list: %@”, [error userInfo]); }];
Los bloques de éxito y error se pueden usar para mostrar más información al usuario, hacer un seguimiento de las analíticas y mostrar u ocultar el progreso mientras el SDK realiza las llamadas a la API necesarias.
Para darse de baja, el proceso es similar. Tomamos el email de un usuario suscrito, en este caso usaremos mi dirección de email jay.baird@rackspace.com, y lo damos de baja de la lista de correo de SampleApp:
NSString *emailAddress = @"jay.baird@rackspace.com";
[mailgun unsubscribeToList:@”news@sampleapp.org” email:emailAddress success:^{
NSLog(@”Successfully removed %@ from the mailing list”, emailAddress);
} failure:^(NSError *error) {
NSLog(@”Error removing address from mailing list: %@”, [error userInfo]); }];
NOTA: Si un usuario no está suscrito a una lista de correo, este método llamará al bloque de error con un error 404. Esto es normal y debe gestionarse de forma adecuada.
Espero que esta breve introducción al nuevo SDK de Mailgun te entusiasme tanto como a mí a la hora de añadir las funciones de Mailgun a tu próximo proyecto de OS X o iOS. No dudes en hacer un fork del proyecto y contribuir, o notificar cualquier problema que encuentres en nuestra página de Github.