使用 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

Swift - 关闭警报消息关闭视图控制器

MFMailComposeViewController 不会关闭 (iOS10)

如何使用 Swift 代码 (macOS) 发送电子邮件背景

使用 Swift Mailer、GMail 和 PHP 发送电子邮件,权限被拒绝错误

想要使用 Swift 3.0 发送自定义电子邮件,即来自 firebase 的欢迎邮件