我执行使用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的邮件表帐户:[我的捆绑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的设备上完美运行。我遇到了类似的问题,发现Mail Composer只能在模拟器中使用iOS 9,iOS 10存在某种错误,并且在我的当前知识下在模拟器上运行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)
它解决了我的问题。
如果检查MFMailComposeViewController.canSendMail()的值,您将看到它为false。这样你的if语句中的代码就不会被执行了。要返回true,您需要在手机上启用一封电子邮件。
对我来说,this answer解决了这个问题。我在具有活动邮件帐户的真实设备上遇到了同样的问题,并将呈现视图控制器更改为
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)
@IBAction func gmailButton(_ sender: UIButton){
self.popUp()
}
func popUp(){
guard MFMailComposeViewController.canSendMail() else {
return
}
let composer = MFMailComposeViewController()
composer.mailComposeDelegate = self
composer.setToRecipients(["[email protected]"])
composer.setSubject("succes")
composer.setMessageBody("succes sent", isHTML: false)
present(composer, animated: true)
}
首先,您必须登录Gmail,然后才能使用此程序。不要忘记使用真实的设备来试试这个
您需要登录“Mail”应用程序才能展示Mail Composer。