Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/perfectlysoft/perfect-smtp

SMTP Client for Perfect.
https://github.com/perfectlysoft/perfect-smtp

perfect server-side-swift smtp smtp-library smtpclient swift

Last synced: about 2 months ago
JSON representation

SMTP Client for Perfect.

Awesome Lists containing this project

README

        

# Perfect - SMTP [简体中文](README.zh_CN.md)



Get Involed with Perfect!



Star Perfect On Github


Stack Overflow


Follow Perfect on Twitter


Join the Perfect Slack



Swift 4.1


Platforms OS X | Linux


License Apache


PerfectlySoft Twitter


Slack Status

This project provides an SMTP library.

This package builds with Swift Package Manager and is part of the [Perfect](https://github.com/PerfectlySoft/Perfect) project.

Ensure you have installed and activated the latest Swift 4.1.1 tool chain.

## Linux Build Note

Please make sure libssl-dev was installed on Ubuntu 16.04:

```
$ sudo apt-get install libssl-dev
```

## The Best Practice

Prior to code with Perfect-SMTP, please feel free to try [SMTP command line example by curl](https://ec.haxx.se/usingcurl-smtp.html).

This command line tool can be helpful to understand the SMTP protocol and the objective server you are going to work with.

## Quick Start

To use SMTP class, please modify the Package.swift file and add following dependency:

``` swift
.package(url: "https://github.com/PerfectlySoft/Perfect-SMTP.git", from: "3.0.0")
```

Then please import SMTP library into the swift source code:

``` swift
import PerfectSMTP
```

## Data Structures

Perfect SMTP contains three different data structures: SMTPClient, Recipient and EMail.

### SMTPClient

SMTPClient object is a data structure to store mail server login information:

``` swift
let client = SMTPClient(url: "smtp://mailserver.address", username: "[email protected]", password:"secret")
```

### Recipient

Recipient object is a data structure which store one's name and email address:

``` swift
let recipient = Recipient(name: "Someone's Full Name", address: "[email protected]")
```

### EMail

Using email object to compose and send an email. Check the following example code:

``` swift
// initialize an email draft with mail connection / login info
var email = EMail(client: client)

// set the title of email
email.subject = "Mail Title"

// set the sender info
email.from = Recipient(name: "My Full Name", address: "[email protected]")

// fill in the main content of email, plain text or html
email.html = "

Hello, world!


"

// set the mail recipients, to / cc / bcc are all arrays
email.to.append(Recipient(name: "First Receiver", address: "[email protected]"))
email.cc.append(Recipient(name: "Second Receiver", address: "[email protected]"))
email.bcc.append(Recipient(name: "An invisible receiver", address: "[email protected]"))

// add attachments
email.attachments.append("/path/to/file.txt")
email.attachments.append("/path/to/img.jpg")

// send the email and call back if done.
do {
try email.send { code, header, body in
/// response info from mail server
print(code)
print(header)
print(body)
}//end send
}catch(let err) {
/// something wrong
}
```

#### Members of EMail Object

- client: SMTPClient, login info for mail server connection
- to: [Recipient], array of mail recipients
- cc: [Recipient], array of mail recipients, "copy / forward"
- bcc:[Recipient], array of mail recipients, will not appear in the to / cc mail.
- from: Recipient, email address of the current sender
- subject: String, title of the email
- attachments: [String], full path of attachments, i.e., ["/path/to/file1.txt", "/path/to/file2.gif" ...]
- content: String, mail body in text, plain text or html
- html: String, alias of `content` (share the same variable as `content`)
- text: String, set the content to plain text
- send(completion: @escaping ((Int, String, String)->Void)), function of sending email with callback.
The completion callback has three parameters, please check Perfect-CURL `performFully()` for more information:
- code: Int, mail server response code. Zero for OK.
- header: String, mail server response header string.
- body: String, mail server response body string.

## Example

A demo can be found here:
[Perfect SMTP Demo](https://github.com/PerfectExamples/Perfect-SMTP-Demo)

## Tips for SMTPS

We've received a lot of requests about google smtp examples, Thanks for @ucotta @james and of course the official Perfect support from @iamjono, this note might be helpful for building gmail applications: ⚠️*the SMTPClient url needs to be `smtps://smtp.gmail.com`, and you may need to [“turn on access for less secure apps”](https://myaccount.google.com/lesssecureapps) in the google settings.*⚠️

Please check the SMTPS code below, note the only difference is the URL pattern:

``` swift
import PerfectSMTP

let client = SMTPClient(url: "smtps://smtp.gmail.com", username: "[email protected]", password:"yourpassword")

var email = EMail(client: client)

email.subject = "a topic"
email.content = "a message"

email.cc.append(Recipient(address: "[email protected]"))

do {
try email.send { code, header, body in
/// response info from mail server
print(code)
}//end send
}catch(let err) {
/// something wrong
}
```

## Further Information
For more information on the Perfect project, please visit [perfect.org](http://perfect.org).