Gunnar Peipman's ASP.NET blog

ASP.NET, C#, SharePoint, SQL Server and general software development topics.

Sponsors

News

 
 
 
DZone MVB

Links

Social

ASP.NET MVC 3 Beta: Using WebMail helper to send e-mail

This far I have blogged about WebImage and Chart helpers. Now let’s see another new helper – WebMail – that you can easily use to send e-mails. WebMail is easy to configure and extremely easy to use. In this posting I will show you simple feedback form that uses WebMail to send feedback messages.

Source code

You can find source code of this example from Visual Studio 2010 experiments repository at GitHub.

Source code @ GitHub Source code repository
GitHub

Example is located in Experiments.AspNetMvc3NewFeatures.Razor project.

Feedback view

As a first thing let’s create view for feedback form. I am using Razor view engine in this posting. Feedback view is really simple. It contains fields that user must fill and validation message that is shown when something is wrong.


@model dynamic
 
@{
    View.Title = "Feedback";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
 
    <h2>Feedback</h2>
 
    <p>@Html.ValidationMessage("_FORM")</p>
 
    @using(Html.BeginForm()) {
        <table>
        <tr>
            <td>Your e-mail:</td>
            <td>@Html.TextBox("email")</td>
        </tr>
        <tr>
            <td>Subject:</td>
            <td>@Html.TextBox("subject")</td>
        </tr>
        <tr>
            <td>Body:</td>
            <td>@Html.TextArea("body")</td>
        </tr>
        </table>
        <input type="submit" value="Send" />
    }

To be honest I have used no validation in this example. Validation message for _FORM is used to show exceptions when something went wrong. It makes it easier for you to play with this example.

This is our feedback form

Sending e-mail using WebMail

Before we start sending e-mail I show you two controller actions. There actions are used to show feedback form and page that is shown when e-mail is successfully sent.


[HttpGet]
public ActionResult Feedback()
{
    return View();
}
public ActionResult FeedbackSent()
{
    return View();
}


I have shown no FeedbackSent view here. I am very sure you are able to create this simple view by yourselves. :)

Now let’s take a look at controller action that uses WebMail to send e-mail. Notice how I can easily use SmtpServer static property to set the address of SMTP server. There are more static properties that let you configure WebMail helper. In the case of exception the exception is shown on feedback form with stack trace. If e-mail is sent without errors then user is redirected to FeedbackSent view where he or she can read some bla-bla-bla about when answer is expectedly sent and so on.


[HttpPost]
public ActionResult Feedback(string email, string subject, string body)
{            
    try
    {
        WebMail.SmtpServer = "my.smtp.server";
        WebMail.Send(
                "feedback[at]mycompany.domain",
                subject,
                body,
                email
            );
 
        return RedirectToAction("FeedbackSent");
    }
    catch (Exception ex)
    {
        ViewData.ModelState.AddModelError("_FORM", ex.ToString());
    }
 
    return View();
}

And now let’s take a look what’s going on in my mailbox where I sent my test messages.

Test e-mails in my Live mailbox

Mission completed – seems like I can go to sleep now. :)

By the way, if you don’t specify sender when calling WebMail.Send() method then e-mail is sent out from DoNotReply@localhost address.

Comments

Joakim Dahl said:

What's the advantage of using that web helper compared to

SmtpClient client = new SmtpClient();

client.Send(email,"feedback[at]mycompany.domain",subject,body);

Seems to be little to gain with the helper or am I missing something?

# October 20, 2010 10:14 AM

Mike said:

Looks pretty useless to me. Move it to Futures please before we're stuck with it forever and we have to teach every new comer not to use it.

# October 20, 2010 1:42 PM

DigiMortal said:

This extension is useful when you are using WebMatrix and Razor. But you can also use it with ASP.NET MVC. There is no reason to afraid this simple class. Be more open minded, guys! :)

# October 20, 2010 2:53 PM

Carl Hörberg said:

Wow, testability is thrown right out of the window..  

# October 22, 2010 1:39 AM

DigiMortal said:

Yeah, Carl, right you are. Testability is also problem with WebImage helper because it wants image path as constructor parameter and it loads image immediately. WebMail is a little bit different but the problem solves the same way: we need some interface, wrapper class and fake class to make these helpers usable in the case of tested code.

I don't want to be sarcastic without reason but I have question: why MS releases legacy code in A.D. 2010?

# October 22, 2010 3:26 AM

Arvind Kumar said:

Nice article.

Thank you for submitting - from www.faqpanel.com

# February 26, 2011 3:16 AM

Kenny said:

So, i wanna test them without needing to up load website to web host. So how do i do

# September 5, 2011 6:53 AM

Kenny said:

How to attach file in asp.net MVC 3

# September 10, 2011 10:56 AM

bojangles said:

Great tutorial, not sure why anyone would see a problem with it??? All I wanted to do was send an email from a form in my MVC3 Razor Project and now I can. Thanks to the author, you are a champion!!!

# September 21, 2011 9:45 PM

bojangles said:

Sorry Gunnar, I just found you name on the site, right up the top left. I really need to open my eyes!

# September 21, 2011 9:54 PM

Kenny said:

I finish this code, and it works fine in my computer. But i encounter a problem when i publish my website on internet. Server give a error is:

The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn more at    

Anyone help me :(

# October 19, 2011 12:38 PM

bojangles said:

Hi Kenny,

Do you have the correct SmtpServer?

Cheers,

Mike.

# October 30, 2011 1:32 AM

Geo said:

I am on localhost, what SMTP should I use? Thanks

# February 13, 2013 6:40 AM

DigiMortal said:

You can install SMTP server that comes with IIS by example.

# February 13, 2013 6:51 AM