This project provides an SMTP library.
This package builds with Swift Package Manager and is part of the Perfect project. Ensure you have installed and activated the latest Swift 4.0 tool chain.
Make sure libssl-dev was installed on Ubuntu 16.04:
sudo apt-get install libssl-dev
To use SMTP class, modify the Package.swift file and add following dependency:
.Package(url: "https://github.com/PerfectlySoft/Perfect-SMTP.git", majorVersion: 3)
Then import SMTP library into the Swift source code:
import PerfectSMTP
Perfect SMTP contains three different data structures: SMTPClient, Recipient and EMail.
SMTPClient object is a data structure to store mail server login information:
let client = SMTPClient(url: "smtp://mailserver.address", username: "[email protected]", password:"secret")
Recipient object is a data structure which store one's name and email address:
let recipient = Recipient(name: "Someone's Full Name", address: "[email protected]")
Use email object to compose and send an email. Check the following example code:
// 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 = "<h1>Hello, world!</h1><hr><img src='http://www.perfect.org/images/perfect-logo-2-0.svg'>"
// 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
}
- 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
(shares the same variable ascontent
) - 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; 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.
For better understanding, here is the brief structure of sending emails:
import PerfectSMTP
let client = SMTPClient(url: "smtp://smtp.gmx.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
}
A demo can be found here: Perfect SMTP Demo
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: smtps://smtp.gmail.com:465
, and you may need to “turn on access for less secure apps” in the google settings.*
Please check the SMTPS code below, note the only difference is the URL pattern:
import PerfectSMTP
let client = SMTPClient(url: "smtps://smtp.gmail.com:465", 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
}