如何从我的iOS应用程序发送邮件 – SWIFT

我想从我的应用程序发送邮件。 我正在使用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() } } 

像这样改变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) } 

并在“界面”构建器中将您的按钮连接到此操作

斯威夫特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%工作和测试

要发送邮件,通常使用MFMailComposer。 它可以在设备上进行测试,因为它在iOS模拟器上不起作用。

要测试邮件服务是否可用,请使用以下function,

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

并发送邮件,使用您的function或按钮操作下面的代码。

 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 {