Objective C: Send email without leaving app Objective C: Send email without leaving app ios ios

Objective C: Send email without leaving app


Yes. Use the MFMailComposeViewController.

// From within your active view controllerif([MFMailComposeViewController canSendMail]) {    MFMailComposeViewController *mailCont = [[MFMailComposeViewController alloc] init];    mailCont.mailComposeDelegate = self;    [mailCont setSubject:@"yo!"];    [mailCont setToRecipients:[NSArray arrayWithObject:@"joel@stackoverflow.com"]];    [mailCont setMessageBody:@"Don't ever want to give you up" isHTML:NO];    [self presentViewController:mailCont animated:YES completion:nil];}// Then implement the delegate method- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {    [self dismissViewControllerAnimated:YES completion:nil];}


  1. Add MessageUI framework:

    • Click on the project
    • Select "Build Phases"
    • Expand "Link Binary With Libraries"
    • Click "+" and type "Message" to find "MessageUI" framework, then add.
  2. In current view controller add import and implement a protocol:

    #import <MessageUI/MessageUI.h> #import <MessageUI/MFMailComposeViewController.h> @interface MyViewController : UIViewController<MFMailComposeViewControllerDelegate>

Add methods:

    -(void)sendEmail {        // From within your active view controller        if([MFMailComposeViewController canSendMail]) {            MFMailComposeViewController *mailCont = [[MFMailComposeViewController alloc] init];            mailCont.mailComposeDelegate = self;        // Required to invoke mailComposeController when send            [mailCont setSubject:@"Email subject"];            [mailCont setToRecipients:[NSArray arrayWithObject:@"myFriends@email.com"]];            [mailCont setMessageBody:@"Email message" isHTML:NO];            [self presentViewController:mailCont animated:YES completion:nil];        }    }    - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {        [controller dismissViewControllerAnimated:YES completion:nil];    }


Updated for iOS 6. Please note that this uses ARC and does not use the deprecated modal view presentation:

#import <MessageUI/MessageUI.h> #import <MessageUI/MFMailComposeViewController.h> @interface MyViewController : UIViewController<MFMailComposeViewControllerDelegate>

And then the code to present the email screen:

- (IBAction)emailButtonPushed:(id)sender {    if([MFMailComposeViewController canSendMail]) {        MFMailComposeViewController *mailCont = [[MFMailComposeViewController alloc] init];        mailCont.mailComposeDelegate = self;        [mailCont setSubject:@"Your email"];        [mailCont setMessageBody:[@"Your body for this message is " stringByAppendingString:@" this is awesome"] isHTML:NO];        [self presentViewController:mailCont animated:YES completion:nil];    }}- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {    //handle any error    [controller dismissViewControllerAnimated:YES completion:nil];}