Failed on using Swift to implement in-app email Failed on using Swift to implement in-app email swift swift

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.

  1. Download a zip of this repo: https://github.com/jetseven/skpsmtpmessage
  2. Drag and drop the files under SMTPLibrary into your XCode project
  3. Create a new header file - MyApp-Briding-Header.h
  4. Replace new header file with this:
#import "Base64Transcoder.h"#import "HSK_CFUtilities.h"#import "NSData+Base64Additions.h"#import "NSStream+SKPSMTPExtensions.h"#import "SKPSMTPMessage.h"
  1. Go to Project(Targets > MyApp on the left)/Build Settings/Swift Compiler - Code Generation
  2. Add path to header file under Objective-C Briding Header -> Debug (i.e. MyApp/MyApp-Bridging-Header.h
  3. Go to Project/Build Phases/Compile Sources
  4. Select all .m files and click enter. Type -fno-objc-arc and hit enter.

  5. 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)    }