Home  >  Article  >  Backend Development  >  Detailed explanation of the code to implement email sending in .NET

Detailed explanation of the code to implement email sending in .NET

Y2J
Y2JOriginal
2017-05-12 10:09:242257browse

This article mainly introduces the method of sending emails in ASP.NET Core in detail and tells you how to send emails in ASP.NET Core. It has certain reference value. Interested friends can refer to it

Preface

We know that currently .NET Core does not support the SMTP protocol. When we use the function of sending emails, we need to use some third-party components to achieve it. Purpose, today I will introduce to you two open source email sending components, namely MailKit and FluentEmail. I will introduce them respectively below.

MailKit

In ASP.NET Core, you can use MailKit to send emails. It supports cross-platform and supports IMAP, POP3, SMTP and other protocols.

You can use the following methodInstallation:

Install-Package MailKit

The following is a simple Example of sending an email:

var message = new MimeMessage ();
message.From.Add (new MailboxAddress ("Joey Tribbiani", "joey@friends.com"));
message.To.Add (new MailboxAddress ("Mrs. Chanandler Bong", "chandler@friends.com"));

message.Subject = "星期天去哪里玩?";

message.Body = new TextPart ("plain") { Text = "我想去故宫玩,如何" };

using (var client = new SmtpClient ()) {
 // For demo-purposes, accept all SSL certificates (in case the server supports STARTTLS)
 client.ServerCertificateValidationCallback = (s,c,h,e) => true;

 client.Connect ("smtp.friends.com", 587, false);

 // Note: since we don't have an OAuth2 token, disable
 // the XOAUTH2 authentication mechanism.
 client.AuthenticationMechanisms.Remove ("XOAUTH2");

 // Note: only needed if the SMTP server requires authentication
 client.Authenticate ("joey", "password");

 client.Send (message);
 client.Disconnect (true);
}

If the Body content you want to send is HTML, you can use the following:

var bodyBuilder = new BodyBuilder();
bodyBuilder.HtmlBody = @"<b>This is bold and this is <i>italic</i></b>";
message.Body = bodyBuilder.ToMessageBody();

Fluent Email

Fluent Email is also an open source project. With it, you can use the Razor template to send emails, and you can integrate some third-party email sending programs such as Mailgun, etc., but this package is only available under .NET 4.6 Only supports SMTP. You can use the following command to install it:

Install-Package FluentEmail.Razor

You can use the most basic way to send emails, it is as simple as the following :

//注意: .NET 4.6 才支持
Email.DefaultSender = new SmtpSender();

var email = Email
 .From("foo@email.com")
 .To("bar@email.com", "bob")
 .Subject("星期天去哪里玩?")
 .Body("我想去故宫玩,如何?");

await email.SendAsync();

Alternatively, you can use the Razor template to send:

//注意: .NET 4.6 才支持
Email.DefaultSender = new SmtpSender();

// Using Razor templating package
Email.DefaultRenderer = new RazorRenderer();

var template = "Dear @Model.Name, You are totally @Model.Compliment.";

var email = Email
 .From("bob@hotmail.com")
 .To("somedude@gmail.com")
 .Subject("woo nuget")
 .UsingTemplate(template, new { Name = "Luke", Compliment = "Awesome" });

Email.DefaultRenderer tells FulentEmail which renderer to use (you also You can implement your own), and then provide a template template whose content is Razor syntax template string , and then use UsingTemplate for rendering.

cshtml template on disk

Add to your email Razor template file is relatively large, and it is not elegant to express it with a string, then you can put the template file in to the disk, and then load it using the following method:

//注意: .NET 4.6 才支持
Email.DefaultSender = new SmtpSender();

Email.DefaultRenderer = new RazorRenderer();

var email = Email
 .From("foo@email.com")
 .To("bar@email.com", "bob")
 .Subject("星期天去哪里玩?")
 .UsingTemplateFromFile($"{Directory.GetCurrentDirectory}/EmailTemplage.cshtml", new {Name ="Luke"})

Use Mailgun to send mail

There may be some people who are not clear about Mailgun. Mailgun is a foreign Email service companies, such as the famous Github email service, are hosted on it. The free Maingun account can send 10,000 emails per month, which is enough for many small and medium-sized websites.

When using Mailgun to send emails, you first need to register an account, and then you can use the Rest API provided by Mailgun to manage the emails sent or received. To use FluentEmail integrated Mailgun, you only need to add the following package:

Install-Package FluentEmail.Mailgun

After registering Mailgun, you will be assigned an API Key and a second-level domain name. In the program, you need the following configuration:

// 同时支持 .NET Core 和 .NET Framework
var sender = new MailgunSender(
 "sandboxcf5f41bbf2f84f15a386c60e253b5fe8.mailgun.org", // Mailgun 二级域名
 "key-8d32c046d7f14ada8d5ba8253e3e30df" // Mailgun API Key
);

Email.DefaultSender = sender;

var email = Email
 .From("foo@email.com")
 .To("bar@email.com", "bob")
 .Subject("星期天去哪里玩?")
 .Body("我想去故宫玩,如何?");

await email.SendAsync();

Summary

Through the above example we can see that MailKit and FluentEmail Each has advantages and disadvantages. The advantage of MailKit is that it supports many protocols and is cross-platform, but the disadvantage is that it does not provide support for Razor, and if you use Mailgun, you need to integrate it yourself. The advantage of FlentEmail is that it provides support for Razor templates and encapsulates Mailgun. The disadvantage is that the SMTP protocol does not yet provide support for .NET Core.

To sum up, if you use Mailgun to send emails, then FluentEmail is the one you should choose. If you want to use the SMTP protocol to connect to your own mail server to send emails, then you should use MailKit .

【Related Recommendations】

1. ASP Free Video Tutorial

2. ASP Tutorial

3. Li Yanhui ASP basic video tutorial

The above is the detailed content of Detailed explanation of the code to implement email sending in .NET. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn