2014-08-28 3 views
4

я пытаюсь отправить некоторые простые по электронной почте, например [email protected]Отправить простой Email ASP.NET MVC, IIS7

Прежде всего, я уже пробовал в моей Localhost, и это сработало , проблема была в том, когда я загрузил его на свой сервер

Сервер, который я использую, - это сервер Windows 2012 R2, с IIS 7 (не совсем уверен в версии, но я считаю, что это 7 и выше) успешно прошел без проблема, просто метод отправки электронной почты не работает ...

Я уже добавляю функцию SMTP, устанавливаю SMTP-E-MAIL (Да, нет SMTP-сервера в IIS 7 и выше)

вот мой контроллер

public ActionResult SendTestEmail() 
{ 
    var test_address = "[email protected]"; 
    try 
    { 
     // Initialize WebMail helper 
     WebMail.SmtpServer = "localhost"; 
     WebMail.SmtpPort = 25; // Or the port you've been told to use 
     WebMail.EnableSsl = false; 
     WebMail.UserName = ""; 
     WebMail.Password = ""; 
     WebMail.From = "[email protected]"; // random email 

     WebMail.Send(to: test_address, 
      subject: "Test email message", 
      body: "This is a debug email message" 
     ); 
    } 
    catch (Exception ex) 
    { 
     ViewBag.errorMessage = ex.Message; // catch error 
    } 

    return View(); 
} 

здесь мои настройки SMTP электронной почты: enter image description here

сообщение об ошибке являются: недоступен почтовый ящик. Ответ сервера был: 5.7.1 Не удалось передать для [email protected] (это происходит, когда я оставляю текстовое поле с адресом электронной почты пустым, это также происходит, когда я ввожу любой почтовый формат, например [email protected]/мой основной адрес электронной почты)

+0

Это обычно вызвано неправильной регистрацией. есть ли пользователь, указанный для smtp? – user1666620

+0

hmmm ... вы имеете в виду имя пользователя и пароль, которые я использую для доступа к серверу? Если у меня есть случай, но для smtp я думаю, что у меня его нет. – user3848402

+0

Да, иногда пользователь домена должен указываться в зависимости от настроек. Также взгляните на это: http://stackoverflow.com/questions/3165721/mailbox-unavailable-the-server-response-was-5-7-1-unable-to-relay-for-abcxyz – user1666620

ответ

3

вы должны установить параметры Smtp к реальному серверу SMTP ....

Try some smtp servers off this list, если у вас нет доступа к своему усмотрению ...

Вот хороший бит кода для вас ... Taken from here

MailModel.cs

public class MailModel 
{ 
    public string From { get; set; } 
    public string To { get; set; } 
    public string Subject { get; set; } 
    public string Body { get; set; } 
} 

SendMailerController.cs - Обратите внимание, где параметры SMTP указаны

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

namespace SendMail.Controllers 
{ 
    public class SendMailerController : Controller 
    { 
     // GET: /SendMailer/ 
     public ActionResult Index() 
     { 
      return View(); 
     } 

     [HttpPost] 
     public ViewResult Index(SendMail.Models.MailModel _objModelMail) 
     { 
      if (ModelState.IsValid) 
      { 
       MailMessage mail = new MailMessage(); 
       mail.To.Add(_objModelMail.To); 
       mail.From = new MailAddress(_objModelMail.From); 
       mail.Subject = _objModelMail.Subject; 
       string Body = _objModelMail.Body; 
       mail.Body = Body; 
       mail.IsBodyHtml = true; 

       SmtpClient smtp = new SmtpClient(); 
       smtp.Host = "smtp.gmail.com"; 
       smtp.Port = 587; 
       smtp.UseDefaultCredentials = false; 
       smtp.Credentials = new System.Net.NetworkCredential 
       ("username", "password");// Enter senders User name and password 
       smtp.EnableSsl = false; 
       smtp.Send(mail); 

       return View("Index", _objModelMail); 
      } 
      else 
      { 
       return View(); 
      } 
     } 
    } 
} 

Index.cshtml

@model SendMail.Models.MailModel 
@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 
<fieldset> 
    <legend>Send Email</legend> 
    @using (Html.BeginForm()) 
    { 
     @Html.ValidationSummary() 
     <p>From: </p> 
     <p>@Html.TextBoxFor(m=>m.From)</p> 
     <p>To: </p> 
     <p>@Html.TextBoxFor(m=>m.To)</p> 
     <p>Subject: </p> 
     <p>@Html.TextBoxFor(m=>m.Subject)</p> 
     <p>Body: </p> 
     <p>@Html.TextAreaFor(m=>m.Body)</p> 
     <input type ="submit" value ="Send" /> 
    } 
</fieldset> 

UPDATE How to setup SMTP server on IIS7

  1. start-> административный инструмент-> серверный менеджер, перейдите к функциям, выберите «добавить функции», отметьте «smtp-сервер» (если он еще не установлен), выберите установку необходимых «удаленных серверов» "

  2. проверить, чтобы убедиться, что работает служба« Simple Mail Transfer Protocol (SMTP) », если это так, мы будем рады.

  3. старт-> административные инструменты> интернет-услуги (iis) 6.0

  4. убедитесь, что виртуальный сервер SMTP сервер/по умолчанию работает, если нет, то щелкните правой кнопкой мыши, а затем выберите «Пуск»

  5. в IIS7, перейти на сайт виртуального каталога /, дважды щелкните «SMTP E -mail», нажмите на„Доставлять почту на сервер SMTP“, установите флажок„использовать локальный“галочка

+0

Спасибо за ваш ответ, очень оцененный, я пробовал этот метод, и он работает, но он использует gmail smtp, и я хочу использовать свой SMT-сервер ... Я не знаю, может ли на моем сервере smtp-сервер или нет, хотя ... во всяком случае thx: D – user3848402

+0

Но я думал, вы сказали, что у вас нет данных для вашего SMTP-сервера? –

+0

извините за поздний ответ, после обсуждения с моим менеджером он согласен использовать gmail smtp, но для временного использования ... я использую ваш код, следуйте всем шагам, но возврату исключений: для SMTP-сервера требуется безопасное соединение или клиент не был аутентифицирован. Ответ сервера: 5.5.1 Требуется аутентификация. Подробнее ... – user3848402

1

Почему бы не попробовать использовать Gmail для электронной почты отправителя? Он прост в использовании.

Я всегда просто построить простой метод

public void SendEmail() 
{ 
    MailMessage mail = new MailMessage("[email protected]", "sendTo", "mailSubject", "mailBody"); 
    mail.From = new MailAddress("[email protected]", "nameEmail"); 
    mail.IsBodyHtml = true; // necessary if you're using html email 

    NetworkCredential credential = new NetworkCredential("[email protected]", "xxxxx"); 
    SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); 
    smtp.EnableSsl = true; 
    smtp.UseDefaultCredentials = false; 
    smtp.Credentials = credential; 
    smtp.Send(mail); 
} 

Просто используйте async/await если вы хотите ждать электронной почты, отправляемой.

Смежные вопросы