Skip to content

hsharghi/swift-resend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SwiftResend

Swift 5.7 Logo MIT License

SwiftResend is a Swift package used to communicate with the Resend email sending platform API for Server Side Swift Apps.

Setup

Add the dependency to your Package.swift:

dependencies: [
	...
	.package(url: "https://github.com/hsharghi/swift-resend.git", from: "1.0.0")
],
targets: [
    .target(name: "App", dependencies: [
        .product(name: "Resend", package: "swift-resend"),
    ]),

Register Configuration and Provider

Configure the HTTP client and the Resend client:

let httpClient = HTTPClient(...)
let resendClient = ResendClient(httpClient: httpClient, apiKey: "YOUR_API_KEY")

Usage

Email client

You can send a single email by creating a ResendEmail object and retrieving the email ID in return.

import Resend

let email: ResendEmail = .init(
    from: .init(email: "[email protected]", name: "Hadi"),
    to: ["[email protected]"],
    subject: "running xctest",
    replyTo: [
        "[email protected]",
        "[email protected]"
    ],
    text: "sending email from XCTest suit",
    headers: [
        .init(name: "X-Entity-Ref-ID", value: "234H3-44"),
        .init(name: "X-Entity-Dep-ID", value: "SALE-03"),
    ],
    attachments: [
        .init(content: .init(data: .init(contentsOf: .init(filePath: "path/to/a/file"))),
              filename: "sales.xlsx")
    ],
    tags: [
        .init(name: "priority", value: "medium"),
        .init(name: "department", value: "sales")
    ]
)

let id = try await resendClient.emails.send(email)

ResendEmail supports both text and html content.

You can send multiple emails at once by creating a ResendBatchEmail object. Attachments and Tags are not supported for batch sending. An array of email IDs will be returned.

let emails = ResendBatchEmail(...)
let ids = try await resendClient.emails.sendBatch(emails)

Retrieving Email Information

You can retrieve information about a sent email by providing the email ID.

let emailInfo = try await resendClient.emails.get(emailId: id)

Managing Audiences

Access the AudienceClient for managing audiences via the API. Refer to the Resend Audience API for complete details.

let audience = try await resendClient.audiences.create(name: "marketing")

Managing Contacts

Access the ContactClient for managing contacts via the API. Refer to the Resend Contact API for complete details.

let contactId = try await resendClient.contacts.create(audienceId: audience.id,
                                                       email: "[email protected]",
                                                       firstName: "John",
                                                       subscriptionStatus: true)

Error handling

If a request to the API fails for any reason, a ResendError is thrown. Ensure you catch errors like any other throwing function.

do {
    try await resendClient.emails.send(...)
}
catch let error as ResendError {
    print(error.message)
    print(error.suggestion)
}

APIs supported by the current SDK

  • Emails
  • Audiences
  • Contacts
  • Domains
  • API Keys

License

This package is released under the MIT license. See LICENSE for details.