2016-04-25 92 views
9

我想从我的应用程序发送邮件。我正在做SWIFT的第一步,并且我坚持了一个观点。我想按下按钮并打开邮件。你能告诉我如何做按钮连接?我认为它应该是一个动作,但我不知道在哪里把它的代码如何从我的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() 

    } 
} 

回答

10

变化sendEmail这样的:

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

,并连接在Interface Builder您的按钮,这个动作

+0

我一定要删除FUNC sndEmail()? – jonathan

+0

@jonathan只是改变FUNC sendEmail(){线 – gvuksic

+0

抱歉愚蠢的问题,但是当它就是这样..它依然犯规工作 – jonathan

5

要发送邮件,一般使用MFMailComposer。它可以在设备上进行测试,因为它不适用于iOS模拟器。

为了测试邮件服务是否可用,使用下面的功能,

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

,并在你的函数或按钮的动作发送邮件,使用下面的代码。

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) 

有在发送邮件完成的委托方法,如下图所示,其可以被定义,

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

感谢您的答案。并且如何启用邮件服务? –

1

安东普拉东诺夫补充:进口MessageUI在源文件的乞讨,当你声明类为视图控制器添加协议:类FirstVC:UIViewController中,MFMailComposeViewControllerDelegate {

5

斯威夫特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) 
} 

委托方法

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

导入库第一:

import MessageUI 

组委托,如:

MFMailComposeViewControllerDelegate 

写漂亮的代码:

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

还写这样的委托方法:

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

enter image description here

100%的工作和测试

相关问题