zoukankan      html  css  js  c++  java
  • .net core 发送邮件

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

    第一步:首先确定一下,你所使用的方式,是通过外部邮箱(比如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": "ceshi@cc.net", //发件人
          "RecipientArry": "ceshi@cc.net,ceshi2@cc.net", //多个收件人用,号分割
          "MailCcArray": "kaifalist@cc.net", //抄送 多个人用逗号分割
          "IsbodyHtml": true, //是否邮件体为Html
          "Host": "192.168.5.30" //smtp 服务器地址
        }

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

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

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

  • 相关阅读:
    21.09.12模拟 P2809 hzwer 爱折纸
    21.09.13模拟 保存名画
    21.09.13模拟赛 魔法传输
    21.09.13模拟 分割金币
    21.09.13模拟 友谊值
    21.09.10模拟 朗格拉日计数
    21.09.10模拟 雷神领域
    P4551 最长异或路径
    P2894 [USACO08FEB]Hotel G
    NOIP复习(总结套路)
  • 原文地址:https://www.cnblogs.com/xiaojinFat/p/13475947.html
Copyright © 2011-2022 走看看