Siguiendo con la guía de desarrollo para iPhone e iPad en esta ocasión revisaremos un tema de gran utilidad para compartir información: el uso del correo, a partir de la versión 3.0 del iOS esta disponible la clase MFMailComposeViewController para enviar correos desde el iPhone.

Las versiones anteriores utilizan la aplicación Mail que trae por defecto el dispositivo. En esta guía veremos como implementar la clase MFMailComposeViewController.

Explorando MFMailComposeViewController

Esta clase brinda una interface que permite administrar, editar y enviar emails. Cuenta con un formulario predefinido con los campos: subject, email recipients, body text y attachments, es decir, un formulario normal de correo.

Uno de los inconvenientes con esta clase es que no permite verificar si efectivamente el email enviado llegó a su destino. La clase se encarga de colocar los mensajes enviados en el buzón de salida de la aplicación Mail, resultando útil para el envió de emails cuando no se cuenta con conexión a la red, pero inapropiado para confirmar el envío.

Para más información sobre esta clase puedes consultar aquí.

Sent from my iOS Simulator

1. Crear un nuevo proyecto en Xcode de tipo Single View Application

2. Agregar el framework MessageUI

3. En “ViewController.h” agregar los elementos

#import <UIKit/UIKit.h>
#import <MessageUI/MessageUI.h>
#import <MessageUI/MFMailComposeViewController.h>

@interface ViewController : UIViewController

// Delegate de la clase MFMailComposeViewController
<MFMailComposeViewControllerDelegate>
{

IBOutlet UILabel *respuesta;

}

@property (nonatomic, retain) IBOutlet UILabel *respuesta;

// Verifica si esta disponible la clase MFMailComposeViewController

-(IBAction)verEditMail:(id)sender;

// Configura vista para editar y enviar un email

-(void)configurarMail;

// Ejecuta la App Mail del dispositivo

-(void)ejecutarMailApp;

@end

4. Abrir el archivo “ViewController.xib” en Interface Builder, agregar los elementos : UIButton, UILabel y relacionarlos con la App

5. Definir las siguientes funciones de “ViewController.m” en Xcode

@synthesize respuesta;

- (IBAction)verEditMail:(id)sender
{
Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
if (mailClass != nil)
{
// Verifica que este habilitada la opcion para enviar correos en el dispositivo
if ([mailClass canSendMail])
[self configurarMail];
else
[self ejecutarMailApp];
}
else
[self ejecutarMailApp];

}

// Configura vista para editar y enviar un email
- (void)configurarMail
{
MFMailComposeViewController *mailView = [[MFMailComposeViewController alloc] init];
mailView.mailComposeDelegate = self;
[mailView setSubject:@"Mejorando la Web!"];

// Destinatarios
NSArray *toRecipients = [NSArray arrayWithObject:@"[email protected]"];
NSArray *ccRecipients = [NSArray arrayWithObjects:@"[email protected]",  nil];

[mailView setToRecipients:toRecipients];
[mailView setCcRecipients:ccRecipients];

// Mensaje
NSString *emailBody = @"Un saludo a tod@s!";
[mailView setMessageBody:emailBody isHTML:NO];

[self presentModalViewController:mailView animated:YES];
[mailView release];
}

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
respuesta.hidden = NO;
// Notifica al usuario los resultados del envio
switch (result)
{
case MFMailComposeResultCancelled:
respuesta.text = @"Mensaje: cancelado";
break;
case MFMailComposeResultSaved:
respuesta.text = @"Mensaje: guardado";
break;
case MFMailComposeResultSent:
respuesta.text = @"Mensaje: enviado";
break;
case MFMailComposeResultFailed:
respuesta.text = @"Mensaje: falló";
break;
default:
respuesta.text = @"Mensaje: no enviado";
break;
}
[self dismissModalViewControllerAnimated:YES];
}

// Ejecuta la App Mail del dispositivo
-(void)ejecutarMailApp
{
NSString *recipients = @"mailto:[email protected][email protected]&subject=Mejorando la Web!";
NSString *body = @"&body=Un saludo a tod@s!";

NSString *email = [NSString stringWithFormat:@"%@%@", recipients, body];
email = [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:email]];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}

- (void)dealloc
{
[respuesta release];
[super dealloc];
}

6. Compilar y ejecutar

Si ha salido todo bien cvander tendrá que hacer un nuevo filtro en su inbox :) Cualquier inquietud sobre este tema o la guía en general no dudes en comentar.

Repositorio en GitHub : MDW-GuiaiOS03-MFMailComposeViewController