私はMFMailComposeViewController
を使用してメッセージを送信する標準機能を実行します。
私のコード:
if MFMailComposeViewController.canSendMail()
{
let mail = MFMailComposeViewController()
mail.mailComposeDelegate = self
mail.setToRecipients(["[email protected]"])
mail.setSubject("Subject")
mail.setMessageBody("Some Text", isHTML: false)
self.presentViewController(mail, animated: true, completion: nil)
}
コントローラーが開かず、コンソールに一度も見たことのないメッセージが表示されます。
[MC]バンドルIDのメールシートアカウントのフィルタリング:[My Bundle ID]、ソースアカウント管理:1
[MC]結果:いいえ
助けてください。
アプリケーションをテストしようとするデバイスにメールアカウントが設定されている場合、問題はありません。メールアカウントを作成してください。
Swift 3.0.1-4.2互換の場合
if MFMailComposeViewController.canSendMail()
{
let mail = MFMailComposeViewController()
mail.mailComposeDelegate = self
mail.setToRecipients(["[email protected]"])
mail.setSubject("Subject")
mail.setMessageBody("Some Text", isHTML: false)
self.present(mail, animated: true, completion: nil)
}
iOS 10.1.1を使用したデバイスでは完全に機能しますが、同じエラーが発生しました。同様の問題があり、メールComposerはシミュレーターのiOS 9でしか機能しないことがわかりました。iOS10で何らかのバグがあり、シミュレーターで現在の知識でMail Composerを実行しています。
アップデート iOS 11.4搭載のデバイスでもテストし、同じ結果を得ました。
シミュレーターでメールを開くためにこれらの呼び出しを試みましたが、機能しませんでした。動作しますが、実際のデバイスでは問題なく動作します。
UIApplication.shared.keyWindow?.rootViewController?.present(mail, animated: true)
self.navigationController?.present(mail, animated: true, completion: nil)
同じ問題がありました。プレゼンターとつながりました。
UINavigationControllerからMFMailComposeViewControllerを提示する必要があります。これを試して:
self.navigationController.presentViewController(mail, animated: true, completion: nil)
それは私の問題を解決しました。
私にとって この答え は問題を解決しました。メールアカウントがアクティブな実際のデバイスで同じ問題が発生し、表示するビューコントローラーを
let mailComposeViewController = MFMailComposeViewController()
mailComposeViewController.mailComposeDelegate = self
mailComposeViewController.setToRecipients([address])
mailComposeViewController.setMessageBody(message, isHTML: false)
mailComposeViewController.setSubject(subject)
UIApplication.shared.keyWindow?.rootViewController?.present(mailComposeViewController, animated: true)
MFMailComposeViewController.canSendMail()の値を確認すると、それがfalseであることがわかります。 ifステートメント内のコードが実行されないようにするためです。また、trueを返すには、携帯電話で1つのメールを有効にする必要があります。
Mail Composerを表示するには、「Mail」アプリにログインする必要があります。