Swift通过SMTP发送邮件

Swift通过SMTP发送邮件

Ty
Ty
2022-02-13 / 0 评论 / 24 阅读 / 正在检测是否收录...

前言

电子邮件是—种用电子手段提供信息交换的通信方式,最早出现在1970年左右,随着时间的推移,电子邮件成为了目前互联网应用最广的服务。前几年,苹果推出了自己的编程语言 Swift ,使用该语言的开发者也越来越多,在 Swift 应用中实现邮件发送便成为了不可逃避的问题。我们可以使用 Swift-SMTP 库来实现发送邮件的功能。

导入库

点击项目文件后选择 Package Dependencies,点击添加符号(+)。

打开Swift包管理器

在搜索框中输入 https://github.com/Kitura/Swift-SMTP/ 并回车,选择合适的版本并点击 Add Package 以导入库。

导入库

初始化

初始化一个 SMTP 服务器。

import SwiftSMTP

let smtp = SMTP(
    hostname: "smtp.gmail.com",     // SMTP server address
    email: "user@gmail.com",        // username to login
    password: "password"            // password to login
)

TLS 加密

添加以下参数:

public init(hostname: String,
            email: String,
            password: String,
            port: Int32 = 587,
            tlsMode: TLSMode = .requireSTARTTLS,
            tlsConfiguration: TLSConfiguration? = nil,
            authMethods: [AuthMethod] = [],
            domainName: String = "localhost",
            timeout: UInt = 10)

发送文字邮件

let drLight = Mail.User(name: "Dr. Light", email: "drlight@gmail.com")
let megaman = Mail.User(name: "Megaman", email: "megaman@gmail.com")

let mail = Mail(
    from: drLight,
    to: [megaman],
    subject: "主题",
    text: "内容"
)

smtp.send(mail) { (error) in
    if let error = error {
        print(error)
    }
}

添加 Cc 和 Bcc:

let roll = Mail.User(name: "Roll", email: "roll@gmail.com")
let zero = Mail.User(name: "Zero", email: "zero@gmail.com")

let mail = Mail(
    from: drLight,
    to: [megaman],
    cc: [roll],
    bcc: [zero],
    subject: "Robots should be used for the betterment of mankind.",
    text: "Any other use would be...unethical."
)

smtp.send(mail)

发送附件

创建一个附件,并将其附加到您的邮件,并通过 SMTP Handle 发送。 下面是一个示例,说明如何发送本地文件、HTML和原始数据:

// 创建一个文件类型的 `Attachment`
let fileAttachment = Attachment(
    filePath: "~/img.png",          
    // "CONTENT-ID" 让你能辨识多个附件
    additionalHeaders: ["CONTENT-ID": "img001"]
)

// 创建一个 HTML 类型的 `Attachment`
let htmlAttachment = Attachment(
    htmlContent: "<html>Here's an image: <img src=\"cid:img001\"/></html>",
    // 联系 `fileAttachment`
    related: [fileAttachment]
)

// 创建一个数据 `Attachment`
let data = "{\"key\": \"hello world\"}".data(using: .utf8)!
let dataAttachment = Attachment(
    data: data,
    mime: "application/json",
    name: "file.json",
    // 以独立的附件发送
    inline: false   
)

// 创建一个 `Mail` 并包含附件
let mail = Mail(
    from: from,
    to: [to],
    subject: "Check out this image and JSON file!",
    // 之前创建的 `Attachment`
    attachments: [htmlAttachment, dataAttachment]
)

// 发送邮件
smtp.send(mail)

/* Each type of attachment has additional parameters for further customization */

一次性发送多个邮件

let mail1: Mail = ... //此处省略
let mail2: Mail = ... //此处省略

smtp.send([mail1, mail2], //发送两个邮件

    progress: { (mail, error) in
    },
    
    completion: { (sent, failed) in
    }
)
1

评论 (0)

取消