【问题标题】:how to send a mail from my iOS application- SWIFT如何从我的 iOS 应用程序发送邮件 - SWIFT
【发布时间】:2016-04-25 10:37:59
【问题描述】:

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

    }
}

【问题讨论】:

    标签: ios xcode swift email mfmailcomposeviewcontroller


    【解决方案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)
    }
    

    100% 工作和测试

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我必须删除 func sndEmail() 吗?
      • @jonathan 只需更改 func sendEmail() { 行
      • 抱歉这个愚蠢的问题,但是当它是那样的时候......它仍然不起作用
      • @IBAction func email(sender: AnyObject) { //func email() { 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) }
      • @jonathan 我很高兴听到,欢迎接受回答
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        发送邮件,一般使用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)
        }
        

        【讨论】:

        • 感谢您的回答。以及如何启用邮件服务?
        【解决方案5】:

        向 Anton Platonov 添加:在请求源文件时导入 MessageUI,并在为视图控制器声明类时添加协议:class FirstVC: UIViewController, MFMailComposeViewControllerDelegate{

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-10-18
          • 1970-01-01
          • 2017-08-01
          • 2010-12-20
          • 2010-09-26
          • 2011-01-12
          相关资源
          最近更新 更多