MFMailComposeViewController.canSendMail()为true,gmail屏幕显示正确的收件人电子邮件ID,主题和正文。但是发送按钮被禁用。此外,当我按下取消按钮滑块时,会出现两个选项:删除和取消。删除不起作用,我无法从邮件编辑器返回到我以前的控制器。
Gmail已在我的iphone上设置并且运行正常。我无法弄清楚出了什么问题,有人可以帮忙吗?
MFMailComposeViewController.canSendMail() {
if (selectedEntry!.notifyType == "Email") {
let mailComposeVC = MFMailComposeViewController()
mailComposeVC.mailComposeDelegate = self
let target:String = (selectedEntry?.targetString)!
mailComposeVC.setToRecipients([target])
mailComposeVC.setSubject("Test")
mailComposeVC.setMessageBody("Hello ", isHTML: false)
// present the message view controller
self.present(mailComposeVC, animated: true, completion: nil)
}
} else {
print("MAIL services are not available")
return
}
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?)
{
switch (result)
{
case .sent:
print("email sent.")
break
case .cancelled:
print("email cancelled.")
break
case .failed:
print("failed sending email")
break
default:
break
}
controller.dismiss(animated: true, completion: nil)
}
不幸的是,MFMailComposeViewController
由本机邮件应用程序提供支持。取自Apple documentation:
如果用户选择发送消息,则消息将在用户的“邮件”应用程序发件箱中排队。 Mail应用程序最终负责发送消息。
由于设备上已设置Gmail帐户,因此即使邮件应用程序已从设备“卸载”,canSendMail
也会返回true。该应用程序并未真正卸载,但已隐藏。如果您尝试以下列方式检查应用程序是否存在,则会出现误报。
let mailURL = URL(string: "mailto:?to=\(emailAddress)")!
let canSendEmail = UIApplication.shared.canOpenURL(mailURL)
使用UIApplication.shared.open(mailURL)
打开经过验证的网址会显示一条警告,询问您是否要重新安装该应用。
根据this response,此问题仅存在于iOS 12或更新版本中。