Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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.
- Host: GitHub
- URL: https://github.com/perfectlysoft/perfect-smtp
- Owner: PerfectlySoft
- License: apache-2.0
- Created: 2017-01-01T02:52:12.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2020-07-14T22:07:52.000Z (over 4 years ago)
- Last Synced: 2024-10-06T20:32:03.929Z (3 months ago)
- Topics: perfect, server-side-swift, smtp, smtp-library, smtpclient, swift
- Language: Swift
- Homepage: https://www.perfect.org
- Size: 68.4 KB
- Stars: 22
- Watchers: 6
- Forks: 18
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Perfect - SMTP [简体中文](README.zh_CN.md)
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]")
```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 PerfectSMTPlet 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).