用于 Mailgun、SendGrid 或 SMTP 等多种邮件服务的邮件包装器
只需将以下行添加到您的 Package.swift
文件中。
.package(url: "https://github.com/LiveUI/MailCore.git", .branch("master"))
用法非常简单!
首先创建您的客户端配置
let config = Mailer.Config.mailgun(key: "{mailgunApi}", domain: "{mailgunDomain}", region: "{mailgunRegion}")
let config = Mailer.Config.sendGrid(key: "{sendGridApiKey}")
使用 SMTP
结构体作为处理 SMTP 服务器的句柄
let smtp = SMTP(hostname: "smtp.gmail.com", // SMTP server address
email: "user@gmail.com", // username to login
password: "password") // password to login
let config = Mailer.Config.smtp(smtp)
SMTP
结构体的所有参数
let smtp = SMTP(hostname: String,
email: String,
password: String,
port: Int32 = 465,
useTLS: Bool = true,
tlsConfiguration: TLSConfiguration? = nil,
authMethods: [AuthMethod] = [],
accessToken: String? = nil,
domainName: String = "localhost",
timeout: UInt = 10)
let config = Mailer.Config.smtp(smtp)
在您的应用程序的 configure
方法中注册并配置服务。
Mailer(config: config, registerOn: &services)
Mailer.Config
是一个 enum
,您可以从中选择要使用的任何集成服务
let mail = Mailer.Message(from: "admin@liveui.io", to: "bobby.ewing@southfork.com", subject: "Oil spill", text: "Oooops I did it again", html: "<p>Oooops I did it again</p>")
return try req.mail.send(mail).flatMap(to: Response.self) { mailResult in
print(mailResult)
// ... Return your response for example
}
Mailcore 提供了一个 MailCoreTestTools
框架,您可以将其导入到您的测试中以获取 MailerMock
。
要注册并可能覆盖任何现有的“真实” Mailer 服务,只需使用您的服务初始化 MailerMock
。
// Register
MailerMock(services: &services)
// Retrieve in your tests
let mailer = try! req.make(MailerService.self) as! MailerMock
MailerMock
将存储上次使用的结果以及收到的消息和请求。 moct 的结构如下所示
public class MailerMock: MailerService {
public var result: Mailer.Result = .success
public var receivedMessage: Mailer.Message?
public var receivedRequest: Request?
// MARK: Initialization
@discardableResult public init(services: inout Services) {
services.remove(type: Mailer.self)
services.register(self, as: MailerService.self)
}
// MARK: Public interface
public func send(_ message: Mailer.Message, on req: Request) throws -> Future<Mailer.Result> {
receivedMessage = message
receivedRequest = req
return req.eventLoop.newSucceededFuture(result: result)
}
public func clear() {
result = .success
receivedMessage = nil
receivedRequest = nil
}
}
加入我们的 Slack,频道 #help-boost 来... 嗯,获得帮助 :)
Einstore 的核心包,这是一个完全开源的、用 Swift 编写的企业应用商店!
我们热爱 PR,多多益善... 因此,如果您有有趣的改进、错误修复或新功能,请不要犹豫与我们联系。 如果您在开始开发之前不确定某些事情,您可以随时通过我们的 Slack 联系我们的开发和产品团队。
Ondrej Rafaj (@rafiki270 在 Github, Twitter, LiveUI Slack 和 Vapor Slack)
MIT 许可证,请参阅 LICENSE 文件了解更多详情。