一、邮箱设置
开启MSTP服务,相当于一个授权的过程,开启这个后才可以通过第三方发送邮件。
二、代码实现
.Net中可以通过两个库来实现发邮件 分别为System.Net.Mail和MailKit这两个库。
(1)System.Net.Mail
appsettings.json配置
“Email”: {
“AuthorizationCode”: “*“,
“SendAddress”: “952711409@qq.com”,
“STMP”: “smtp.qq.com”
}
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Mail;
namespace Rili.DeviceArchive.Utility
{
public class EmailModel
{
public string Subject { get; set; }
public string Content { get; set; }
public List<string> ToAddress { get; set; }
/// <summary>
/// 抄送地址
/// </summary>
public List<string> CarbonCopyAddress { get; set; }
}
public class EmailHelper
{
public static void SendEmail(EmailModel emailModel)
{
try
{
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("appsettings.json");
IConfigurationRoot root = configurationBuilder.Build();
var emailRoot = root.GetSection("Email");
var authorizationCode = emailRoot["AuthorizationCode"].ToString(); //授权码
var sendAddress = emailRoot["SendAddress"].ToString(); //发起地址
var STMP = emailRoot["STMP"].ToString(); //STMP服务地址
MailMessage message = new MailMessage();
//设置发件人,发件人需要与设置的邮件发送服务器的邮箱一致
MailAddress fromAddr = new MailAddress(sendAddress);
message.From = fromAddr;
//设置收件人
if (emailModel.ToAddress != null)
{
emailModel.ToAddress.ForEach(toAddress =>
{
message.To.Add(toAddress);
});
}
//设置抄送人
if (emailModel.CarbonCopyAddress != null)
{
emailModel.CarbonCopyAddress.ForEach(carbonCopyAddress =>
{
message.CC.Add(carbonCopyAddress);
});
}
//设置邮件标题
message.Subject = emailModel.Subject;
//设置邮件内容
message.Body = emailModel.Content;
//设置邮件发送服务器,服务器根据你使用的邮箱而不同,可以到相应的 邮箱管理后台查看,下面是QQ的
SmtpClient client = new SmtpClient(STMP, 25);
//设置发送人的邮箱账号和密码[授权码]
client.Credentials = new NetworkCredential(sendAddress, authorizationCode);
//启用ssl,也就是安全发送
client.EnableSsl = true;
client.UseDefaultCredentials = false;
//发送邮件
client.Send(message);
}
catch (Exception ex)
{
}
}
}
}
代码调用
EmailModel item = new EmailModel {
Subject= "主题",
Content= "邮件内容",
ToAddress = new List<string>() { "zhanghao.mars@163.com" }
};
EmailHelper.SendEmail(item);
(2)MailKit
安装MailKit包
appsettings.json配置(同上System.Net.Mail)
using Microsoft.Extensions.Configuration;
using MimeKit;
using MimeKit.Text;
using MailKit.Net.Smtp;
using System;
using System.Collections.Generic;
namespace Rili.DeviceArchive.Utility
{
public class EmailModel
{
public string Subject { get; set; }
public string Content { get; set; }
public List<string> ToAddress { get; set; }
/// <summary>
/// 抄送地址
/// </summary>
public List<string> CarbonCopyAddress { get; set; }
}
public class EmailHelper
{
public static void SendEmail(EmailModel emailModel)
{
try
{
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("appsettings.json");
IConfigurationRoot root = configurationBuilder.Build();
var emailRoot = root.GetSection("Email");
var authorizationCode = emailRoot["AuthorizationCode"].ToString();
var sendEmailAddress = emailRoot["SendEmailAddress"].ToString();
var STMP = emailRoot["STMP"].ToString();
MimeMessage message = new MimeMessage();
//发件人
message.From.Add(new MailboxAddress("**系统", sendEmailAddress));
//设置收件人
string Name = "收件人名称";
if (emailModel.ToAddress != null)
{
emailModel.ToAddress.ForEach(toAddress =>
{
message.To.Add(new MailboxAddress(Name, toAddress));
});
}
//设置抄送人
if (emailModel.CarbonCopyAddress != null)
{
emailModel.CarbonCopyAddress.ForEach(carbonCopyAddress =>
{
message.Cc.Add(new MailboxAddress(Name, carbonCopyAddress));
});
}
//主题
message.Subject = emailModel.Subject;
//产生一个支持HTml的TextPart
TextPart body = new TextPart(TextFormat.Html)
{
Text = emailModel.Content
};
//创建Multipart添加附件
Multipart multipart = new Multipart("mixed");
multipart.Add(body);
//附件
//MimePart attachment = new MimePart()
//{
// ContentObject = new ContentObject(File.OpenRead(absolutePath), ContentEncoding.Default),
// ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
// ContentTransferEncoding = ContentEncoding.Base64,
// FileName = Path.GetFileName(absolutePath)
//};
//multipart.Add(attachment);
message.Body = multipart;
using (SmtpClient client = new SmtpClient())
{
//Smtp服务器
client.Connect(STMP, 587, false);
//登录,发送
client.Authenticate(sendEmailAddress, authorizationCode);
client.Send(message);
//断开
client.Disconnect(true);
}
}
catch (Exception ex)
{
}
}
}
}
代码调用(同上System.Net.Mail)