I am trying to set up an app with send email option.
I have this code:
import Foundation
import MessageUI
import UIKit
class emailClass: UIViewController, MFMailComposeViewControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
if !MFMailComposeViewController.canSendMail() {
print("Mail services are not available")
return
}
sendEmail()
}
func sendEmail() {
let composeVC = MFMailComposeViewController()
composeVC.mailComposeDelegate = self
// Configure the fields of the interface.
composeVC.setToRecipients(["address@example.com"])
composeVC.setSubject("Hello!")
composeVC.setMessageBody("Hello this is my message body!", isHTML: false)
// Present the view controller modally.
self.present(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.dismiss(animated: true, completion: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
So I get this message: "Mail services are not available". Now I've logged in the simulator device in iCloud... So i think it should do it but it's not. Why isn't this working? Can you tell me whats wrong and how can I move forward?
Code seems to be good and works fine if the app is running in a real device
You can't test it on simulator,You'll be able to test basic things like UI,How the things are happening on Cancel/Send button clicks.
To test,You have to use a device,The Mail application in the device should be configured with some mail(ex: abc@xyz.com).
Hope that helps.
Sending an Email is quit easy in Swift 5 you need to confirm and implement MFMailComposeViewControllerDelegate and check if we can send email on this device
Here is the tiny piece of code I was using for my task
The problem with your code is, that the
presents itself in itself ;-)
If you don´t know the current view controller, just display it on the RootViewController, i.e.
UIApplication.shared.keyWindow?.rootViewController?.present(...
It will not work with simulator. Please test it on iPhone device. You can refer Apple Developer Portal - MFMailComposeViewController
Here's how I did it. It looks like you followed the documentation very well, I thought I'd add my variation in case it helps someone else. Plus, this is a little more updated to current (Aug 2017) syntax.
Conform to the MFMailComposeViewControllerDelegate protocol, and check if the device can send mail.
My app uses an IBAction to initiate the mail composition.
About the following mailComposeController function, the documentation says
Source Apple Documentation: MFMailComposeViewController