Sending Email With Swift

43,863

Solution 1

Sure you can.

import Foundation
import UIKit
import MessageUI

class ViewController: ViewController,MFMailComposeViewControllerDelegate {

    @IBAction func sendEmailButtonTapped(sender: AnyObject) {
        let mailComposeViewController = configuredMailComposeViewController()
        if MFMailComposeViewController.canSendMail() {
            self.presentViewController(mailComposeViewController, animated: true, completion: nil)
        } else {
            self.showSendMailErrorAlert()
        }
    }

    func configuredMailComposeViewController() -> MFMailComposeViewController {
        let mailComposerVC = MFMailComposeViewController()
        mailComposerVC.mailComposeDelegate = self // Extremely important to set the --mailComposeDelegate-- property, NOT the --delegate-- property

        mailComposerVC.setToRecipients(["[email protected]"])
        mailComposerVC.setSubject("Sending you an in-app e-mail...")
        mailComposerVC.setMessageBody("Sending e-mail in-app is not so bad!", isHTML: false)

        return mailComposerVC
    }

    func showSendMailErrorAlert() {
        let sendMailErrorAlert = UIAlertView(title: "Could Not Send Email", message: "Your device could not send e-mail.  Please check e-mail configuration and try again.", delegate: self, cancelButtonTitle: "OK")
        sendMailErrorAlert.show()
    }

    // MARK: MFMailComposeViewControllerDelegate

    func mailComposeController(controller: MFMailComposeViewController!, didFinishWithResult result: MFMailComposeResult, error: NSError!) {
        controller.dismissViewControllerAnimated(true, completion: nil)

    }
}

Source Andrew Bancroft

Solution 2

Parse supports both Mailgun and Mandrill out of the box. See their documentation

You will need to write a CloudCode function, then call it from your app.

PFCloud.callFunctionInBackground("hello", withParameters:[:]) {
  (result: AnyObject!, error: NSError!) -> Void in
  if error == nil {
    // result is "Hello world!"
  }
}

Example code snippets to send mail using Mailgun.

var Mailgun = require('mailgun');
Mailgun.initialize('myDomainName', 'myAPIKey');

Mailgun.sendEmail({
  to: "[email protected]",
  from: "[email protected]",
  subject: "Hello from Cloud Code!",
  text: "Using Parse and Mailgun is great!"
}, {
  success: function(httpResponse) {
    console.log(httpResponse);
    response.success("Email sent!");
  },
  error: function(httpResponse) {
    console.error(httpResponse);
    response.error("Uh oh, something went wrong");
  }
});
Share:
43,863
Noah Barsky
Author by

Noah Barsky

Updated on July 09, 2022

Comments

  • Noah Barsky
    Noah Barsky almost 2 years

    how would you send an email with swift in an app. Like say for example your user want's to reset their password in a social media application with Parse(or not), but you don't wan't to use MessageUI because you want it to be automatic. I've done some research and found out that it can be possible with mailgun but i cannot figure out how to use it with swift and XCode 6. Can you please help me?

  • Matthias Bauch
    Matthias Bauch about 9 years
    from the question: "but you don't wan't to use MessageUI because you want it to be automatic"
  • Noah Barsky
    Noah Barsky about 9 years
    Is there a module i need to import? it is giving me errors
  • picciano
    picciano about 9 years
    var Mailgun = require('mailgun');
  • Noah Barsky
    Noah Barsky about 9 years
    I have that same code and i am still getting errors also in swift you have to use "" for a string instead of '
  • picciano
    picciano about 9 years
    No. This is a CloudCode function using Parse.com. It is a JavaScript-based language. Your question mentioned also using Parse, which is why I suggested this as an alternative. You could use Mailgun directly from your Swift code as well, but this will maintain better control over your API keys.
  • Unome
    Unome about 9 years
    This is Javascript code.
  • Unome
    Unome about 9 years
    Is there any good documentation on how to integrate Mailgun with swift? @picciano
  • Dashrath
    Dashrath over 8 years
    when using In IOS9.2 simulator ,the view crashes with message "viewServiceDidTerminateWithError" . However other questions states that this is problem with simulator only and solution will works in real devices
  • n13
    n13 about 8 years