【前提分析】
小编在做毕业设计 ,因为没有服务端,所有的功能由客户端实现。这时候小编接到了一个需求 就是需要邮件发送验证码。
【需求分析】
1、如何使用客户端发送邮件。
2、如何发送验证码?
这时候小编拿到需求的时候,🫀一个挖槽,服务端需求客户端实现。怎么搞???好在作为一个面向搜索引擎开发的工程师来说百度了一波。找到了iOS开发可以使用SKPSMTPMessage
进行邮件发送。
使用SKPSMTPMessage
步骤(由于网上很多ObjectiveC的使用,这边小编采用Swift完成)
【使用步骤】
一、cocoapod 中添加三方库
pod 'skpsmtpmessage'
如果使用的是swift 的话需要由桥接文件。并且在桥接文件中使用SKPSMTPMessage
库
桥接文件我们以工程名-Bridgin-Header.h
并且在桥接文件中import 我们的三方库
#import <skpsmtpmessage/SKPSMTPMessage.h>
如图:
检查一下桥接文件是否被添加到项目中了。
在Build Setting
中搜索Objective-C Bridging Header
看看后面的路径是否为该桥接文件的路径。
二、编写代码
新建一个MailboxViewController
的VC
把下面代码复制到自己的VC里面去就可以使用
import Foundation
import MessageUI
class MailboxViewController: UIViewController, SKPSMTPMessageDelegate{
override func viewDidLoad() {
super.viewDidLoad()
initUI()
}
//初始化UI
func initUI() {
self.view.backgroundColor = .white
let btn = UIButton.init(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
btn.backgroundColor = .yellow
btn.addTarget(self, action: #selector(aa), for: .touchUpInside)
self.view.addSubview(btn)
}
@objc func aa() {
let emailServer = SKPSMTPMessage()
emailServer.delegate = self
emailServer.fromEmail = "610904360@qq.com" //发件人邮箱
emailServer.toEmail = "610904360@qq.com" //收件人邮箱"
emailServer.login = "610904360@qq.com" //发件人邮箱账号
emailServer.pass = "xxxxxxxxxxxxxxx" //密码或者授权码
/* Notice: 填好SMTP的服务器,第二步已经记录好了 */
emailServer.relayHost = "smtp.qq.com"
emailServer.requiresAuth = true
emailServer.wantsSecure = true//是否用ssl
emailServer.subject = "校园易宝验证码"
let messageContent = "邮件内容"
let messagePart = [kSKPSMTPPartContentTypeKey: "text/plain",
kSKPSMTPPartMessageKey: messageContent]
emailServer.parts = [messagePart]
emailServer.send()
}
//MARK:SKPSMTPMessageDelegate
func messageSent(_ message: SKPSMTPMessage!) {
print("发送成功,请查收!")
}
//MARK:SKPSMTPMessageDelegate
func messageFailed(_ message: SKPSMTPMessage!, error: Error!) {
print("\(error.localizedDescription)")
}
}
⚠️必须修改
fromEmail = "610904360@qq.com" //发件人邮箱
toEmail = "610904360@qq.com" //收件人邮箱"
login = "610904360@qq.com" //发件人邮箱账号
pass = "xxxxxxxxxxxxxxx" //密码或者授权码
授权码如何拿到?(以QQ邮箱为例)QQ->什么是授权码,它又是如何设置?
开启SMTP服务,并且生成授权码。这时候的授权吗就是给pass的值了
三、问题
【坑点】
在测试的时候 我的标题为中文,但是中文发送的时候,接收方会产生乱码。乱码内容为:???????
emailServer.subject = "校园易宝验证码"
【解决方法】
找到SKPSMTPMessage.m
这个类,在SKPSMTPMessage.m的sendParts里:
NSData *messageData = [message dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]
我们将上边这一句改为
NSData *messageData = [message dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]
显示的标题就正常了。