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");
}
});
Author by
Noah Barsky
Updated on July 09, 2022Comments
-
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 about 9 yearsfrom the question: "but you don't wan't to use MessageUI because you want it to be automatic"
-
Noah Barsky about 9 yearsIs there a module i need to import? it is giving me errors
-
picciano about 9 yearsvar Mailgun = require('mailgun');
-
Noah Barsky about 9 yearsI have that same code and i am still getting errors also in swift you have to use "" for a string instead of '
-
picciano about 9 yearsNo. 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 about 9 yearsThis is Javascript code.
-
Unome about 9 yearsIs there any good documentation on how to integrate Mailgun with swift? @picciano
-
Dashrath over 8 yearswhen 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 about 8 yearsLooks very familiar andrewcbancroft.com/2014/08/25/…