Je souhaite envoyer un mail depuis ma candidature. Je fais mes premiers pas avec Swift et je suis bloqué à un moment donné. Je veux appuyer sur un bouton et ouvrir le courrier. Pouvez-vous me dire comment faire la connexion du bouton? I pense que ce devrait être une action mais je ne sais pas où le mettre sur le code
import UIKit
import MessageUI
class ViewController: UIViewController, MFMailComposeViewControllerDelegate {
func sendEmail() {
let mailVC = MFMailComposeViewController()
mailVC.mailComposeDelegate = self
mailVC.setToRecipients([])
mailVC.setSubject("Subject for email")
mailVC.setMessageBody("Email message string", isHTML: false)
presentViewController(mailVC, animated: true, completion: nil)
}
// MARK: - Email Delegate
func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) {
controller.dismissViewControllerAnimated(true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
Importez d'abord la bibliothèque:
import MessageUI
définir le délégué comme:
MFMailComposeViewControllerDelegate
Écrivez un joli code:
@IBAction func buttonHandlerSendEmail(_ sender: Any) {
let mailComposeViewController = configureMailComposer()
if MFMailComposeViewController.canSendMail(){
self.present(mailComposeViewController, animated: true, completion: nil)
}else{
print("Can't send email")
}
}
func configureMailComposer() -> MFMailComposeViewController{
let mailComposeVC = MFMailComposeViewController()
mailComposeVC.mailComposeDelegate = self
mailComposeVC.setToRecipients([self.textFieldTo.text!])
mailComposeVC.setSubject(self.textFieldSubject.text!)
mailComposeVC.setMessageBody(self.textViewBody.text!, isHTML: false)
return mailComposeVC
}
Écrivez également la méthode déléguée comme:
//MARK: - MFMail compose method
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
controller.dismiss(animated: true, completion: nil)
}
100% fonctionnel et testé
changez sendEmail
comme ceci:
@IBAction func sendEmail(sender: AnyObject) {
let mailVC = MFMailComposeViewController()
mailVC.mailComposeDelegate = self
mailVC.setToRecipients([])
mailVC.setSubject("Subject for email")
mailVC.setMessageBody("Email message string", isHTML: false)
presentViewController(mailVC, animated: true, completion: nil)
}
et connectez dans le générateur d'interface votre bouton à cette action
Swift
let composer = MFMailComposeViewController()
if MFMailComposeViewController.canSendMail() {
composer.mailComposeDelegate = self
composer.setToRecipients(["Email1", "Email2"])
composer.setSubject("Test Mail")
composer.setMessageBody("Text Body", isHTML: false)
present(composer, animated: true, completion: nil)
}
Méthode déléguée
class SendMailViewController: MFMailComposeViewControllerDelegate {
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
dismiss(animated: true, completion: nil)
}
}
Pour envoyer du courrier, MFMailComposer est généralement utilisé. Il peut être testé sur l'appareil car il ne fonctionne pas sur le simulateur iOS.
Pour tester si le service de messagerie est disponible ou non, utilisez la fonction ci-dessous,
if !MFMailComposeViewController.canSendMail() {
print("Mail services are not available")
return
}
et pour envoyer du courrier, utilisez le code ci-dessous dans votre fonction ou action de bouton.
let composeVC = MFMailComposeViewController()
composeVC.mailComposeDelegate = self
// Configure the fields of the interface.
composeVC.setToRecipients(["[email protected]"])
composeVC.setSubject("Hello World!")
composeVC.setMessageBody("Hello from iOS!", isHTML: false)
// Present the view controller modally.
self.presentViewController(composeVC, animated: true, completion: nil)
Il existe une méthode déléguée à la fin de l'envoi du courrier qui peut être définie comme indiqué ci-dessous,
func mailComposeController(controller: MFMailComposeViewController,
didFinishWithResult result: MFMailComposeResult, error: NSError?) {
// Check the result or perform other tasks.
// Dismiss the mail compose view controller.
controller.dismissViewControllerAnimated(true, completion: nil)
}
à Anton Platonov, ajoutez: importez MessageUI au début de votre fichier source, et lorsque vous déclarez la classe pour votre contrôleur de vue, ajoutez le protocole: class FirstVC: UIViewController, MFMailComposeViewControllerDelegate {