0

I tried using the MFMailComposeViewController to send an email in my app.

let email = "..."

let mailComposer = MFMailComposeViewController()

mailComposer.mailComposeDelegate = self                
mailComposer.setToRecipients([email])

self.navigationController?.present(mailComposer, animated: true)

After running my app the composer screen is showing, but the cancel and send buttons are not showing. I tried many possible solution, as change tintColor in both navigationControllers. For example:

mailComposer.navigationBar.tintColor = .red

But the "issue" persists.

Any ideas?

rmaddy
  • 314,917
  • 42
  • 532
  • 579
  • try with `present(mailComposer, animated: true)` instead of `self.navigationController?.present(mailComposer, animated: true)` – Anbu.Karthik Jun 22 '18 at 11:22
  • 3
    Possible duplicate of [MFMailComposeViewController, Swift 4, Xcode 9](https://stackoverflow.com/questions/48703157/mfmailcomposeviewcontroller-swift-4-xcode-9) – Hardik Bar Jun 22 '18 at 11:27
  • Did you implement the required delegate method? – rmaddy Jun 22 '18 at 18:41

2 Answers2

1

Please try these code

class TechSupportVC: UIViewController, MFMailComposeViewControllerDelegate {
    let composeVC = MFMailComposeViewController()

override func viewDidLoad() {
    super.viewDidLoad()

    composeVC.mailComposeDelegate = self
    composeVC.setToRecipients(["desiredEmail@gmail.com"])
    composeVC.setSubject("My message")
}

func mailComposeController(_ controller: MFMailComposeViewController,
                                   didFinishWith result: MFMailComposeResult,
                                   error: Swift.Error?) {
            controller.dismiss(animated: true, completion: nil)
        }

@IBAction func sendPressed(_ sender: Any) {
    guard MFMailComposeViewController.canSendMail() else {
        showMailServiceErrorAlert()
        return
    }

    composeVC.setMessageBody("Test credentials: \(firstAndLastNameTextField.text!)\nPhone: \(numberTextField.text!)\n\n\(messageTextView.text!)", isHTML: false)

    self.present(composeVC, animated: true, completion: nil)
}
rmaddy
  • 314,917
  • 42
  • 532
  • 579
Hardik Bar
  • 1,660
  • 18
  • 27
0

mailComposeDelegate should be inherited from UIViewController. In other case dismissing MFMailComposeViewController not working and crashes. Seems like Apple bug

Vitalii Gozhenko
  • 9,220
  • 2
  • 48
  • 66