Fluent Email in .NET
11 Apr 2010I have been working with sending emails with System.Net.Mail and had a few people mention they would like fluent interface. It sounded like a pretty cool idea and I also needed an excuse to learn git/github thus was born FluentEmail for .NET.
Here is a quick example of intended usage, the Smtp details if not provided using the .UsingClient(SmptClient client) method will be taken from the mailSettings config section.
var email = Email .From("[email protected]") .To("[email protected]", "bob") .Subject("hows it going bob") .Body("yo dawg, sup?"); //send normally email.Send(); //send asynchronously email.SendAsync(MailDeliveredCallback);
The fluent interface is achieved by using a builder pattern. The .From method is static and returns the underlying email object for the other methods to build upon.
public class Email : IHideObjectMembers { private SmtpClient _client; public MailMessage Message { get; set; } private Email() { Message = new MailMessage() { IsBodyHtml = true }; _client = new SmtpClient(); } public static Email From(string emailAddress, string name = "") { var email = new Email(); email.Message.From = new MailAddress(emailAddress, name); return email; } public Email To(string emailAddress, string name = "") { Message.To.Add(new MailAddress(emailAddress, name)); return this; } //other methods left out for readability }
Its early days at the moment but it does support multiple recipients, BCC and CC. Some of the things I would like to eventually include is support for bulk email sending (sending in batches) and easy support for different Smpt clients such as gmail.
You can grab/fork the code at http://github.com/lukencode/FluentEmail. Let me know if you have any comments or suggestions.