当前位置:首页 » 《随便一记》 » 正文

iOS 发送邮件SKPSMTPMessage_张璟冰的博客

15 人参与  2022年03月24日 12:17  分类 : 《随便一记》  评论

点击全文阅读


【前提分析】
小编在做毕业设计 ,因为没有服务端,所有的功能由客户端实现。这时候小编接到了一个需求 就是需要邮件发送验证码。
【需求分析】
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]

显示的标题就正常了。
在这里插入图片描述


点击全文阅读


本文链接:http://zhangshiyu.com/post/36615.html

邮箱  发件人  桥接  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1