使用 Swift 发送电子邮件 [关闭]
Posted
技术标签:
【中文标题】使用 Swift 发送电子邮件 [关闭]【英文标题】:Sending Email With Swift [closed] 【发布时间】:2015-03-10 12:17:09 【问题描述】:您将如何在应用程序中使用 swift 发送电子邮件。例如,您的用户希望使用 Parse(或不使用 Parse)在社交媒体应用程序中重置他们的密码,但您不想使用 MessageUI,因为您希望它是自动的。我做了一些研究,发现可以使用 mailgun,但我不知道如何在 swift 和 XCode 6 中使用它。你能帮我吗?
【问题讨论】:
你尝试过什么? 【参考方案1】:当然可以。
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(["nurdin@gmail.com"])
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)
来源Andrew Bancroft
【讨论】:
来自问题:“但您不想使用 MessageUI,因为您希望它是自动的” 在 ios9.2 模拟器中使用时,视图崩溃并显示消息“viewServiceDidTerminateWithError”。然而其他问题表明这只是模拟器的问题,解决方案将在真实设备中工作 看起来非常熟悉andrewcbancroft.com/2014/08/25/…【参考方案2】:Parse 支持 Mailgun 和 Mandrill 开箱即用。 见他们的documentation
您需要编写一个 CloudCode 函数,然后从您的应用程序中调用它。
PFCloud.callFunctionInBackground("hello", withParameters:[:])
(result: AnyObject!, error: NSError!) -> Void in
if error == nil
// result is "Hello world!"
使用 Mailgun 发送邮件的示例代码 sn-ps。
var Mailgun = require('mailgun');
Mailgun.initialize('myDomainName', 'myAPIKey');
Mailgun.sendEmail(
to: "email@example.com",
from: "Mailgun@CloudCode.com",
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");
);
【讨论】:
有需要导入的模块吗?它给了我错误 var Mailgun = require('mailgun'); 我有相同的代码,但我仍然在 swift 中遇到错误,您必须使用 "" 作为字符串而不是 ' 没有。这是使用 Parse.com 的 CloudCode 函数。它是一种基于 javascript 的语言。您提到的问题也使用 Parse,这就是为什么我建议将其作为替代方案。您也可以直接从您的 Swift 代码中使用 Mailgun,但这将更好地控制您的 API 密钥。 有没有关于如何将 Mailgun 与 swift 集成的好文档? @picciano以上是关于使用 Swift 发送电子邮件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.2 邮件发送中的 Swift_TransportException
MFMailComposeViewController 不会关闭 (iOS10)
如何使用 Swift 代码 (macOS) 发送电子邮件背景