栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

.net core System.Net.Mail.MailMessage 发送电子邮件

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.net core  System.Net.Mail.MailMessage 发送电子邮件

   

       [HttpPost]
        public JsonResult SendMail()
        {

            MailMessage mailMsg = new MailMessage();//实例化对象
            mailMsg.From = new MailAddress("XXXXXXXXXX@163.com", "网易邮箱测试");//源邮件地址和发件人
            mailMsg.To.Add(new MailAddress("17XXXXXXXX@qq.com","收件人:小越"));//收件人地址
            mailMsg.Subject = "邮件发送测试";//发送邮件的标题
            StringBuilder sb = new StringBuilder();
            sb.Append("测试测试测试测试");
            sb.Append("嘿嘿,测试网易万一");
            mailMsg.Body = sb.ToString();//发送邮件的内容
            //指定smtp服务地址(根据发件人邮箱指定对应SMTP服务器地址)
            SmtpClient client = new SmtpClient();//格式:smtp.126.com  smtp.164.com
            client.Host = "smtp.163.com";
            //要用587端口
            client.Port =25 ;//端口25 
            //加密
            client.EnableSsl = true;
            //通过用户名和密码验证发件人身份
            client.Credentials = new NetworkCredential("XXXXXXXXX@163.com", "XXXXXXXXXXXXXXXXXXXX");
            //发送邮件
            try
            {
                client.Send(mailMsg);
                return Result(ResultCode.sucess,"发送成功");

            }
            catch (SmtpException ex)
            {
                return Result(ResultCode.sucess, "发送失败", ex.ToString());
            }

        }


        [HttpPost]
        [AllowAnonymous]
        public JsonResult SendQQmail()
        {
            string fromname = "发件人";//发件人
            string fromAddress = "465XXXXXXXXXXXXXX@qq.com";//发件邮箱账号
            string password = "XXXXXXXXXXXXXX";//授权码
            string title = "邮件主题:测试一下";//邮件标题
            string body = "邮件内容:测试一下,测试一下,哈哈";//邮件内容
            string style = "smtp.qq.com";//发件方式
            int port = 25;  // 或者587
            string toAddresses = "1xxxxxxxxxxxxx@qq.com";//不能判断是否存在这个邮箱
            string toName = "收件人";
            SendEmail se = new SendEmail(toAddresses, fromAddress, toName, fromname, title, body, false);
            int res = se.SetSmtp(fromAddress, password, style, port, true, System.Net.Mail.MailPriority.Normal); //必须在所有参数设置完后调用此方法

            return Result(ResultCode.sucess, "发送成功");

        }

SendMail 类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
using System.Text;
using System.Threading.Tasks;

namespace Wz.Test.Api.Extensions
{
    public class SendEmail
    {
        private MailMessage mailMessage = new MailMessage(); //实例化一个邮件类
        ///

 
        /// 构造函数 
        ///
 
        /// 收件人地址(多个以,号分开) 
        /// 发件人地址 
        /// 主题 
        /// 正文 
        public SendEmail(string toAddresses, string fromAddress, string title, string body)
            : this(toAddresses, fromAddress, "", "", title, body, false)
        { }
        ///  
        /// 构造函数 
        ///
 
