1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        如何在 Asp.Net Core 中發(fā)送 Email

        共 3966字,需瀏覽 8分鐘

         ·

        2021-01-11 22:01

        在項目開發(fā)中常常會需要做發(fā)送 Email 的功能,在 ASP.NET Core 中你可以用 MailKit 來實現(xiàn) Email 的發(fā)送,MailKit 是一個開源的客戶端庫,可用在 Windows,Linux 或者 Mac 上,本篇文章就來討論在 ASP.NET Core 中去實現(xiàn)。

        安裝 MailKit

        要想使用 MailKit,你可以使用 Visual Studio 2019 中的 NuGet package manager 可視化界面進行安裝,或者通過 NuGet package manager console 命令行輸入如下命令:


        Install-Package?NETCore.MailKit

        安裝完成之后,在代碼中引入以下命令空間即可。


        using?MailKit.Net.Smtp;
        using?MimeKit;

        配置 Email 的基礎(chǔ)信息

        下面的代碼片段展示了在 appsettings.json 文件中配置 email 的詳細信息。


        "NotificationMetadata":?{
        ????"Sender":?"[email protected]",
        ????"SmtpServer":?"smtp.gmail.com",
        ????"Reciever":?"[email protected]",
        ????"Port":?465,
        ????"Username":?"[email protected]",
        ????"Password":?"specify?your?password?here"
        ??}

        為了能夠?qū)崿F(xiàn) configuration 中的NotificationMetadata節(jié)點映射,我定義了一個 NotificationMetadata 類,代碼如下:


        ????public?class?NotificationMetadata
        ????{
        ????????public?string?Sender?{?get;?set;?}
        ????????public?string?Reciever?{?get;?set;?}
        ????????public?string?SmtpServer?{?get;?set;?}
        ????????public?int?Port?{?get;?set;?}
        ????????public?string?UserName?{?get;?set;?}
        ????????public?string?Password?{?get;?set;?}
        ????}

        接下來在 Startup.ConfigureServices 方法中將 NotificationMetadata 節(jié)點映射到 NotificationMetadata 類。


        public?void?ConfigureServices(IServiceCollection?services)
        {
        ?????var?notificationMetadata?=
        ?????Configuration.GetSection("NotificationMetadata").
        ?????Get();
        ?????services.AddSingleton(notificationMetadata);
        ?????services.AddControllers();
        }

        生成 EmailMessage 消息類

        使用如下代碼創(chuàng)建一個 EmailMessage 類。


        ????public?class?EmailMessage
        ????{
        ????????public?MailboxAddress?Sender?{?get;?set;?}
        ????????public?MailboxAddress?Reciever?{?get;?set;?}
        ????????public?string?Subject?{?get;?set;?}
        ????????public?string?Content?{?get;?set;?}
        ????}

        生成 MimeMessage 類

        下面的代碼展示了如何從自定義的 EmailMessage 類中構(gòu)造出一個 MimeMessage。


        private?MimeMessage?CreateMimeMessageFromEmailMessage(EmailMessage?message)
        {
        ?????var?mimeMessage?=?new?MimeMessage();
        ?????mimeMessage.From.Add(message.Sender);
        ?????mimeMessage.To.Add(message.Reciever);
        ?????mimeMessage.Subject?=?message.Subject;
        ?????mimeMessage.Body?=?new?TextPart(MimeKit.Text.TextFormat.Text)
        ?????{?Text?=?message.Content?};
        ?????return?mimeMessage;
        }

        用 MailKit 同步發(fā)送 Email

        為了最終能夠?qū)崿F(xiàn) email 發(fā)送,需要使用 MailKit.Net.Smtp 命名空間下的 SmtpClient 類,下面的代碼展示了具體實現(xiàn)步驟。


        using?(SmtpClient?smtpClient?=?new?SmtpClient())
        {
        ??smtpClient.Connect(_notificationMetadata.SmtpServer,
        ??_notificationMetadata.Port,?true);
        ??smtpClient.Authenticate(_notificationMetadata.UserName,
        ??_notificationMetadata.Password);
        ??smtpClient.Send(mimeMessage);
        ??smtpClient.Disconnect(true);
        }

        為了方便起見,我就把完整的發(fā)送 Email 代碼放在 ?DefaultController.Get 方法下。


        public?string?Get()
        {
        ????EmailMessage?message?=?new?EmailMessage();
        ????message.Sender?=?new?MailboxAddress("Self",?_notificationMetadata.Sender);
        ????message.Reciever?=?new?MailboxAddress("Self",?_notificationMetadata.Reciever);
        ????message.Subject?=?"Welcome";
        ????message.Content?=?"Hello?World!";
        ????var?mimeMessage?=?CreateEmailMessage(message);
        ????using?(SmtpClient?smtpClient?=?new?SmtpClient())
        ????{
        ????????smtpClient.Connect(_notificationMetadata.SmtpServer,
        ????????_notificationMetadata.Port,?true);
        ????????smtpClient.Authenticate(_notificationMetadata.UserName,
        ????????_notificationMetadata.Password);
        ????????smtpClient.Send(mimeMessage);
        ????????smtpClient.Disconnect(true);
        ????}
        ????return?"Email?sent?successfully";
        }

        用 MailKit 異步發(fā)送 Email

        上面我們用同步的方式發(fā)送 Email,這一節(jié)來看看如何使用異步的方式發(fā)送 Email。


        using?(SmtpClient?smtpClient?=?new?SmtpClient())
        ?{
        ??????await?smtpClient.ConnectAsync(_notificationMetadata.SmtpServer,
        ??????_notificationMetadata.Port,?true);
        ??????await?smtpClient.AuthenticateAsync(_notificationMetadata.UserName,
        ??????_notificationMetadata.Password);
        ??????await?smtpClient.SendAsync(mimeMessage);
        ??????await?smtpClient.DisconnectAsync(true);
        ?}

        最后值得注意的是,MailKit 除了簡單的字符串,還支持模板的方式甚至可以帶上 附件 發(fā)送,更多的 MailKit 特性我會在后面的文章中和大家去討論。

        譯文鏈接:https://www.infoworld.com/article/3534690/how-to-send-emails-in-aspnet-core.html


        瀏覽 43
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            男人和女人性生活视频 | gay性瘾小狼和健身教练 岳乱妇乱第1集 | 亚洲视频免费视频在线视频免费视频 | 91午夜影院 | 日韩成人中文字幕 | 瑟瑟综合 | 一级a做一级a做片性视频呀 | 男女网站在线观看 | 国产免费网址 | 性瘾+高H+浓肉+黄H视频 我要看91大搡逼视频 |