.net core 发送邮件

时间:2020-08-13 19:29:43 来源:

【摘要】 .net core 发送邮件考必过小编为大家整理了关于.net core 发送邮件的信息,希望可以帮助到大家!

.net core 发送邮件

标签:是你   load   报错   邮箱   百度一下   pps   cte   ddr   多个收件人   

我们很多时候在系统报错,抛异常的时候要提前预警,这个时候邮件是必不可少的。

第一步:首先确定一下,你所使用的方式,是通过外部邮箱(比如QQ还是163)还是内部邮箱

先新建一个model

using System;
using System.Collections.Generic;
using System.Text;

namespace WebApi.Core.Model
{
    public class MailModel
    {
        /// <summary>
        /// 发送人
        /// </summary>
        public string fromPerson { get; set; }

        /// <summary>
        /// 收件人地址(多人)
        /// </summary>
        public string[] recipientArry { get; set; }

        /// <summary>
        /// 抄送地址(多人)
        /// </summary>
        public string[] mailCcArray { get; set; }

        /// <summary>
        /// 标题
        /// </summary>
        public string mailTitle { get; set; }

        /// <summary>
        /// 正文
        /// </summary>
        public string mailBody { get; set; }

        /// <summary>
        /// 客户端授权码(可存在配置文件中)
        /// </summary>
        public string code { get; set; }

        /// <summary>
        /// SMTP邮件服务器
        /// </summary>
        public string host { get; set; }

        /// <summary>
        /// 正文是否是html格式
        /// </summary>
        public bool isbodyHtml { get; set; }
    }
}

然后在新建一个helper类,这里面做了一个重载,传model那个是为了在接口测试方便,主要是使用第二个方法

里面的Appsettings是读取配置文件信息,如果没有可以在方法里面直接写,这里面的code 就是区分是外部还是内部了

如果你是外部的,就百度一下 比如163怎么获取授权码,很好找的,然后给mails.code 赋值就可以了,如果是外部的host查一下你所使用的地址(目前只写了两个常用的)

如果是局域网(我使用的就是内部的邮箱)就把你要当做发件人的 密码 赋值给 mails.code 并且 Host 配置 是你邮箱服务器的IP地址,可以用IP也可以用域名

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using System.Text;
using System.Threading.Tasks;
using WebApi.Core.Model;

namespace WebApi.Core.Common
{
    /// <summary>
    /// 发送邮件帮助类
    /// 创建人:金永宝
    /// 创建时间:2020年8月11日
    /// </summary>
    public static class SendMailHelper
    {
        /// <summary>
        /// 根据实体类发送邮件
        /// 创建人:金永宝
        /// 创建时间:2020年8月11日
        /// </summary>
        /// <param name="mails"></param>
        /// <returns></returns>
        public static void SendMail(MailModel mails)
        {
            string[] sArray = mails.fromPerson.Split(new char[2] { ‘@‘, ‘.‘ });
            if (sArray[1] == "qq")
            {
                mails.host = "smtp.qq.com";//如果是QQ邮箱则:smtp.qq.com,依次类推  163:smtp.163.com
            }
            else if (sArray[1] == "163")
            {
                mails.host = "smtp.163.com";//如果是QQ邮箱则:smtp.qq.com,依次类推  163:smtp.163.com
            }

            //将发件人邮箱带入MailAddress中初始化
            MailAddress mailAddress = new MailAddress(mails.fromPerson);
            //创建Email的Message对象
            MailMessage mailMessage = new MailMessage();

            //判断收件人数组中是否有数据
            if (mails.recipientArry.Any())
            {
                //循环添加收件人地址
                foreach (var item in mails.recipientArry)
                {
                    if (!string.IsNullOrEmpty(item))
                        mailMessage.To.Add(item.ToString());
                }
            }

            //判断抄送地址数组是否有数据
            if (mails.mailCcArray.Any())
            {
                //循环添加抄送地址
                foreach (var item in mails.mailCcArray)
                {
                    if (!string.IsNullOrEmpty(item))
                        mailMessage.To.Add(item.ToString());
                }
            }
            //发件人邮箱
            mailMessage.From = mailAddress;
            //标题
            mailMessage.Subject = mails.mailTitle;
            //编码
            mailMessage.SubjectEncoding = Encoding.UTF8;
            //正文
            mailMessage.Body = mails.mailBody;
            //正文编码
            mailMessage.BodyEncoding = Encoding.Default;
            //邮件优先级
            mailMessage.Priority = MailPriority.High;
            //正文是否是html格式
            mailMessage.IsBodyHtml = mails.isbodyHtml;
            //取得Web根目录和内容根目录的物理路径
            string webRootPath = string.Empty;

            //实例化一个Smtp客户端
            SmtpClient smtp = new SmtpClient();
            //将发件人的邮件地址和客户端授权码带入以验证发件人身份
            smtp.Credentials = new System.Net.NetworkCredential(mails.fromPerson, mails.code);
            //指定SMTP邮件服务器
            smtp.Host = mails.host;

            //邮件发送到SMTP服务器
            smtp.Send(mailMessage);
        }

