net 自带的邮件发送功能封装-charp asp.net

net 自带的邮件发送功能封装 

当然适用于charp asp.net

实现类代码

using System;
using System.Net.Mail;
using System.Net.Mime;
using System.Threading.Tasks;

namespace Lib.Csharp.Tools
{
    /// <summary>
    /// .net 自带的邮件发送功能封装
    /// </summary>
    public class SmtpMailHelper
    {

        private static SmtpMailConfig _config;

        public SmtpMailHelper(SmtpMailConfig config)
        {
            Init(config);
        }
        public static void Init(SmtpMailConfig config)
        {
            _config = config;
        }
        public static async Task<bool> SendMail(MailData smResult)
        {
            if (_config == null)
            {
                throw new Exception("需要调用构造函数初始化SMTP邮件服务配置");
            }
            try
            {
                var mailMsg = new MailMessage();
                mailMsg.To.Add(new MailAddress(smResult.To));
                mailMsg.From = new MailAddress(_config.FromEail, _config.FromName);
                // 邮件主题
                mailMsg.Subject = smResult.Subject;
                // 邮件正文内容

                if (smResult.MailTextType == MediaTextType.Text)
                {
                    mailMsg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(smResult.Content, null,
                        MediaTypeNames.Text.Plain));
                }
                if (smResult.MailTextType == MediaTextType.Html)
                {
                    mailMsg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(smResult.Content, null,
                        MediaTypeNames.Text.Html));
                }
                // 添加附件
                if (!string.IsNullOrEmpty(smResult.Attachments))
                {
                    //string file = "D:\\1.txt";
                    var data = new Attachment(smResult.Attachments, MediaTypeNames.Application.Octet);
                    mailMsg.Attachments.Add(data);
                }
                

                //邮件推送的SMTP地址和端口
                var smtpClient = new SmtpClient(_config.SmtpHost, _config.SmtpPort);
                // 使用SMTP用户名和密码进行验证
                var credentials = new System.Net.NetworkCredential(_config.FromEail, _config.Password);
                smtpClient.Credentials = credentials;
                await Task.Run(() =>
                {
                    smtpClient.Send(mailMsg);
                });
                
                return true;
            }
            catch (Exception ex)
            {
                //Console.WriteLine(ex.ToString());
                return false;
            }
            //return smResult;
        }

        
    }
    public class MailData
    {
        public string To { get; set; }
        public string Content { get; set; }
        public string Subject { get; set; }

        public MediaTextType MailTextType { get; set; }
        public string Attachments { get; set; }
    }

    public enum MediaTextType
    {
        /// <summary>
        /// 文本格式
        /// </summary>
        Text=1,
        /// <summary>
        /// 网页格式
        /// </summary>
        Html=2,
    }

    public class SmtpMailConfig
    {
        /// <summary>
        /// smtp服务器地址
        /// </summary>
        public string SmtpHost { get; set; }

        /// <summary>
        /// smtp服务器 port
        /// </summary>
        public int SmtpPort { get; set; }

        /// <summary>
        /// 发送者地址 对应的密码
        /// </summary>
        public string Password { get; set; }
        /// <summary>
        /// 来源email地址 (发送者地址)
        /// </summary>
        public string FromEail { get; set; }
        /// <summary>
        /// 发送人(部门)
        /// </summary>
        public string FromName { get; set; }
        /// <summary>
        /// 回复用的邮件地址
        /// </summary>
        public string ReplyEmail { get; set; }
        /// <summary>
        /// 该通道是否可用 true or false
        /// </summary>
        public string SmsCanUse { get; set; }


    }
}

测试代码

using System;
using Lib.Csharp.Tools;
using NUnit.Framework;

namespace Lib.Csharp.ToolsTests
{
    [TestFixture()]
    public class SmtpMailHelperTests
    {
        /// <summary>
        /// 全局setup,不能使用async
        /// </summary>
        [TestFixtureSetUp]
        public void TestFixtureSetUp()
        {

        }
        /// <summary>
        /// 每次测试setup,不能使用async
        /// </summary>
        [SetUp]
        public void SetUp()
        {

        }

        [Test()]
        [ExpectedException(typeof(Exception))]
        public async void SendMailTest_Noinit_Exception()
        {
            var mail = new MailData()
            {
                Attachments="",
                Content="邮件测试啦",
                MailTextType = MediaTextType.Text,
                Subject="test mail",
                To = "85026424@qq.com"
            };
            var result = await SmtpMailHelper.SendMail(mail);
        }

        [Test()]
        public async void SendMailTest_Success()
        {
            var mail = new MailData()
            {
                Attachments = "",
                Content = "邮件测试啦",
                MailTextType = MediaTextType.Text,
                Subject = "test mail",
                To = "youmail@qq.com"
            };
            var config = new SmtpMailConfig()
            {
                FromEail="youmail@163.com",
                FromName="huwei2003",
                Password="youpassword",
                ReplyEmail = "youmail@163.com",
                SmsCanUse="true",
                SmtpHost="smtp.163.com",
                SmtpPort=25,
            };
            SmtpMailHelper.Init(config);

            var result = await SmtpMailHelper.SendMail(mail);

            Assert.AreEqual(result, true);
        }
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值