iOS 发送邮件SKPSMTPMessage

Posted 闽江小张

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 发送邮件SKPSMTPMessage相关的知识,希望对你有一定的参考价值。

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

显示的标题就正常了。

以上是关于iOS 发送邮件SKPSMTPMessage的主要内容,如果未能解决你的问题,请参考以下文章

如何在iOS5中发送电子邮件到后台的收据?

iPhone- 使用 SKPSMTPMessage 的应用程序崩溃

在 iOS 5 中发送电子邮件时出错

SKPSMTPMessage 中没有硬编码的“fromEmail”(发件人)

为啥这个使用 SKPSMTPMessage 的应用程序被拒绝了?

如何使用 skpsmtpmessage 正确附加 plist 文件?