        /// <summary>
        /// 根据内容发送邮件(读取配置信息)
        /// 创建人:金永宝
        /// 创建时间:2020年8月11日
        /// </summary>
        /// <param name="mailTitle"></param>
        /// <param name="mailBody"></param>
        /// <returns></returns>
        public static void SendMail(string mailTitle,string mailBody)
        {
            
            MailModel mails = new MailModel();
            mails.fromPerson = AppSettings.app(new string[] { "AppSettings", "MailSetting", "FromPerson" });
            mails.code = AppSettings.app(new string[] { "AppSettings", "MailSetting", "PassWord" });
            mails.recipientArry = AppSettings.app(new string[] { "AppSettings", "MailSetting", "RecipientArry" }).Split(‘,‘);
            mails.mailCcArray = AppSettings.app(new string[] { "AppSettings", "MailSetting", "MailCcArray" }).Split(‘,‘);
            mails.mailBody = mailBody;
            mails.mailTitle = mailTitle;
            mails.host= AppSettings.app(new string[] { "AppSettings", "MailSetting", "Host" });

            string[] sArray = mails.fromPerson.Split(new char[2] { ‘@‘, ‘.‘ });
            if (sArray[1] == "qq")
            {
                mails.host = "smtp.qq.com";//如果是QQ邮箱则:smtp.qq.com,
            }
            else if (sArray[1] == "163")
            {
                mails.host = "smtp.163.com";//如果是163邮箱则:smtp.163.com
            }

            //将发件人邮箱带入MailAddress中初始化
            MailAddress mailAddress = new MailAddress(mails.fromPerson);
            //创建Email的Message对象
            MailMessage mailMessage = new MailMessage();

            //判断收件人数组中是否有数据
            if (mails.recipientArry.Any())
            {
                //循环添加收件人地址
                foreach (var item in mails.recipientArry)
                {
                    if (!string.IsNullOrEmpty(item))
                        mailMessage.To.Add(item.ToString());
                }
            }

            //判断抄送地址数组是否有数据
            if (mails.mailCcArray.Any())
            {
                //循环添加抄送地址
                foreach (var item in mails.mailCcArray)
                {
                    if (!string.IsNullOrEmpty(item))
                        mailMessage.To.Add(item.ToString());
                }
            }
            //发件人邮箱
            mailMessage.From = mailAddress;
            //标题
            mailMessage.Subject = mails.mailTitle;
            //编码
            mailMessage.SubjectEncoding = Encoding.UTF8;
            //正文
            mailMessage.Body = mails.mailBody;
            //正文编码
            mailMessage.BodyEncoding = Encoding.Default;
            //邮件优先级
            mailMessage.Priority = MailPriority.High;
            //正文是否是html格式
            mailMessage.IsBodyHtml = mails.isbodyHtml;
            //取得Web根目录和内容根目录的物理路径
            string webRootPath = string.Empty;

            //实例化一个Smtp客户端
            SmtpClient smtp = new SmtpClient();
            //将发件人的邮件地址和客户端授权(局域网用密码)码带入以验证发件人身份
            smtp.Credentials = new System.Net.NetworkCredential(mails.fromPerson, mails.code);
            //指定SMTP邮件服务器
            smtp.Host = mails.host;

            //邮件发送到SMTP服务器
            smtp.Send(mailMessage);
        }
    }
}

这是我的appsettings.json配置文件

//邮箱配置
    "MailSetting": {
      "Code": "asdaasdasdas", //授权码
      "PassWord": "123456",  //发件人邮箱的密码
      "FromPerson": "[email protected]", //发件人
      "RecipientArry": "[email protected],[email protected]", //多个收件人用,号分割
      "MailCcArray": "kaifalist@cc.net", //抄送 多个人用逗号分割
      "IsbodyHtml": true, //是否邮件体为Html
      "Host": "192.168.5.30" //smtp 服务器地址
    }

 我用的outlook   那个服务器信息 就是host ,密码在这里 也可以设置

工具-账户设置-双击你的邮箱

最后就是调用直接传入标题和内容就可以了。亲测是可以的。我的版本是.net core 3.1

 

.net core 发送邮件

标签:是你   load   报错   邮箱   百度一下   pps   cte   ddr   多个收件人   

以上就是.net core 发送邮件的内容,更多资讯请及时关注考必过网站,最新消息小编会第一时间发布,大家考试加油!

上一篇      下一篇
前端相关推荐 更多>>
Web前端工程师需要学习的技能清单 css性能优化-will-change CSS之文本两端对齐 这样的广告请再来一打 — background-attachment 初识 CSS Shapes —– (二) 初识 CSS Shapes CSS3– filter(滤镜) chrome transition闪烁BUG
前端热点专题 更多>>
热点问答
国家公务员考试年龄限制是多少 公务员国考和省考考试内容有什么区别 函授大专学历能不能考公务员 国家公务员考试考点能自己选择吗 新闻学专业能报考2022年公务员考试吗 什么是联合培养研究生 什么是破格录取研究生 什么人不适合读研 研究生报名户口所在地填什么 研究生结业和毕业有什么区别
网站首页 网站地图 返回顶部
考必过移动版 https://m.kaobiguo.net