我想用我的iPhone应用程序发送一封电子邮件。我听说iOS SDK没有电子邮件API。我不想使用下面的代码,因为它将退出我的应用程序:

NSString *url = [NSString stringWithString: @"mailto:foo@example.com?cc=bar@example.com&subject=Greetings%20from%20Cupertino!&body=Wish%20you%20were%20here!"];
[[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];

那么我如何从我的应用程序发送电子邮件呢?


当前回答

MFMailComposeViewController是iPhone OS 3.0软件发布后的一种方式。您可以查看示例代码或我编写的教程。

其他回答

这里我想补充几点:

使用mailto URL在模拟器中不能作为邮件工作。应用程序未安装在模拟器上。但它在设备上确实有效。 mailto URL的长度有限制。如果URL大于4096个字符,请发送邮件。应用程序无法启动。 OS 3.0中有一个新类,可以让你在不离开应用程序的情况下发送电子邮件。请看类MFMailComposeViewController。

如果你想从你的应用程序发送电子邮件,上面的代码是唯一的方法,除非你在你的应用程序内编写自己的邮件客户端(SMTP),或者有一个服务器为你发送邮件。

例如,你可以编写你的应用程序来调用服务器上的URL,它会为你发送邮件。然后只需从代码中调用URL。

请注意,使用上面的代码,您不能向电子邮件附加任何内容,而SMTP客户端方法和服务器端方法允许您这样做。

以下是Swift版本:

import MessageUI

class YourVC: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        if MFMailComposeViewController.canSendMail() {
            var emailTitle = "Vea Software Feedback"
            var messageBody = "Vea Software! :) "
            var toRecipents = ["pj@veasoftware.com"]
            var mc:MFMailComposeViewController = MFMailComposeViewController()
            mc.mailComposeDelegate = self
            mc.setSubject(emailTitle)
            mc.setMessageBody(messageBody, isHTML: false)
            mc.setToRecipients(toRecipents)
            self.presentViewController(mc, animated: true, completion: nil)
        } else {
            println("No email account found")
        }
    }
}

extension YourVC: MFMailComposeViewControllerDelegate {
    func mailComposeController(controller: MFMailComposeViewController!, didFinishWithResult result: MFMailComposeResult, error: NSError!) {
        switch result.value {
        case MFMailComposeResultCancelled.value:
            println("Mail Cancelled")
        case MFMailComposeResultSaved.value:
            println("Mail Saved")
        case MFMailComposeResultSent.value:
            println("Mail Sent")
        case MFMailComposeResultFailed.value:
            println("Mail Failed")
        default:
            break
        }
        self.dismissViewControllerAnimated(false, completion: nil)
    }
}

MFMailComposeViewController是iPhone OS 3.0软件发布后的一种方式。您可以查看示例代码或我编写的教程。

我写了一个简单的包装器KRNSendEmail,它简化了发送电子邮件到一个方法调用。 KRNSendEmail被很好地记录并添加到CocoaPods中。 https://github.com/ulian-onua/KRNSendEmail