        /// 收件人地址 
        /// 发件人地址 
        /// 收件人名字 
        /// 发件人姓名 
        /// 主题 
        /// 正文 
        /// 正文是否为html格式 
        public SendEmail(string toAddress, string fromAddress, string toName, string fromName, string title, string body, bool isBodyHtml)
        {
            mailMessage.From = new MailAddress(fromAddress, fromName, Encoding.GetEncoding(936));

            if (toName.Equals(""))
            {
                mailMessage.To.Add(toAddress);
            }
            else
            {
                mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936)));

            }
            mailMessage.Subject = title;
            mailMessage.SubjectEncoding = Encoding.GetEncoding(936);
            mailMessage.Body = body;
            mailMessage.IsBodyHtml = isBodyHtml;
            mailMessage.BodyEncoding = Encoding.GetEncoding(936);
        }
        ///

 
        /// 设置SMTP,并且将邮件发送出去 
        /// 所有参数都设置完成后再调用该方法 
        ///
 
        /// 发件人密码 
        /// SMTP服务器地址 
        public void SetSmtp(string password, string smtpHost)
        {
            SetSmtp(mailMessage.From.Address, password, smtpHost, 25, false, MailPriority.Normal);
        }
        ///  
        /// 设置SMTP,并且将邮件发送出去 
        /// 所有参数都设置完成后再调用该方法 
        ///
 
        /// 发件人地址(必须为真实有效的email地址) 
        /// 发件人密码 
        /// SMTP服务器地址 
        /// SMTP服务器的端口 
        /// SMTP服务器是否启用SSL加密 
        /// 邮件的优先级 
        public int SetSmtp(string address, string password, string smtpHost, int smtpPort, bool isEnableSsl, MailPriority priority)
        {
            try
            {
                SmtpClient smtp = new SmtpClient();
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtp.Credentials = new NetworkCredential(address, password);
                smtp.Host = smtpHost;
                smtp.Port = smtpPort;
                smtp.EnableSsl = isEnableSsl;
                mailMessage.Priority = priority;
                smtp.Send(mailMessage); //发送邮件 
                return 1;
            }
            catch (Exception ex)
            {
                return 0;
                throw ex;
            }
        }
        #region
        ///  
        /// 设置更多收件人 
        ///
 
        /// 收件人地址 
        public void SetMoreToAddress(string toAddresses)
        {
            mailMessage.To.Add(toAddresses);
        }
        ///  
        /// 设置更多收件人 
        ///
 
        /// 收件人地址 
        /// 收件人名字 
        public void SetMoreToAddress(string toAddress, string toName)
        {
            mailMessage.To.Add(new MailAddress(toAddress, toName, Encoding.GetEncoding(936)));
        }
        ///  
        /// 设置抄送者(多个以,号分开) 
        ///
 
        /// 抄送者地址 
        public void SetCarbonCopyFor(string ccAddresses)
        {
            mailMessage.CC.Add(ccAddresses);
        }
        ///  
        /// 设置抄送者 
        ///
 
        /// 抄送者地址 
        /// 抄送者名字 
        public void SetCarbonCopyFor(string ccAddress, string ccName)
        {
            mailMessage.Bcc.Add(new MailAddress(ccAddress, ccName, Encoding.GetEncoding(936)));
        }
        ///  
        /// 设置密送者(多个以,号分开) 
        ///
 
        /// 密送者 
        public void SetBlindCarbonCopyFor(string bccAddresses)
        {
            mailMessage.Bcc.Add(bccAddresses);
        }
        ///  
        /// 设置密送者 
        ///
 
        /// 密送者 
        /// 密送者名字 
        public void SetBlindCarbonCopyFor(string bccAddress, string bccName)
        {
            mailMessage.Bcc.Add(new MailAddress(bccAddress, bccName, Encoding.GetEncoding(936)));
        }
        #endregion
        ///  
        /// 添加附件(自动识别文件类型) 
        ///
 
        /// 单个文件的路径 
        public void Attachments(string fileName)
        {
            mailMessage.Attachments.Add(new Attachment(fileName));
        }
        ///  
        /// 添加附件(默认为富文本ZIP格式)
        ///
 
        /// 单个文件的路径 
        public void AttachmentsForZIP(string fileName)
        {
            mailMessage.Attachments.Add(new Attachment(fileName, MediaTypeNames.Application.Zip));
        }
    }
}
 

出现问题:

.net core 出现错误:No data is available for encoding 936. For information......

 

解决:

 异常信息中提到了Encodeing.RegisterProvider,.NET Core 在默认情况下是没有注册EncodeProvider,需要手动注册。

 

步骤:

1.安装NuGet包   System.Text.Encoding.CodePages

2.在 Startup.cs 中Configure 添加:

 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

 

参考链接:

使用MailMessage发送邮件_anqiuqi4791的博客-CSDN博客

使用 System.Net.Mail.MailMessage 发送电子邮件_weixin_30546933的博客-CSDN博客

 

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号