Automation Testing sending Email Using MailKit (.NET Core) and verifying that it has been sent.
Recently I had a requirement to send emails to a specified inbox as part of a larger test case.
Although I found tutorials that helped me complete this task they were geared towards different solutions (i.e. not Automation testing) so I had to extract what I needed and build from there. Many C# Automation Frameworks are built as class libraries and therefore would not necessarily use files like
appsettings.json and the like.
I am creating this tutorial to hopefully assist any Automation Engineer who is looking for simple solution for programmatically sending an SMTP email using MailKit.
.NET Core 3.1 SDK
NUnit (or your preferred testing framework)
After reading through the articles mentioned I decided to start by defining two property classes in a folder I simply called
Mail. These property files will be able to host environment variables as well as test scenario specific content as needed. Please note that with the
SmtpSettings.cs file you will need to also import
using MailKit.Security; to handle the
Note, if you do not wish to instantiate some of these values every time, you can just assign some property defaults as needed. Example:
With those files in place I setup a class called
SendSmtpEmail drawing from the MailKit example referenced in the introduction.
It contains a method called
SendEmail that returns a Boolean based on mail send success. The method return is important for automation execution as when a mail is not successfully sent you would rather have your test case fail immediately, than go on and fail further along the way.
You should notice some optional log lines above, use (or don’t use) your own logger as needed.
Your imports at this stage should look something like this:
The Test Layer, tying this together
From an implementation point of view the test layer can be done in multiple ways from a
Teardown point of view so I will not focus on this, an example containing the main concepts discussed above should contain:
Please ignore references you might notice to my
sessionVariables as this is not a requirement to this tutorial.
If you need me to add this to a public Git repository please do let me know in the comments.
I truly hope this guide proves to be useful to some of you!