如何从iOS应用程序发送邮件-SWIFT

如何从iOS应用程序发送邮件-SWIFT,ios,xcode,swift,email,mfmailcomposeviewcontroller,Ios,Xcode,Swift,Email,Mfmailcomposeviewcontroller,我想从我的申请表中发送一封邮件。我正和斯威夫特一起踏出我的第一步,我已经在某一点上卡住了。我想按一下按钮打开邮件。你能告诉我怎么做按钮连接吗?我认为这应该是一种行为,但我不知道该把它写在代码上的什么地方 import UIKit import MessageUI class ViewController: UIViewController, MFMailComposeViewControllerDelegate { func sendEmail() { let mai

我想从我的申请表中发送一封邮件。我正和斯威夫特一起踏出我的第一步,我已经在某一点上卡住了。我想按一下按钮打开邮件。你能告诉我怎么做按钮连接吗?我认为这应该是一种行为,但我不知道该把它写在代码上的什么地方

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

    }
}

更改
sendmail
如下:

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

并在界面生成器中将您的按钮连接到此操作

以发送邮件,通常使用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_address@example.com"])
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)
}

向Anton Platonov添加:在请求源文件时导入MessageUI,并在为视图控制器声明类时添加协议:class FirstVC:UIViewController,MFMailComposeViewControllerDelegate{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)
}
委托方法

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

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


100%工作并经过测试

我必须删除func sndEmail()吗?@jonathan只需更改func sendmail(){line很抱歉这个愚蠢的问题,但如果是那样的话..它仍然没有works@IBActionfunc电子邮件(发件人:AnyObject){//func电子邮件(){let mailVC=MFMailComposeViewController()mailVC.mailComposeDelegate=self-mailVC.setToRecipients([])mailVC.setSubject(“电子邮件主题”)mailVC.setMessageBody(“电子邮件消息字符串”,isHTML:false)presentViewController(mailVC,动画:true,完成:nil)}@jonathan我很高兴听到,请随意接受回答谢谢你的回答。如何启用邮件服务?