【.net/.net core】发送邮件方法

具体实现逻辑为申请一个授权的发送邮箱,利用该邮箱从代码层面实现邮箱中的邮件发送功能

cs 复制代码
 #region 发送邮件
        /// <summary>
        /// 发送邮件方法
        /// </summary>
        /// <param name="Subject">邮件标题</param>
        /// <param name="Body">邮件内容</param>
        /// <param name="FromMail">发件人邮箱</param>
        /// <param name="ToMail">收件人邮箱(多个收件人地址用";"号隔开)</param>
        /// <param name="AuthorizationCode">发件人授权码(需要通过在邮箱设置中获取)</param>
        /// <param name="ReplyTo">对方回复邮件时默认的接收地址(不设置也是可以的)</param>
        /// <param name="CCMail">//邮件的抄送者(多个抄送人用";"号隔开)(不设置也是可以的)</param>
        /// <param name="File_Path">附件的地址(不设置也是可以的)</param>
        public static void SendMail(string Subject, string Body, string FromMail, string ToMail, string AuthorizationCode, string ReplyTo, string CCMail, string File_Path)
        {
            try
            {
                //实例化一个发送邮件类。
                System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();
                mailMessage.IsBodyHtml = true;
                mailMessage.BodyEncoding = System.Text.Encoding.UTF8;

                //邮件的优先级,分为 Low, Normal, High,通常用 Normal即可
                mailMessage.Priority = MailPriority.Normal;

                //发件人邮箱地址。
                mailMessage.From = new MailAddress(FromMail);

                //收件人邮箱地址。需要群发就写多个
                //拆分邮箱地址
                List<string> ToMaillist = ToMail.Split(';').ToList();
                for (int i = 0; i < ToMaillist.Count; i++)
                {
                    mailMessage.To.Add(new MailAddress(ToMaillist[i]));  //收件人邮箱地址。
                }

                if (ReplyTo == "" || ReplyTo == null)
                {
                    ReplyTo = FromMail;
                }

                //对方回复邮件时默认的接收地址(不设置也是可以的哟)
                mailMessage.ReplyTo = new MailAddress(ReplyTo);

                if (CCMail != "" && CCMail != null)
                {
                    List<string> CCMaillist = ToMail.Split(';').ToList();
                    for (int i = 0; i < CCMaillist.Count; i++)
                    {
                        //邮件的抄送者,支持群发
                        mailMessage.CC.Add(new MailAddress(CCMail));
                    }
                }
                //如果你的邮件标题包含中文,这里一定要指定,否则对方收到的极有可能是乱码。
                mailMessage.SubjectEncoding = Encoding.UTF8;

                //邮件正文是否是HTML格式
                mailMessage.IsBodyHtml = false;

                //邮件标题。
                mailMessage.Subject = Subject;
                //邮件内容。
                mailMessage.Body = Body;

                //设置邮件的附件,将在客户端选择的附件先上传到服务器保存一个,然后加入到mail中  
                if (File_Path != "" && File_Path != null)
                {
                    //将附件添加到邮件
                    mailMessage.Attachments.Add(new Attachment(File_Path));
                    //获取或设置此电子邮件的发送通知。
                    mailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
                }

                //实例化一个SmtpClient类。
                SmtpClient client = new SmtpClient();

                #region 设置邮件服务器地址

                //在这里我使用的是163邮箱,所以是smtp.163.com,如果你使用的是qq邮箱,那么就是smtp.qq.com。
                // client.Host = "smtp.163.com";
                if (FromMail.Length != 0)
                {
                    //根据发件人的邮件地址判断发件服务器地址   默认端口一般是25
                    string[] addressor = FromMail.Trim().Split(new Char[] { '@', '.' });
                    switch (addressor[1])
                    {
                        case "163":
                            client.Host = "smtp.163.com";
                            break;
                        case "126":
                            client.Host = "smtp.126.com";
                            break;
                        case "qq":
                            client.Host = "smtp.qq.com";
                            break;
                        case "gmail":
                            client.Host = "smtp.gmail.com";
                            break;
                        case "hotmail":
                            client.Host = "smtp.live.com";//outlook邮箱
                                                          //client.Port = 587;
                            break;
                        case "foxmail":
                            client.Host = "smtp.foxmail.com";
                            break;
                        case "sina":
                            client.Host = "smtp.sina.com.cn";
                            break;
                        default:
                            client.Host = "smtp.exmail.qq.com";//qq企业邮箱
                            break;
                    }
                }
                #endregion

                //使用安全加密连接。
                client.EnableSsl = true;
                //不和请求一块发送。
                client.UseDefaultCredentials = false;

                //验证发件人身份(发件人的邮箱,邮箱里的生成授权码);
                client.Credentials = new NetworkCredential(FromMail, AuthorizationCode);

                //如果发送失败,SMTP 服务器将发送 失败邮件告诉我  
                mailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
                //发送
                client.Send(mailMessage);
                Console.WriteLine("发送成功");
            }
            catch (Exception ex)
            {

                Console.WriteLine("发送失败" + ex.Message);
            }
        }

        #endregion
相关推荐
憧憬成为web高手2 小时前
ACTF 12307复现
前端·bootstrap·html
wordbaby3 小时前
Axios 上传大文件崩溃:鸿蒙 RNOH 下 XHR 返回空响应头引发的"假失败"
前端·react native
wordbaby3 小时前
React Native 列表分页实战:下拉刷新与上拉加载的工程化方案
前端·react native
Lei活在当下3 小时前
先用起来,再理解,关于协程Coroutine应该知道的事
android·java·jvm
Java爱好狂.4 小时前
Java程序员体系化学习路线(2026最新版)
java·后端·java面试·java架构师·java程序员·java八股文·java学习路线
wordbaby4 小时前
脱离 Tab 栏的艺术:React Native 全屏子页面的导航架构实践
前端·react native·harmonyos
陈随易4 小时前
Redis 8.8发布,一定要更新
前端·后端·程序员
tongluowan0074 小时前
以ReentrantLock为例解释AQS的工作流程
java·模板方法模式·aqs·reentrantlock
wordbaby4 小时前
React Native 新架构落地鸿蒙:跨三端政务级应用的工程实践与深度复盘
前端·react native·harmonyos
晓说前端4 小时前
第一篇:为什么学TypeScript?—— 优势、场景与环境搭建
javascript·ubuntu·typescript