您当前的位置: 首页 >  unity

CoderZ1010

暂无认证

  • 2浏览

    0关注

    168博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity 如何在程序中发送Email邮件

CoderZ1010 发布时间:2021-12-01 10:22:51 ,浏览量:2

发送邮件需要用到System.Net.Mail命名空间下的MailMessage和SmtpClient类,smtp是一种提供可靠且有效的电子邮件传输协议,是建立在FTP文件传输服务上的一种邮件服务。下面封装一个Email类,声明MailMessage和SmtpClient字段:

using System;
using System.Net.Mail;

namespace SK.Framework
{
    /// 
    /// 邮件
    /// 
    public sealed class Email : IDisposable
    {
        public MailMessage MailMessage;
        /// 
        /// Smtp Client
        /// Smtp : 简单邮件传输协议(Simple Mail Transfer Protocol)
        /// 
        public SmtpClient SmtpClient;

        public void Dispose()
        {
            MailMessage.Dispose();
            SmtpClient.Dispose();
        }
    }
}

发送邮件需要提供发送所使用的邮箱,以QQ邮箱为例:首先需要QQ邮箱SMTP服务器主机地址信息:

 

然后需要所用邮箱的账号和密码,此处密码并不是指真实的邮箱密码,而是用于第三方客户端登录的授权码,需要到QQ邮箱的设置中开启SMTP服务并获取授权码:

有了上述信息后,封装发送邮件所用的函数:

using System;
using System.Net;
using System.Text;
using UnityEngine;
using System.Net.Mail;

namespace SK.Framework
{
    public static class Mailer
    {
        //邮箱服务器主机,根据使用的发送邮箱,使用其对应的服务器主机 例如 QQ邮箱服务器主机 smtp.qq.com
        private readonly static string host = "smtp.qq.com";
        //邮箱服务器主机端口
        private readonly static int port = 25;
        //发送邮件所用邮箱
        private static string senderEmail = "*********@qq.com";
        //发送邮件所用邮箱的密码 (第三方客户端登录授权码)
        private static string password = "****************";

        /// 
        /// 发送邮件
        /// 
        /// 主题
        /// 主体
        /// 接收邮箱
        /// 回调
        public static void Send(string subject, string body, string toEmail, Action callback = null)
        {
            using(var email = new Email()
            {
                MailMessage = new MailMessage()
                {
                    From = new MailAddress(senderEmail),
                    Subject = subject,
                    Body = body,
                    SubjectEncoding = Encoding.UTF8,
                    BodyEncoding = Encoding.UTF8,
                    IsBodyHtml = false,
                },
                SmtpClient = new SmtpClient()
                {
                    Host = host,
                    Port = port,
                    UseDefaultCredentials = false,
                    Credentials = new NetworkCredential(senderEmail, password),
                    EnableSsl = false,
                    DeliveryMethod = SmtpDeliveryMethod.Network
                }
            })
            {
                email.MailMessage.To.Add(new MailAddress(toEmail));
                email.SmtpClient.SendCompleted += (s, e) => callback?.Invoke();
                email.SmtpClient.SendMailAsync(email.MailMessage);
                Debug.Log($"发送邮件:接收人 - {toEmail} 主题 - {subject} 内容 - {body}");
            }
        }
        /// 
        /// 发送邮件
        /// 
        /// 主题
        /// 主体
        /// 接收邮箱
        /// 回调
        public static void Send(string subject, string body, string[] toEmails, Action callback = null)
        {
            using(var email = new Email()
            {
                MailMessage = new MailMessage()
                {
                    From = new MailAddress(senderEmail),
                    Subject = subject,
                    Body = body,
                    SubjectEncoding = Encoding.UTF8,
                    BodyEncoding = Encoding.UTF8,
                    IsBodyHtml = false
                },
                SmtpClient = new SmtpClient()
                {
                    Host = host,
                    Port = port,
                    UseDefaultCredentials = false,
                    Credentials = new NetworkCredential(senderEmail, password),
                    EnableSsl = false,
                    DeliveryMethod = SmtpDeliveryMethod.Network
                }
            })
            {
                for (int i = 0; i < toEmails.Length; i++)
                {
                    email.MailMessage.To.Add(new MailAddress(toEmails[i]));
                }
                email.SmtpClient.SendCompleted += (s, e) => callback?.Invoke();
                email.SmtpClient.SendMailAsync(email.MailMessage);
                Debug.Log($"群发邮件:主题 - {subject} 内容 - {body}");
            }
        }
    }
}

测试:

using UnityEngine;
using SK.Framework;

public class Foo : MonoBehaviour
{
    private void Start()
    {
        Mailer.Send("邮件标题:测试", "邮件内容:测试asdfg", "136512892@qq.com");
    }
}

关注
打赏
1653184800
查看更多评论
立即登录/注册

微信扫码登录

0.3330s