ASP.NET Core 2.2 and Angular 7 : Instructor-led online courses conducted by Bipin Joshi. Next batches starting in February 2019. Limited seats. More details are available here.

Send emails in ASP.NET Core in 5 easy steps

Sending emails is a common requirement in ASP.NET Core web applications. In this article we will learn how to send emails with attachments using a popular and open source component - MailKit. Let's get going.

Step 1 : Add MailKit NuGet package to ASP.NET Core project

MailKit is available as a NuGet package. Right click on your ASP.NET Core project and click on Manage NuGet packages. Then search for MailKit. The following figure shows the relevant entry from the NuGet package manager:

Then add the following imports in code (it could be either a controller code or any standalone class).

using MailKit.Net.Smtp;
using MimeKit;

Step 2 : Prepare an email message to be sent

Now that you have added MailKit to your ASP.NET Core project, it's time to build the email message that we want to send. An email message consists of several things such as from addresses, to address, message body and so on. Let's begin by adding from address, to address, subject, and message boxy.

A message is represented by MimeMessage class. The following code how the MimeMessage can be configured.

MimeMessage message = new MimeMessage();

MailboxAddress from = new MailboxAddress("Admin", 
"admin@example.com");
message.From.Add(from);

MailboxAddress to = new MailboxAddress("User", 
"user@example.com");
message.To.Add(to);

message.Subject = "This is email subject";

The above code creates in instance of MimeMessage, a class that represents an email message. It also uses MailboxAddress class to build a from address and a to address. The first parameter to MailboxAddress constructor is the display name of an email address whereas the second parameter is the email address itself. You should change them as per your setup.

The Subject property indicates the email subject.

Step 3 : Add email body and file attachments

Next, we need to set the message body and optionally add email attachments. The following code shows how this can be done:

BodyBuilder bodyBuilder = new BodyBuilder();
bodyBuilder.HtmlBody = "<h1>Hello World!</h1>";
bodyBuilder.TextBody = "Hello World!";

As you can see, we make use of BodyBuilder class. It has two properties namely HtmlBody and TextBox that hold the email's HTML version and text version respectively.

To attach one or more files to our message we need their physical file system paths. Instead of hard-coding the paths we will compute them using IHostingEnvironment object as shown below:

IHostingEnvironment env = null;

public HomeController(IHostingEnvironment env)
{
    this.env = env;
}
bodyBuilder.Attachments.Add(env.WebRootPath + "\\file.png");

As you can see, we wish to attach file.png to our message that resides under wwwroot. So, we injected an IHostingEnvironment object and use it's WebRootPath property to get the physical path. Then we add the file to Attachments collection of the BodyBuilder object we created earlier.

Once the BodyBuilder is ready we can generate a MimeMessage body from it as follows:

 message.Body = bodyBuilder.ToMessageBody();

The ToMessageBody() method creates a message body with HTML/Text content and attachments.

Step 4 : Connect and authenticate with the SMTP server

In order to send the email message we just created we need to connect with an SMTP server. In most of the cases you will also need security credentials to connect with the server. The following code shows how connection can be established with an SMTP server.

SmtpClient client = new SmtpClient();
client.Connect("smtp_address_here", port_here, true);
client.Authenticate("user_name_here", "pwd_here");

Here, we created an instance of SmtpClient class that represents a client to an SMTP server. We call its Connect() method and pass the SMTP server address and SMTP port. Use these settings as per your environment. The third Boolean parameter indicates whether the connection requires SSL or not.

We then proceed to call Authenticate() method that authenticates a user account with the SMTP server. The Authenticate() method accepts a user name and a password as its parameters. Change these values to suit your environment.

Step 5 : Send email message

After configuring the SMTP server connection we can now send a message and then disconnect from the server.

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

The Send() message accepts an MimeMessage as a parameter and attempts to send that message. Once a message has been sent, we can disconnect from the server using Disconnect() method. The Boolean parameter to Disconnect() indicates that we want to issue QUIT command to the server. Finally, we Displose() the SmtpClient object.

To test our code, fill valid values for from address, to address, and SMTP server configuration and then attempt to run the code.

That's it for now! Keep coding!!


Bipin Joshi is a software consultant, trainer, author, yoga mentor, and spiritual guide having 23+ years of experience in software development, consulting, and training. He conducts instructor-led online training courses in ASP.NET Core, ASP.NET MVC, and Design Patterns for individuals and small groups. He is a published author and has authored or co-authored books for Apress and Wrox press. Having embraced the Yoga way of life he also teaches Ajapa Yoga to interested individuals. To know more about him click here.

Get connected : Twitter  Facebook  Google+  LinkedIn

Posted On : 07 January 2019





Subscribe to our newsletter

Get monthly email updates about new articles, tutorials, code samples, and how-tos getting added to our knowledge base.

  

Receive Weekly Updates