You’ve got along ASP.NET project ahead. You’re trying to wrap your head around all tasks at hand - infrastructure, business logic, admin panel, integrations. On top of that, there’s a long list of ‘could have’ type of features that the team would like to implement if time and resources allow.
One of them is adding the ability to send email in ASP.NET C# that you’ve been postponing for a while. After all, it’s such an obvious feature that might as well be left for the very end, when almost everything is up and running. Before your project goes live, you will need to validate your email workflows anyway and probably you don’t want to stay extra hours just before the launch to do so.
While sending emails with C# is not rocket science, we strongly recommend thinking about it sooner rather than later. To make it easier to start, we’ve covered the first steps with the various code samples. Let’s start!
Throughout the course of this article, we’ll often be using MailMessage
class. It’s a part of System.Net.Mail
namespace and is used to create email messages that are then sent to an SMTP server. The delivery is then taken care of by the SmtpClient
class.
For the complete set of parameters of this class, please refer to Microsoft’s documentation.
This one is fairly easy and quick to set up as SMTP (Simple Mail Transfer Protocol) is the most common communication standard used in email transmission. In the example below, we’ll show how to send a very simple email with the following details:
To: elizabeth@westminster.co.uk
From: piotr@mailtrap.io
Title: Hey what’s up?
Body: Hey Elizabeth, let’s meet for lunch on Monday, WDYT?
In order to send such an email, we’ll use the aforementioned MailMessage
class from .NET API.
Code example: https://gist.github.com/somenugget/4d72681f792d4ce751957706f995a994
Once the message was configured, we connected to the SMTP server and sent it this way!
Now that we know how to send basic emails, let’s consider a very common scenario and add an attachment to our message to the Queen of England. This could be an invoice for the last royal wedding or a set of pictures we took on that fabulous weekend.
On top of MailMessage
class, we’ll use Attachment class from .NET API. Make sure you add the attachment to the current working directory first.
Code example: https://gist.github.com/somenugget/1f1e207a4a6287bc98e2160ab2f22c77
If you need to send multiple invoices (lucky you!) or other files, simply use a loop and add the other files to the email.
We’ve just covered sending emails with attachments. But what if you’re sending images but want them displayed inline rather than being attached to an email. Certainly, it will be easier to attract the Queen’s attention this way. With a bit of modification of our previous code, this can be easily achieved.
When trying to send an email with images in C#, you’re not going to use a typical <img src="" alt="" />
construction. It would add an image attachment to the email and that’s the last thing we need right now. Instead, we’ll use LinkedResource
object to directly embed an image in the HTML version of our message to the Queen. We will then follow our regular approach with MailMessage
class.
As always, remember to upload the file first to your current working directory. If it’s missing, an email will be sent without any attachment and, really, aren’t we receiving these “oops, forgot about the attachment!” emails too often already?
Code example: https://gist.github.com/somenugget/159f50f75992ac260e4b210ef00500d3
No rocket science here either. Let’s go back to the original email we’ve sent to our noble recipient.
To: elizabeth@westminster.co.uk
From: piotr@mailtrap.io
Title: Hey what’s up?
Body: Hey Elizabeth, let’s meet for lunch on Monday, WDYT?
Let’s say we want to have a bit bigger lunch party than originally planned, we’re going to talk about the Royal Wedding after all. Let’s keep Prince Harry and his wife Meghan in the loop. New recipients are simply added to the code, separated by a comma. As in the example below.
Code example: https://gist.github.com/somenugget/3bf0fa9bdcfcab8380ab18966ce90236
Things get a tiny bit more tricky when you want to add people in bcc and cc, we’ll need a few additional lines:
Code example: https://gist.github.com/somenugget/61da713b74e05e5382e59832ffdd2a8b
Voila!
Let’s consider a situation when you don’t have (or don’t want to have) an SMTP server configured but still want to send an email in C#.
The first option is to do a DNS MX lookup of the email address that you’re trying to send an email to. This allows you to figure out what the SMTP server is and connect to it. So, you’re still going to use an SMTP server, just not yours!
We don’t, however, recommend such an approach for several reasons:
Compared to other methods, querying DNS manually consumes more CPU and networking, making the performance worse
In order to implement it, you’ll need to install a 3rd party plugin. DnsPlugin.NET is our choice here.
Code example: https://gist.github.com/somenugget/42f49106d02866dd621dbba9139c8fe3
To dive deeper into the topic, you should check a complete tutorial Send and Receive Emails in ASP.NET C#
Photo by Simone Hutsch on Unsplash
#aspdotnet #csharp