2014-10-26 5 views
0

В моем коде ниже я пытаюсь создать контактную форму с полями, именами, фамилиями, email, комментариями. Когда кнопка отправки нажата, мне нужно отправить электронное письмо на мой адрес Gmail. Я просмотрел множество руководств, форумов, советов со всего мира. Большая часть моего кода основана на http://ryanbutler.org/content/aspmvcform/documents/aspmvccontactform.pdf и была изменена в областях, которые, как я думал, помогут получить это функционирование на основе других статей, которые я прочитал.Отправка электронной почты через контактную форму с помощью System.Net.Mail Asp.Net MVC C#

Моя среда:

IDE: Visual Studio 2013 Экспресс для Web
Использование IIS 8 Express
развертывания пойдет на Azure
Моя ОС: Windows 8.1

Сообщение об ошибке после нажатия отправить и заполнение заполните форму:

Ошибка. Во время обработки Вашего запроса произошла ошибка.

Мои вопросы: Что-то не в порядке с моим кодом? Или проблема может быть связана не с кодом, а с сервером IIS Express или с другой областью? Я спрашиваю об этом, потому что я где-то читал, что IIS Express не поддерживает SMTP.

Контролер:

using MySite.Models; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Net.Mail; 
using System.Web; 
using System.Web.Mvc; 

namespace MySite.Controllers 
{ 
    public class SendMailerController : Controller 
    { 
     // 
     // GET: /SendMailer/ 
     public ActionResult Index() 
     { 
      return View(); 
     } 
     [HttpPost] 
     public ActionResult Contact(ContactModels c) 
     { 
      if (ModelState.IsValid) 
      { 
       try 
       { 
        MailMessage msg = new MailMessage(); 
        SmtpClient smtp = new SmtpClient(); 
        msg.To.Add("[email protected]"); 
        msg.Subject = "Contact Us"; 
        msg.Body = "First Name: " + c.FirstName; 
        msg.Body += "Last Name: " + c.LastName; 
        msg.Body += "Email: " + c.Email; 
        msg.Body += "Comments: " + c.Comment; 
        msg.IsBodyHtml = false; 
        smtp.Host = "smtp.gmail.com"; 
        smtp.Port = 25; 
        smtp.EnableSsl = true; 
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
        smtp.UseDefaultCredentials = false; // 
        smtp.Credentials = new NetworkCredential("[email protected]", "MyGmailPassword"); 
        smtp.Host = "smtp.gmail.com"; 
        smtp.Send(msg); 
        msg.Dispose(); 

        return View("Success"); 
       } 
       catch (Exception) 
       { 
        return View("Error"); 
       }  

      } 
      return View(); 

     } 
    } 
} 

ответ

1

Мои вопросы: Есть ли что-нибудь случилось с моим кодом?

Да, smtp.gmail.com требуется безопасное соединение и не доступен на порт 25. Попробуйте это:

using (var client = new SmtpClient("smtp.gmail.com", 587)) 
{ 
    client.EnableSsl = true; 
    client.UseDefaultCredentials = false; 
    client.Credentials = new NetworkCredential("MyGmailAddress", "Your Gmail Password"); 

    string body = string.Format(
     "First Name: {0}, Last Name: {1}, Email: {2}, Comment: {3}", 
     c.FirstName, 
     c.LastName, 
     c.Email, 
     c.Comment 
    ); 
    var message = new MailMessage(
     "[email protected]", 
     "[email protected]", 
     "Contact Us", 
     "mail body" 
    ); 
    message.IsBodyHtml = false; 

    client.Send(message); 
} 
+0

Спасибо, это сработало! Я немного изменил его так, как мне нужно. Еще раз спасибо. – DevTec

0

В случае, если это помогает другим, это слегка измененный код, основанный на Дарина Димитрова полезно (и быстро):

 [HttpPost] 
     public ActionResult Contact(ContactModels c) 
     { 
      string resultMsg = "There was an error submitting your message. Please try again later."; 
      if (!ModelState.IsValid) 
      { 
       return Content(resultMsg); 
      } 
      if (ModelState.IsValid) 
      { 
      using (var client = new SmtpClient("smtp.gmail.com", 587)) 
      { 
       client.EnableSsl = true; 
       client.UseDefaultCredentials = false; 
       client.Credentials = new NetworkCredential("[email protected]", "ThePassword"); 


       string body = string.Format(
        "First Name: {0}\nLast Name: {1}\nEmail: {2}\nComment: {3}", 
        c.FirstName, 
        c.LastName, 
        c.Email, 
        c.Comment 
       ); \\In this block I added a new line \n to appear better when I receive the email. 

       var message = new MailMessage(); 
       message.To.Add("[email protected]"); 
       message.From = new MailAddress(c.Email, c.Name); 
       message.Subject = String.Format("Contact Request From: {0} ", c.Name); 
       message.Body = body; 
       message.IsBodyHtml = false; 
       try 
       { 
        client.Send(message); 

       } 
       catch (Exception) 
       { 
        return View("Error"); 
       } 

      }     

     } 
     return View("Success");