ASP.NET Core Library – MailKit SMTP Client

前言

以前写的 SMTP Client 相关文章: 

Asp.net core 学习笔记 ( Smtp and Razor template 电子邮件和 Razor 模板 )

ASP.NET Email + WebConfig

Email 关于 POP3 IMAP SMTP office365 Outlook Gmail G-Suit shared mailbox小小理解

.NET build-in 的 SMTP Client 已经废弃了. 官网已经给出告示:

它推荐是用 MailKit. MailKit 是一个功能齐全的 mail client library, 底层用的是 MimeKit 作者都是同一个人, 它可以实现 SMTP, POP3, IMAP 等功能.

如果只是想要 SMTP Client 功能, FluentEmail 也是一个不错的选择.

 

参考:

MailKit Docs

 

安装

dotnet add package MailKit

 

SmtpClient

using var client = new SmtpClient();
await client.ConnectAsync(
    host: "smtp.gmail.com",
    port: 587,
    options: MailKit.Security.SecureSocketOptions.StartTls
);
await client.AuthenticateAsync("mygmail@gmail.com", "mypassword");
client.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls13; // 这个是默认值

创建 SmtpClient 对象, 链接 SMTP Server, 输入 username, password. 就可以了

SslProtocols 默认就是 TLS1.2 | 1.3 了 (2022年 2 月起, smtp.office365.com 不再支持 TLS 1.0 和 1.1 了). 不需要特别设置.

提醒: Gmail / Outlook 开启 Two-factor 的话, mypassword 不可以使用 user password 哦, 需要改用 App Password,

参考: 

Youtube – How to get a Google App Password (full tutorial) for Gmail

Docs – Using app passwords with apps that don't support two-step verification for Outlook

p.s. hotmail, outlook, office365 的 host 是 smtp.office365.com, port 那些是一样的

 

MimeMessage

var message = new MimeMessage();
message.From.Add(new MailboxAddress("My Name", "mygmail@gmail.com"));
message.To.Add(new MailboxAddress("Hengkeat Yam", "hengkeat87@gmail.com"));
message.ReplyTo.Add(new MailboxAddress("Keat Keat", "keatkeat87@live.com"));
var builder = new BodyBuilder
{
    HtmlBody = @"
        <!DOCTYPE html>
        <html lang=""en"" xmlns=""http://www.w3.org/1999/xhtml"" xmlns:o=""urn:schemas-microsoft-com:office:office"">
        <head>
            <meta charset=""UTF-8"">
            <meta name=""viewport"" content=""width=device-width,initial-scale=1"">
            <meta name=""x-apple-disable-message-reformatting"">
            <title></title>
            </head>
        <body style=""color:red"">
            test email only
        </body>
        </html>",
    TextBody = "Test Email Only"
};
var rootPath = Path.Combine(AppContext.BaseDirectory, @"..\..\..\");
builder.Attachments.Add("tifa2.PNG", await File.ReadAllBytesAsync(Path.Combine(rootPath, "tifa2.PNG")));
message.Subject = "Test Email";
message.Body = builder.ToMessageBody();

创建一个 MimeMessage, 输入 from, to, cc, bcc, replyto, subject, body, attachments 就可以了. 都是一般发邮件会填入的资料.

最后 send, 完事.

await client.SendAsync(message);
await client.DisconnectAsync(quit: true);

 

posted @ 2022-02-21 09:41  兴杰  阅读(235)  评论(0编辑  收藏  举报