Unity 工具類 之 發送郵件功能的簡單封裝 SendEmailWrapper

Unity 工具類 之 發送郵件功能的簡單封裝 SendEmailWrapper

 

目錄

Unity 工具類 之 發送郵件功能的簡單封裝 SendEmailWrapper

一、簡單介紹

二、實現原理

三、注意事項

四、效果預覽

五、開通郵箱 SMTP 服務

六、代碼實現發送郵件功能

七、關鍵代碼


 

一、簡單介紹

Unity 工具類,自己整理的一些遊戲開發可能用到的模塊,單獨獨立使用,方便遊戲開發。

本節介紹,在Unity中如何使用QQ Smtp 發送郵件的。

 

二、實現原理

1、登錄 QQ 郵箱,開通 SMTP 服務

2、得到 SMTP 授權碼

3、封裝函數,發送郵件

 

三、注意事項

1、發送郵件的時候,如果附件文件太大,可能會影響發送效率,甚至會導致發送失敗

 

四、效果預覽

 

五、開通郵箱 SMTP 服務

1、登錄 QQ 郵箱

 

2、找到設置按鈕,進入設置

 

3、在設置 選中 賬戶 一欄

 

4、往下拉,找到 POP3/SMTP,點擊開啓(若已經開啓了,可以直接點擊生成授權碼)

 

5、通過密保手機,發送短信消息

 

6、之後就會生成一個授權碼,同時 SMTP 功能開啓

 

六、代碼實現發送郵件功能

1、打開 Unity,新建空工程

 

2、導入郵件附件資源

 

3、新建腳本,封裝發送郵件功能,和測試發送郵件功能

 

4、把測試發送郵件功能腳本添加到場景中

 

5、運行場景

 

 

 

七、關鍵代碼

1、SendEmailWrapper

using System;
using System.Collections;
using System.Collections.Generic;
using System.Net.Mail;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using UnityEngine;

public class SendEmailWrapper 
{
    /// <summary>
    /// 發送郵件
    /// </summary>
    /// <param name="emailFormat">郵件的格式化內容</param>
    /// <returns>true 發送成功</returns>
    public static bool SendEmail(EmailFormat emailFormat) {
        if (emailFormat == null)
        {
            Debug.LogError("EmailFormat 不能爲空 ");
            return false;
        }

        if (emailFormat.To.Count==0 || emailFormat.To == null) {
            Debug.LogError("EmailFormat 收件人不能爲空 ");
            return false;
        }

        // 創建郵件信息,設置發件人
        MailMessage mail = new MailMessage();
        mail.From = new MailAddress(emailFormat.From);

        // 添加收件方(可以是列表)
        foreach (string item in emailFormat.To)
        {
            mail.To.Add(item);

        }

        // 設置郵件主題和內容
        mail.Subject = emailFormat.Subject;
        mail.Body = emailFormat.Body;

        // 設置郵件的附件(可以是多個)
        if (emailFormat.Attachments !=null && emailFormat.Attachments.Count >0) {
            foreach (string item in emailFormat.Attachments)
            {

                mail.Attachments.Add(new Attachment(item));
            }
        }

        // 綁定開通 Smtp 服務的郵箱 Credentials登陸SMTP服務器的身份驗證
        SmtpClient smtpClient = new SmtpClient(emailFormat.SmtpClient);
        smtpClient.Credentials = new System.Net.NetworkCredential(emailFormat.From, emailFormat.AuthorizationCode) as System.Net.ICredentialsByHost;
        smtpClient.EnableSsl = true;

        // 設置相關回調
        System.Net.ServicePointManager.ServerCertificateValidationCallback =
            delegate (object s, X509Certificate certificate, X509Chain chain,SslPolicyErrors sslPolicyErrors
        ){ return true; };

        // 發送郵件
        smtpClient.Send(mail);

        Debug.Log("郵件發送成功");

        return true;
    }
}

public class EmailFormat {
    // 賬號
    public string From { get; set; }
    // 開啓 Smtp 的授權碼
    public string AuthorizationCode { get; set; }
    // 那個授權端 QQ,163,或者網易等等
    public string SmtpClient { get; set; }
    // 端口(可要可不要)
    public string Port { get; set; }
    // 郵件主題
    public string Subject { get; set; }
    // 郵件內容
    public string Body { get; set; }
    // 郵件附件
    public List<string> Attachments { get; set; }
    // 收件人
    public List<string> To { get; set; }

    public EmailFormat() {
        Attachments = new List<string>();
        To = new List<string>();
    }

}

 

2、Test_SendEmailWrapper

using System.Collections;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;

public class Test_SendEmailWrapper : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {

        
        // 線程中發送郵件,避免影響主線程
        Thread t = new Thread(SendEmail);
        t.Start();
    }

    // 發送郵件
    void SendEmail() {

        // 新建一個發件體
        EmailFormat emailFormat = new EmailFormat();

        // 郵件賬戶和授權碼,授權平臺,端口(可不要)
        emailFormat.From = "你的郵箱@qq.com";
        emailFormat.AuthorizationCode = "你的授權碼";
        emailFormat.SmtpClient = "smtp.qq.com";
        emailFormat.Port = "587";

        // 郵件主題和內容
        emailFormat.Subject = "你的郵件主題:Test Unity Send Email";
        emailFormat.Body = "你的郵件內容:Hello ,Test Unity Send Email";

        // 添加附件,可多個
        emailFormat.Attachments.Add(@"你的附件地址/Attachments/Image.png");
        emailFormat.Attachments.Add(@"Assets/Attachments/Music.mp3");
        // 附件不建議發送視頻,太大影響發送效率,可能會發送失敗
        //emailFormat.Attachments.Add(@"Assets/Attachments/Video.mp4");

        // 添加收件人,可多個
        emailFormat.To.Add("收件郵箱@qq.com");
        emailFormat.To.Add("收件郵箱@163.com");

        // 發送郵件
        SendEmailWrapper.SendEmail(emailFormat);
    }
   
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章