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

jon*_*an 14 email xcode ios swift mfmailcomposeviewcontroller

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

    }
}
Run Code Online (Sandbox Code Playgroud)

Mr.*_*ani 15

首先导入库:

import MessageUI
Run Code Online (Sandbox Code Playgroud)

设置委托像:

MFMailComposeViewControllerDelegate
Run Code Online (Sandbox Code Playgroud)

写漂亮的代码:

 @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
}
Run Code Online (Sandbox Code Playgroud)

也写代理方法,如:

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

在此输入图像描述

100%工作和测试


gvu*_*sic 13

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)
}
Run Code Online (Sandbox Code Playgroud)

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


Jay*_*eep 9

斯威夫特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)
}
Run Code Online (Sandbox Code Playgroud)

委托方法

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


iAn*_*kit 7

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

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

if !MFMailComposeViewController.canSendMail() {
    print("Mail services are not available")
    return
}
Run Code Online (Sandbox Code Playgroud)

并发送邮件,使用您的功能或按钮操作下面的代码.

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)
Run Code Online (Sandbox Code Playgroud)

完成发送邮件时有委托方法,可以定义如下,

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)
}
Run Code Online (Sandbox Code Playgroud)