Swiftpack.co - Package - Mikroservices/Smtp

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.


:email: SMTP protocol support for the Vapor web framework.


Build Status Swift 5.2 Vapor 4 Swift Package Manager Platforms OS X | Linux

:email: SMTP protocol support for the Vapor web framework.

This framework has dependencies only to Vapor and SwiftNIO packages. SwiftNIO support was inspired by Apple examples: Swift NIO examples.


  • ☑ Vapor provider/service
  • ☑ SwiftNIO Support
  • ☑ Text/HTML
  • ☑ Attachments
  • ☑ SSL/TLS (when connection starts)
  • ☑ STARTTLS support
  • ☑ Multiple recipients & CC
  • ☑ Reply to
  • ☐ BCC fields
  • ☐ Multiple emails sent at the same time

Getting started

You need to add library to Package.swift file:

  • add package to dependencies:
.package(url: "https://github.com/Mikroservices/Smtp.git", from: "2.0.0")
  • and add product to your target:
.target(name: "App", dependencies: [
    .product(name: "Vapor", package: "vapor"),
    .product(name: "Smtp", package: "Smtp")

Set the SMTP server configuration (e.g. in main.swift file).

import Smtp

var env = try Environment.detect()
try LoggingSystem.bootstrap(from: &env)

let app = Application(env)
defer { app.shutdown() }

app.smtp.configuration.host = "smtp.server"
app.smtp.configuration.username = "johndoe"
app.smtp.configuration.password = "passw0rd"
app.smtp.configuration.secure = .ssl

try configure(app)
try app.run()

Using SMTP client.

let email = Email(from: EmailAddress(address: "john.doe@testxx.com", name: "John Doe"),
                  to: [EmailAddress(address: "ben.doe@testxx.com", name: "Ben Doe")],
                  subject: "The subject (text)",
                  body: "This is email body.")

request.smtp.send(email).map { result in
    switch result {
    case .success:
        print("Email has been sent")
    case .failure(let error):
        print("Email has not been sent: \(error)")

Also you can send emails directly via application class.

app.smtp.send(email).map { result in


You can use logHandler to handle and print all messages send/retrieved from email server.

request.smtp.send(email) { message in
}.map { result in


After cloning the repository you can open it in Xcode.

$ git clone https://github.com/Mikroservices/Smtp.git
$ cd Smtp
$ open Package.swift

You can build and run tests directly in Xcode.


Unit (integration) tests requires correct email credentials. Credentials are not check-in to the repository. If you want to run unit tests you have to use your mailtrap account and/or other email provider credentials.

All you need to do is replacing the configuration section in Tests/SmtpTests/SmtpTests.swift file.


This project is licensed under the terms of the MIT license.


Stars: 21
Last commit: 6 days ago


Add second HELLO after TLS handshake - 2020-09-16T15:51:41

Some SMTP servers (e.g. smtp.office365.com ) require a second handshake after the initial start of the tls connection.