アプリ内からメールを送信

アプリ内からiPhone標準のメール機能を呼び出して、メールを送信する方法のまとめ。

『前準備』
・アプリにフレームワーク『MessageUI.framework』を追加
 

『メール機能を使用する.hで、フレームワークを呼び出す』

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

@interface DetailViewController : UITableViewController<MFMailComposeViewControllerDelegate>

 

『メール機能を使用する.m内に処理を構築』

- (void)sendMail
{
    Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
    if (mailClass != nil){
        //メールが送信できる状態か確認
        if ([mailClass canSendMail]){
            [self showComposerSheet];
        } else {
            [self showAlert:@"メールが起動出来ません":@"この機能は、メールの設定後にご使用下さい。"];
        }
    }
}

-(void) showComposerSheet {
	MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
	picker.mailComposeDelegate = self;
    
	[picker setSubject:@"メール件名"];
    
	NSString *emailBody = @"メール本文\nメール本文2";
	[picker setMessageBody:emailBody isHTML:NO];
    
	[self presentModalViewController:picker animated:YES];
}

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
	switch (result){
		case MFMailComposeResultCancelled:
			//キャンセルした場合
			break;
		case MFMailComposeResultSaved:
			//保存した場合
			break;
		case MFMailComposeResultSent:
			//送信した場合
			break;
		case MFMailComposeResultFailed:
			[self showAlert:@"メール送信失敗":@"メールの送信に失敗しました。ネットワークの設定などを確認して下さい"];
			break;
		default:
			break;
	}
	[self dismissModalViewControllerAnimated:YES];
}

-(void)showAlert:(NSString*)alertMsgTitle:(NSString*)alertMsg{
    UIAlertView *alert = [[UIAlertView alloc] init];
    alert.title = alertMsgTitle;
    alert.message = alertMsg;
    [alert addButtonWithTitle:@"OK"];
    [alert show];
}

※showAlertは、オマケです。

上記を記述後、『sendMail』を好きなタイミングで呼び出せば、メール送信の画面がアプリ内に展開されます。