2010-02-09 2 views
1

Я пытаюсь отправить электронную почту с моего сайта с помощью SMTP. Я получаю сообщение об ошибке, когда я это делаю. Я тестировал его локально, используя мой SMTP-сервер ISP, и он отлично работал. Теперь, когда я нахожусь в Интернете, хотя это не так. Я не уверен, что ошибка, которую я получаю, другая, тогда она не работает, и я получаю сообщение об ошибке, которое я запрограммировал на сайте. Вы можете увидеть мой код ниже.Ошибка отправки электронной почты через SMTP на ASP.NET MVC

Я пробовал пару разных серверов без везения. Я знаю, что логин/пароль хорош, потому что я его проверил. Мой хостинг-провайдер - winhost, но моя электронная почта проходит через gmail. Итак, я настраиваю учетную запись на godaddy, которая позволяет 250 реле.

public class EmailMeController : Controller 
{ 
    // 
    // GET: /EmailMe/ 

    [AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Index(EmailModel emailModel) 
    { 
     if (ModelState.IsValid) 
     { 
      bool isOk = false; 
      try 
      { 
       MailMessage msg = new MailMessage(); 
       msg.From = new MailAddress("[email protected]", "Website Contact Form"); 
       msg.To.Add("[email protected]"); 
       msg.Subject = emailModel.Subject; 
       string body = "Name: " + emailModel.Name + "\n" 
          + "Email: " + emailModel.EmailAddress + "\n" 
          + "Website: " + emailModel.WebSite + "\n" 
          + "Phone: " + emailModel.Phone + "\n\n" 
          + emailModel.Message; 

       msg.Body = body; 
       msg.IsBodyHtml = false; 

       SmtpClient smtp = new SmtpClient("smtp.secureserver.net", 80); 
       NetworkCredential Credentials = new NetworkCredential("[email protected]", "password"); 
       smtp.Credentials = Credentials; 

       smtp.Send(msg); 

       msg.Dispose(); 

       isOk = true; 

       MessageModel rcpt = new MessageModel(); 
       rcpt.Title = "Thank You"; 
       rcpt.Content = "Your email has been sent."; 
       return View("Message", rcpt); 
      } 
      catch (Exception ex) 
      { 
      } 

      // If we are here...something kicked us into the exception. 
      // 
      MessageModel err = new MessageModel(); 
      err.Title = "Email Error"; 
      err.Content = "The website is having an issue with sending email at this time. Sorry for the inconvenience. My email address is provided on the about page."; 
      return View("Message", err); 
     } 
     else 
     { 
      return View(); 
     } 
    } 


} 

http://pastebin.com/m400a9aa4

+3

Нет сообщений об ошибке, вероятно, нет ответа. Избавьтесь от этого пустого 'catch' прямо сейчас и замените его, по крайней мере, на какой-то журнал; Таким образом, вы узнаете, что такое ошибка. – Aaronaught

+0

Я не знаю, как зарегистрировать ошибку. Кроме того, я проверил это снова сегодня утром, используя тот же код как локально на cassini, так и удаленно на реальном сервере. он работает локально, но не работает удаленно. Ничего не меняется, включая информацию smtp. –

+0

Я смог получить ошибку, это было довольно долго (дольше то, что поместилось бы в поле, поэтому я скопировал/вставил его здесь: drop.io/xsvslel/asset/error-log –

ответ

1

Решение проблемы состояло в этом. Я закончил использование winhosts SMTP. Моя электронная почта размещена в Google. Я не мог отправить на адрес электронной почты, который был того же домена, что и моя хостинговая компания, потому что он сначала посмотрел на адрес электронной почты. Когда он не нашел его, он ошибся. Вместо этого я должен был отправить электронное письмо на мою учетную запись gmail, которая затем перенаправляется на мой адрес openskymedia на основе адреса возврата и некоторого текста в письме. Это немного запутанно, но это сработало. Приведенный ниже код смог работать для меня, чтобы отправить электронное письмо из формы и работать очень красиво.

public ActionResult Index(EmailModel emailModel) 
     { 
      if (ModelState.IsValid) 
      { 
       bool isOk = false; 
       try 
       { 
        MailMessage msg = new MailMessage(); 
        msg.From = new MailAddress("[email protected]", "Website Contact Form"); 
        msg.To.Add("[email protected]"); 
        msg.Subject = emailModel.Subject; 
        string body = "Name: " + emailModel.Name + "\n" 
           + "Email: " + emailModel.EmailAddress + "\n" 
           + "Website: " + emailModel.WebSite + "\n" 
           + "Phone: " + emailModel.Phone + "\n\n" 
           + emailModel.Message; 

        msg.Body = body; 
        msg.IsBodyHtml = false; 

        SmtpClient smtp = new SmtpClient("your.server.com"); 
        NetworkCredential Credentials = new NetworkCredential("[email protected]", "password"); 
        smtp.Credentials = Credentials; 

        smtp.Send(msg); 

        msg.Dispose(); 

        isOk = true; 

        MessageModel rcpt = new MessageModel(); 
        rcpt.Title = "Thank You"; 
        rcpt.Content = "Your email has been sent."; 
        return View("Message", rcpt); 
       } 
       catch (Exception ex) 
       { 
        //while (ex != null) 
        //{ 
        // Response.Write("<HR>" + ex.ToString()); 
        // ex = ex.InnerException; 
        //} 

       } 

       // If we are here...something kicked us into the exception. 
       // 
       MessageModel err = new MessageModel(); 
       err.Title = "Email Error"; 
       err.Content = "The website is having an issue with sending email at this time. Sorry for the inconvenience. My email address is provided on the about page."; 
       return View("Message", err); 
      } 
      else 
      { 
       return View(); 
      } 
     } 
2

вы глотания свои исключения. В этом поймать блока:

61.    catch (Exception ex) 
62.    { 
63.    } 

Просто напишите ошибку:

Response.Write(ex.ToString()) 

Кроме того, убедитесь, что петли через любые внутренние исключения, как:

while(ex != null){ 
Response.Write("<HR>" + ex.ToString()); 
ex = ex.InnerException; 
} 
+0

Я смог получить ошибку , это было довольно долго (дольше то, что поместилось бы в коробке, поэтому я копирую/вставляю его здесь: http://drop.io/xsvslel/asset/error-log –

+0

Благодаря вашим советам я смог получить проблему –

+0

Хорошо, это немного помогает. В нижней строке вашего приложения нет доступа к пространству имен System.Net.Mail. Вы должны предоставить ему разрешения. Я недостаточно знаю о вашей настройке , но вот ссылка google, чтобы вы начали: http://www.google.com/search?hl=ru&rls=GGLF%2CGGLF%3A1969-53%2CGGLF%3Aen&q=Request+for+the+permission+ of + type + System.Net.Mail.SmtpPermission + failed & btnG = Search & aq = f & aqi = & oq = –

0

Помимо делать то, что Дейв рассказывая вам, вы пытались использовать локальный iis как smtp-сервер? Вы можете сделать это в файле web.config в разделе system.net.

<system.net> 
    <mailSettings> 
     <smtp from="[email protected]"> 
      <network host="localhost" /> 
     </smtp> 
    </mailSettings> 
</system.net> 
+0

winhost блокирует, что fu поэтому это не вариант. –