mfmailcomposeviewcontroller.cansendmail((是正确的,gmail屏幕上有正确的收件人电子邮件ID,主题和身体。但是发送按钮已禁用。另外,当我按CANCEL按钮滑块时,请提供两个选项:删除和取消。删除不起作用,我无法从邮件作曲家回到我以前的控制器。
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文档:
如果用户选择发送消息,则该消息在 用户的邮件应用程序发箱。邮件应用程序最终负责 发送消息。
由于设备上设置了Gmail帐户,即使从设备"卸载"邮件应用程序"卸载"即使canSendMail
也将返回True。该应用程序并没有真正卸载,而是隐藏的。如果您尝试以以下方式检查该应用程序是否存在,您将获得误报。
let mailURL = URL(string: "mailto:?to=(emailAddress)")!
let canSendEmail = UIApplication.shared.canOpenURL(mailURL)
使用UIApplication.shared.open(mailURL)
打开已验证的URL会提醒您是否想重新安装应用程序。
还原"邮件"?警报
根据此回应,此问题仅存在于iOS 12或更新中。
与Swift 5。
合作良好首先,对发送电子邮件的viewController进行扩展:
import UIKit
import Foundation
import MessageUI
import LocalAuthentication
extension viewControllerThatSendsTheEmail: MFMailComposeViewControllerDelegate
{
func mailComposeController( _ controller: MFMailComposeViewController, didFinishWith result:MFMailComposeResult, error: Error?)
{
if let _ = error
{
controller.dismiss(animated: true)
return
}
switch result
{
case.cancelled:
print("CANCELLED")
case.failed:
print("FAILED")
case.saved:
print("SAVED")
case.sent:
print("EMAIL SENT")
@unknown default:
fatalError()
}
controller.dismiss(animated: true)
}
}
然后您的功能:
@objc func sendEmailButtonTap()
{
guard MFMailComposeViewController.canSendMail()
else
{
return
}
let sending = MFMailComposeViewController()
sending.mailComposeDelegate = self
sending.setToRecipients(["awesomeDeveloper@apple.com"])
sending.setSubject("AWRSOME APP")
sending.setMessageBody("THIS APP IS SO AWESOME!", isHTML: false)
present(sending, animated: true)
}