标签:是你 load 报错 邮箱 百度一下 pps cte ddr 多个收件人
我们很多时候在系统报错,抛异常的时候要提前预警,这个时候邮件是必不可少的。
第一步:首先确定一下,你所使用的方式,是通过外部邮箱(比如QQ还是163)还是内部邮箱
先新建一个model
using System;
using System.Collections.Generic;
using System.Text;
namespace WebApi.Core.Model
{
public class MailModel
{
///
/// 发送人
///
public string fromPerson { get; set; }
///
/// 收件人地址(多人)
///
public string[] recipientArry { get; set; }
///
/// 抄送地址(多人)
///
public string[] mailCcArray { get; set; }
///
/// 标题
///
public string mailTitle { get; set; }
///
/// 正文
///
public string mailBody { get; set; }
///
/// 客户端授权码(可存在配置文件中)
///
public string code { get; set; }
///
/// SMTP邮件服务器
///
public string host { get; set; }
///
/// 正文是否是html格式
///
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
{
///
/// 发送邮件帮助类
/// 创建人:金永宝
/// 创建时间:2020年8月11日
///
public static class SendMailHelper
{
///
/// 根据实体类发送邮件
/// 创建人:金永宝
/// 创建时间:2020年8月11日
///
/// param name="mails">param>
///
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);
}
///
/// 根据内容发送邮件(读取配置信息)
/// 创建人:金永宝
/// 创建时间:2020年8月11日
///
/// param name="mailTitle">param>
/// param name="mailBody">param>
///
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
.net core 发送邮件
标签:是你 load 报错 邮箱 百度一下 pps cte ddr 多个收件人
原文地址:https://www.cnblogs.com/xiaojinFat/p/13475947.html