Unity如何发送Email邮件

在Unity中实现无需登录邮箱发送邮件功能
发送邮件需要提供发送所使用的邮箱,以QQ邮箱为例
本文已详细介绍操作流程,按步骤进行即可
点击下载:邮件发送工程文件

一、前提

  • 登录QQ邮箱,开通SMTP服务
  • 得到SMTP授权码
  • 封装函数,发送邮件

二、注意事项

  • 发送邮件的时候,如果附件文件太大,可能会影响发送效率,甚至会导致发送失败

三、开通邮箱SMTP服务

  1. 登录(QQ)邮箱

  2. 找到设置,点击进入在这里插入图片描述

  3. 在设置中选择账户在这里插入图片描述

  4. 往下拉,找到 POP3/SMTP,点击开启(若已经开启了,可以直接点击生成授权码)在这里插入图片描述

  5. 通过密保手机,发送短信验证在这里插入图片描述

  6. 之后会生成一个授权码,同时SMTP服务已开启
    注意:
    授权码只会出现一次,请妥善保管
    可以拥有多个授权码
    在这里插入图片描述

四、上代码

  • 核心代码(根据所需修改)
    • 可以添加bool类型变量封装是否发送附件功能
    • 可以添加收件人参数,指定不同收件人
using System.Threading;
using UnityEngine;
using UnityEngine.UI;

public class Test : MonoBehaviour
{
    
    
    // Start is called before the first frame update
    void Start()
    {
    
    
        //参数:主题、内容、附件地址
        SendEmail("邮件主题","邮件内容", "C:\\Users\\19805\\Desktop\\CSDN\\Email\\1.png");
    }

    // 发送邮件
    void SendEmail(string subject,string contect,string path)
    {
    
    
        // 新建一个发件体
        EmailFormat emailFormat = new EmailFormat();

        // 邮件账户和授权码,授权平台,端口(可不要)
        //QQ_发送账户
        emailFormat.From = "[email protected]";
        //QQ_授权码
        emailFormat.AuthorizationCode = "sbyiyefqxngibcfd";
        //QQ_授权平台
        emailFormat.SmtpClient = "smtp.qq.com";

        // 邮件主题和内容
        emailFormat.Subject = subject;
        emailFormat.Body = contect;

        // 添加附件,可多个
        // 附件不建议发送视频,太大影响发送效率,可能会发送失败
        emailFormat.Attachments.Add(path);

        // 添加收件人,可多个
        emailFormat.To.Add("[email protected]");

        // 发送邮件
        SendEmailWrapper.SendEmail(emailFormat);
    }

}
  • 封装函数(直接复制即可)
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>();
        }

    }

五、运行测试

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Xz616/article/details/128897190
今日推荐