Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

asp.net mvc 4 Send form from site to email

I have feedback form on my mvc site, it looks like

enter image description here

and I need to send my form to email.

I created model for my form

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Web;

 namespace ComponentTrading.Web.Models
 {
public class FeedbackForm
    {
    public string Name { get; set; } 
    public string Email { get; set; } 
    public string Phone { get; set; }
    public string Message { get; set; }
    }
}

I created view for my form Contacts.cshtml

 @using (Html.BeginForm("Contacts", "Home", FormMethod.Post, new { id = "contact-form" }))
{
<fieldset>
    @Html.TextBoxFor(model => model.Name, new { @Value = Name })
    @Html.TextBoxFor(model => model.Email, new { @Value = "E-mail" })
    @Html.TextBoxFor(model => model.Phone, new { @Value = Phone })
    @Html.TextAreaFor(model => model.Message, new { @class = "img-shadow" })
    <input class="form-button" data-type="reset" value="Clear" />
    <input class="form-button" data-type="submit" type="submit" value="Send" />
</fieldset>     
}

And I wrote this code at my controller

    [HttpGet]
    public ActionResult Contacts()
    {
        FeedbackForm temp = new FeedbackForm();
        temp.Message = @Resources.Global.Contacts_Form_Message_Field;
        return View(temp);
    }


    [HttpPost]
    public ActionResult Contacts(FeedbackForm Model)
    {
        string Text = "<html> <head> </head>" +
        " <body style= \" font-size:12px; font-family: Arial\">"+
        Model.Message+
        "</body></html>";

        SendEmail("[email protected]", Text);
        FeedbackForm tempForm = new FeedbackForm();
        return View(tempForm);
    }


    public static bool SendEmail(string SentTo, string Text)
    {
        MailMessage msg = new MailMessage();

        msg.From = new MailAddress("[email protected]");
        msg.To.Add(SentTo);
        msg.Subject = "Password";
        msg.Body = Text;
        msg.Priority = MailPriority.High;
        msg.IsBodyHtml = true;

        SmtpClient client = new SmtpClient("smtp.mail.ru", 25);



        client.UseDefaultCredentials = false;
        client.EnableSsl = false;
        client.Credentials = new NetworkCredential("TestLogin", "TestPassword");
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        //client.EnableSsl = true;

        try
        {
            client.Send(msg);
        }
        catch (Exception)
        {
            return false;
        }
        return true;
    }

I dont have any errors at my code, but when I push Send button, I dont get email and my form doesnt become clear.

I used Fiddler Web Debugger and I got for Send-button click enter image description here

As I see, it means all right, so I cant undersnand what's wrong?

like image 587
Heidel Avatar asked Oct 21 '22 09:10

Heidel


2 Answers

I have copy-pasted your code and got it to work, with some small modifications:

  1. I did not set the Credentials property
  2. I modified the template to remove the @Value attribute:

    @Html.TextBoxFor(model => model.Name) @Html.TextBoxFor(model => model.Email) @Html.TextBoxFor(model => model.Phone)

These are the only changes I made and I got your application to work. This leads me to believe that there must be something wrong in your SMTP client's configuration. Can you examine the exception that is thrown by client.Send(msg);? I expect it will say something about invalid network credentials or something like that.

like image 134
Erik Schierboom Avatar answered Oct 29 '22 21:10

Erik Schierboom


Change

catch (Exception)
    {
        return false;
    }

To

catch (Exception ex)
    {
// breakpoint here, inspect ex
        return false;
    }
like image 22
CodeCaster Avatar answered Oct 29 '22 21:10

CodeCaster