web-dev-qa-db-fra.com

comment envoyer un courrier à partir de mon application iOS- SWIFT

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()

    }
}
14
jonathan

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)
}

enter image description here

100% fonctionnel et testé

16
Mr.Javed Multani

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

13
gvuksic

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)
    }
}
9
Jaydeep

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)
}
7
iAnkit

à 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 {

1
Stalker