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];}
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.
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];}