Ошибка отправки электронной почты через SMTP на ASP.NET MVC - PullRequest
1 голос
/ 09 февраля 2010

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

Я пробовал пару разных серверов без удачи. Я знаю, что логин / пароль хорош, потому что я его проверил. Мой хостинг-провайдер - 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("no-reply@openskymedia.com", "Website Contact Form");
                msg.To.Add("admin@openskymedia.com");
                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("postmaster2@domain.com", "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 ]

2 голосов
/ 09 февраля 2010

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

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

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

Response.Write( ex.ToString() )

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

while( ex != null ){
Response.Write( "<HR>" + ex.ToString() );
ex = ex.InnerException;
}
1 голос
/ 09 февраля 2010

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

public ActionResult Index(EmailModel emailModel)
        {
            if (ModelState.IsValid)
            {
                bool isOk = false;
                try
                {
                    MailMessage msg = new MailMessage();
                    msg.From = new MailAddress("no-reply@openskymedia.com", "Website Contact Form");
                    msg.To.Add("jasshultz@gmail.com");
                    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@domain.com", "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();
            }
        }
0 голосов
/ 09 февраля 2010

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

<system.net>
    <mailSettings>
        <smtp from="username@domain">
            <network host="localhost" />
        </smtp>
    </mailSettings>
</system.net>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...