2016-04-25 23 views
9

Desidero inviare una mail dalla mia applicazione. Sto facendo i miei primi passi con SWIFT e mi sono bloccato in un punto. Voglio premere un pulsante e aprire la posta. Puoi dirmi come si fa la connessione del pulsante? Penso che dovrebbe essere un'azione, ma non so dove metterlo sul codicecome inviare una mail dalla mia applicazione iOS- SWIFT

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

    } 
} 

risposta

10

cambiamento sendEmail come questo:

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

e collegare in Interface Builder il pulsante per questa azione

+0

devo eliminare lo sndEmail func()? – jonathan

+0

@ Jonathan basta cambiare func sendEmail() {line – gvuksic

+0

dispiace per la domanda stupida, ma quando è così .. è ancora doesnt funziona – jonathan

5

Per inviare posta, viene generalmente utilizzato MFMailComposer. Può essere testato sul dispositivo in quanto non funziona su simulatore iOS.

a verificare che il servizio di posta elettronica è disponibile o meno, utilizzare la funzione di sotto,

if !MFMailComposeViewController.canSendMail() { 
    print("Mail services are not available") 
    return 
} 

e per inviare la posta, utilizzare sotto il codice nella funzione o l'azione di pulsante.

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) 

C'è metodo delegato al termine di invio di posta elettronica che può essere definito come di seguito indicato,

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

Grazie per la risposta. E come possono essere abilitati i servizi di posta? –

1

Anton Platonov aggiungere: MessageUI importazione alla supplica del file di origine, e quando si dichiara classe per la visualizzazione del protocollo aggiuntivo del controller: class FirstVC: UIViewController, MFMailComposeViewControllerDelegate {

5

Swift 3

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

metodo delegato

class SendMailViewController: MFMailComposeViewControllerDelegate { 
    func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { 
     dismiss(animated: true, completion: nil) 
    } 
} 
1

libreria di importazione prima:

import MessageUI 

set delegato come:

MFMailComposeViewControllerDelegate 

Scrivi codice abbastanza:

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

scrivere anche come metodo delegato:

//MARK: - MFMail compose method 
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { 
    controller.dismiss(animated: true, completion: nil) 
} 

enter image description here

100% di lavoro e testati