• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

iOS 发送邮件SKPSMTPMessage

武飞扬头像
闽江小张
帮助1

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

显示的标题就正常了。
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhibchje
系列文章
更多 icon
同类精品
更多 icon
继续加载