Failed on using Swift to implement in-app email
Since you haven't set the current view controller as the mailComposeDelegate
of myMail
, the mailComposeController:didFinishWithResult
method isn't being called. After you init myMail
, make sure to add:
myMail.mailComposeDelegate = self
and you'll be good to go
In case anyone is looking for a non MFMailCompose option, here's what I did to send using Gmail's SMTP servers.
- Download a zip of this repo: https://github.com/jetseven/skpsmtpmessage
- Drag and drop the files under SMTPLibrary into your XCode project
- Create a new header file -
MyApp-Briding-Header.h
- Replace new header file with this:
#import "Base64Transcoder.h"#import "HSK_CFUtilities.h"#import "NSData+Base64Additions.h"#import "NSStream+SKPSMTPExtensions.h"#import "SKPSMTPMessage.h"
- Go to Project(Targets > MyApp on the left)/Build Settings/Swift Compiler - Code Generation
- Add path to header file under
Objective-C Briding Header
->Debug
(i.e.MyApp/MyApp-Bridging-Header.h
- Go to Project/Build Phases/Compile Sources
Select all .m files and click enter. Type
-fno-objc-arc
and hit enter.Use this code to send email:
var mail = SKPSMTPMessage() mail.fromEmail = "fromemail@gmail.com"mail.toEmail = "tomail@gmail.com"mail.requiresAuth = truemail.login = "fromemail@gmail.com"mail.pass = "password"mail.subject = "test subject"mail.wantsSecure = truemail.relayHost = "smtp.gmail.com"mail.relayPorts = [587]var parts: NSDictionary = [ "kSKPSMTPPartContentTypeKey": "text/plain; charset=UTF-8", "kSKPSMTPPartMessageKey": "test message",]mail.parts = [parts]mail.send()
Hope it helps someone. I didn't want to use the MFMailCompose option because I didn't want to have to prompt the user.
This is how I have composed my email with attached PDF file document.
Just to test this example you need to drag and drop a sample PDF named "All_about_tax.pdf"
@IBAction func sendEmail(sender: UIButton) { //Check to see the device can send email. if( MFMailComposeViewController.canSendMail() ) { print("Can send email.") let mailComposer = MFMailComposeViewController() mailComposer.mailComposeDelegate = self //Set to recipients mailComposer.setToRecipients(["your email id here"]) //Set the subject mailComposer.setSubject("Tax info document pdf") //set mail body mailComposer.setMessageBody("This is what they sound like.", isHTML: true) if let filePath = NSBundle.mainBundle().pathForResource("All_about_tax", ofType: "pdf") { print("File path loaded.") if let fileData = NSData(contentsOfFile: filePath) { print("File data loaded.") mailComposer.addAttachmentData(fileData, mimeType: "application/pdf", fileName: "All_about_tax.pdf") } } //this will compose and present mail to user self.presentViewController(mailComposer, animated: true, completion: nil) } else { print("email is not supported") } } func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { self.dismissViewControllerAnimated(true, completion: nil) }