2020年9月6日星期日

.NET Core 下收发邮件之 MailKit

利用代码发送邮件在工作中还是比较常见的,相信大家都用过SmtpClient来处理发送邮件的操作,不过这个类以及被标记已过时,所以介绍一个微软推荐的库MailKit来处理。

MailKit开源地址:https://github.com/jstedfast/MailKit

新建一个控制台应用程序,将MailKit添加到项目中。

Install-Package MailKit

新建一个IEmail接口。

using MimeKit;using System.Threading.Tasks;namespace EmailDemo{ public interface IEmail {  /// <summary>  /// 发送Email  /// </summary>  /// <param name="message"></param>  /// <returns></returns>  Task SendEmailAsync(MimeMessage message); }}

然后添加Email.cs实现这个接口。

using MailKit.Net.Smtp;using MimeKit;using System.Collections.Generic;using System.Threading.Tasks;namespace EmailDemo{ public class Email : IEmail {  public async Task SendEmailAsync(MimeMessage message)  {   var host = "smtp.exmail.qq.com";   var port = 465;   var useSsl = true;   var from_username = "123@meowv.com";   var from_password = "...";   var from_name = "测试";   var from_address = "123@meowv.com";   var address = new List<MailboxAddress>   {    new MailboxAddress("111","111@meowv.com"),    new MailboxAddress("222","222@meowv.com")   };   message.From.Add(new MailboxAddress(from_name, from_address));   message.To.AddRange(address);   using var client = new SmtpClient   {    ServerCertificateValidationCallback = (s, c, h, e) => true   };   client.AuthenticationMechanisms.Remove("XOAUTH2");   await client.ConnectAsync(host, port, useSsl);   await client.AuthenticateAsync(from_username, from_password);   await client.SendAsync(message);   await client.DisconnectAsync(true);  } }}

上面关于邮箱的账号密码服务器可以放在配置文件中,这里为了方便直接写了,演示了发送邮件到两个Email地址。

然后在Program.cs中使用依赖注入的方式调用。

using Microsoft.Extensions.DependencyInjection;using MimeKit;using System;using System.Threading.Tasks;namespace EmailDemo{ class Program {  static async Task Main(string[] args)  {   IServiceCollection service = new ServiceCollection();   service.AddSingleton<IEmail, Email>();   var provider = service.BuildServiceProvider().GetRequiredService<IEmail>();   var message = new MimeMessage   {    Subject = "我是邮件主题",    Body = new BodyBuilder    {     HtmlBody = $"我是邮件内容,时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}"    }.ToMessageBody()   };   await provider.SendEmailAsync(message);  } }}

以上演示了在 .NET Core 中发送邮件的示例,同时利用MailKit也可以接收邮件,这里使用场景不多,如有需要可以参考MailKitGitHub代码示例。

通常发送邮件可以提前写好HTML模板,然后将关键内容做字符串替换,这样发出去的就是一个比较美观的邮件了。

MailKit还支持将图片作为数据内容发送出去。

using Microsoft.Extensions.DependencyInjection;using MimeKit;using MimeKit.Utils;using System;using System.Threading.Tasks;namespace EmailDemo{ class Program {  static async Task Main(string[] args)  {   IServiceCollection service = new ServiceCollection();   service.AddSingleton<IEmail, Email>();   var provider = service.BuildServiceProvider().GetRequiredService<IEmail>();   var path = "D:\\bg.jpg";   var builder = new BodyBuilder();   var image = builder.LinkedResources.Add(path);   image.ContentId = MimeUtils.GenerateMessageId();   builder.HtmlBody = $"当前时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss} <img src=\"cid:{image.ContentId}\"/>";   var message = new MimeMessage   {    Subject = "带图片的邮件推送",    Body = builder.ToMessageBody()   };   await provider.SendEmailAsync(message);  } }}

先在本地准备一张图片,利用ContentId的方式嵌入在img标签中,成功将其发送出去。

.NET Core 下收发邮件之 MailKitebay账号风险控制与物流跨境通电子商务网站国际标准书号亚马逊的站外Facebook推广办法全解抵制中国商品?印度要求8月1日前电商商品须注明"原产国"英国步履蹒跚的"脱欧"之旅,真正到了生死关头!年轻人:我为什么不建议你离职去做亚马逊!MallforAfrica

没有评论:

发表评论

跨境电商资讯:外贸宣传平台有哪些(出口的

现在很多做外贸的人都非常关注 外贸企业怎么推广 ,而现在推广的途径和平台有很多,企业如果都做,成本和时间精力是一个问题,而且并不是所有的推广渠道都是有用的。今天云程网络就来为大家盘点几个有效的外贸推广渠道。 一、海外社交媒体营销 Facebook,领英等海外社交媒体营销在近几年得...