Je fais la fonctionnalité standard d'envoyer des messages avec MFMailComposeViewController
.
Mon code:
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)
}
Le contrôleur ne s'ouvre pas et je vois dans la console un message que je n'ai jamais vu.
[MC] Filtrage des comptes de feuille de courrier pour l'ID de l'ensemble: [ID de mon ensemble], gestion du compte source: 1
[MC] Résultat: NO
Aidez-moi, s'il vous plaît.
Si un compte de messagerie a été défini sur le périphérique où vous essayez de tester votre application, il n'y a pas de problème. Merci de créer un compte mail.
Pour Compatible 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)
}
J'ai eu la même erreur même si cela fonctionne parfaitement sur mon appareil avec iOS 10.1.1 .. J'ai eu un problème similaire et j'ai constaté que Mail Composer ne fonctionnerait que sur iOS 9 dans le simulateur, de bug avec iOS 10 et d’exécuter Mail Composer sur le simulateur avec mes connaissances actuelles.
Mise à jour J'ai également testé cela avec un appareil doté d'iOS 11.4 et obtenu les mêmes résultats.
J'ai essayé ces appels pour ouvrir le courrier sur le simulateur et ils ne fonctionnaient pas. Bien que fonctionnent, ils fonctionnent bien sur un appareil réel.
UIApplication.shared.keyWindow?.rootViewController?.present(mail, animated: true)
self.navigationController?.present(mail, animated: true, completion: nil)
Avait le même problème . Il était connecté avec le présentateur.
Vous devez présenter MFMailComposeViewController de UINavigationController . Essayez ceci:
self.navigationController.presentViewController(mail, animated: true, completion: nil)
Cela a résolu mon problème.
Si vous vérifiez la valeur de MFMailComposeViewController.canSendMail (), vous verrez qu'elle est fausse. Pour que le code à l'intérieur de votre déclaration if ne soit pas exécuté… .. Et pour retourner true, vous devez activer un email sur votre téléphone mobile.
Pour moi cette réponse a résolu le problème. J'ai eu le même problème sur un appareil réel avec des comptes de messagerie actifs et j'ai changé le contrôleur
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)