
iOSアプリの中で、ユーザーにメールを送ってもらいたいときに便利なのが「MessageUI」フレームワークです。
問い合わせフォームやフィードバック機能など、「アプリ内からメール送信を可能にしたい」というニーズは多くあります。
MessageUIを使えば、iOSの標準メール送信画面を簡単に呼び出せて、送信内容の自動入力まで行えます。
この記事では、MessageUIの基本的な意味や使い方、主要なプロパティや引数をわかりやすく丁寧に解説します。
MessageUIとは?
MessageUIとは、Appleが提供する「メール送信UI」をアプリ内で簡単に呼び出すためのUIKitフレームワークです。
このフレームワークを使うことで、ユーザーが自分のiPhoneに設定しているメールアカウントを使って、アプリから直接メールを送ることができます。
SwiftUIでは直接MessageUIを呼び出すことはできませんが、UIKitの MFMailComposeViewController を UIViewControllerRepresentable を通じてラップすることで、SwiftUIでも利用可能です。
具体例:アプリから問い合わせメールを送る
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import SwiftUI import MessageUI struct MailView: UIViewControllerRepresentable { @Environment(\.presentationMode) var presentation var recipient: String var subject: String var messageBody: String class Coordinator: NSObject, MFMailComposeViewControllerDelegate { var parent: MailView init(parent: MailView) { self.parent = parent } func mailComposeController( _ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error? ) { controller.dismiss(animated: true) { self.parent.presentation.wrappedValue.dismiss() } } } func makeCoordinator() -> Coordinator { Coordinator(parent: self) } func makeUIViewController(context: Context) -> MFMailComposeViewController { let vc = MFMailComposeViewController() vc.setToRecipients([recipient]) vc.setSubject(subject) vc.setMessageBody(messageBody, isHTML: false) vc.mailComposeDelegate = context.coordinator return vc } func updateUIViewController(_ uiViewController: MFMailComposeViewController, context: Context) {} } |

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
struct ContentView: View { @State private var isShowingMailView = false var body: some View { Button("お問い合わせメールを送る") { isShowingMailView = true } .sheet(isPresented: $isShowingMailView) { MailView( recipient: "support@example.com", subject: "アプリへの問い合わせ", messageBody: "以下にお問い合わせ内容を記載してください。" ) } } } |
この「問い合わせメールを送る」をタップすると上記のようなメール送信画面が立ち上がります(プレビュー等ではエラーになるので実機で試しましょう!)

このように、ユーザーがタップするだけでメール送信画面が立ち上がり、事前に宛先・件名・本文を設定しておくことができます。
主要なメソッドとプロパティ
MFMailComposeViewController は以下のメソッドで送信内容を設定します。
| メソッド名 | 概要 |
|---|---|
setToRecipients([String]) |
宛先メールアドレスを指定 |
setSubject(String) |
件名を指定 |
setMessageBody(String, isHTML: Bool) |
メール本文を設定(HTMLかどうかも選べる) |
addAttachmentData(Data, mimeType: String, fileName: String) |
添付ファイルを追加可能 |
さらに、送信後のイベントを検知するには mailComposeDelegate を使います。
Delegate(デリゲート)は次のような送信結果を受け取れます:
.sent: メールが送信された.saved: 下書きとして保存された.cancelled: キャンセルされた.failed: 送信に失敗した
活用シーン
MessageUIは以下のような場面で特に活躍します。
- アプリ内からのお問い合わせフォーム(開発者宛ての質問受付)
- 不具合報告やスクリーンショット付きのメール送信
- フィードバック募集(改善点・提案など)
- アプリのサポート対応用テンプレート
ユーザーが使い慣れた標準メールUIを利用できるため、使い方がわかりやすく、スパム防止にもなります。
注意点
このように便利なMessageUIですが、使う際には次の点に注意が必要です。
MFMailComposeViewController.canSendMail()を事前にチェックして、メール送信が可能か確認する- プレビューやシミュレータではメール送信機能は使えません(iPhone実機でのみ動作)
- メール送信のためには、ユーザーのiOS標準「メール」アプリにアカウントが設定されている必要があります(ない場合はアラートを出す等の工夫が必要です)
まとめ
今回は、MessageUIフレームワークと MFMailComposeViewController の使い方について詳しく解説しました。
- MessageUIは、アプリ内からメールを送信するためのフレームワーク
- 宛先や件名、本文、添付ファイルを簡単に設定できる
- SwiftUIでもUIKitのラッパーを使えば簡単に組み込み可能
- 問い合わせフォーム、フィードバック受付、不具合報告など多くの場面で活用できる
- メールアカウントが設定されているiOS端末でのみ利用可能
アプリにメール送信機能を追加したいときは、MessageUIが非常に便利な選択肢となります。
ユーザーにとっても自然なUIで、問い合わせ対応やフィードバック収集をスムーズに行えるようになります。
ぜひ導入してみてくださいね!
