从MVC 4 ASP.NET应用程序发送电子邮件

时间:2013-09-24 10:10:53

标签: c# asp.net-mvc email

我正在尝试设置简单但完整的ASP.NET MVC 4 Web应用程序,我可以在其中发送电子邮件到特定地址,我为控制器调用中的SMPT设置和代码配置web.config文件,但是我收到错误消息“未指定SMTP主机”

<system.net>
<mailSettings>
  <smtp deliveryMethod="Network" from="myEmail@hotmail.co.uk">
    <network host="smtp.live.com" port="25" userName="myEmail@hotmail.co.uk" password="myPassword" defaultCredentials="true"/>
  </smtp>
</mailSettings>

控制器类中的

var mailMessage = new MailMessage();
mailMessage.To.Add("yourEmail@hotmail.co.uk");
mailMessage.Subject = "testing 2 ";
mailMessage.Body = "Hello Mr. Aderson";
mailMessage.IsBodyHtml = false;

var smptClient = new SmtpClient { EnableSsl = false };

smptClient.Send(mailMessage);
非常感谢

7 个答案:

答案 0 :(得分:2)

在.NET + MVC / ASP中使用SMTP邮件功能的最佳方法是这个开源的codeplex库:

http://higlabo.codeplex.com/

特别是因为.NET框架中的默认交付组件完全支持所有类型的SSL / TSL等(隐式/显式模式作为关键字)

http://higlabo.codeplex.com/

答案 1 :(得分:1)

快速查看一下,您还没有设置“发件人”属性。

var mailMessage = new MailMessage();
mailMessage.To.Add("yourEmail@hotmail.co.uk");
mailMessage.From = new MailAddress("myEmail@hotmail.co.uk");
mailMessage.Subject = "testing 2 ";
mailMessage.Body = "Hello Mr. Aderson";
mailMessage.IsBodyHtml = false;

答案 2 :(得分:0)

做这样的事情

SmtpClient smtp = new  SmtpClient(ConfigurationManager.AppSettings[EFloOnline.Model.Constants.smtp], Convert.ToInt32(ConfigurationManager.AppSettings[EFloOnline.Model.Constants.smtpport]));

if (ConfigurationManager.AppSettings[EFloOnline.Model.Constants.smtpUseCredentials] == "true")
{
    smtp.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings[EFloOnline.Model.Constants.smtpusername], ConfigurationManager.AppSettings[EFloOnline.Model.Constants.smtppassword], ConfigurationManager.AppSettings[EFloOnline.Model.Constants.smtp]);
}
else
{
    smtp.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;

    if (SendTo.Count == 0)
    {
        SendTo.Add(ConfigurationManager.AppSettings[EFloOnline.Model.Constants.ToMail]);
    }

    foreach (string recipientemail in SendTo)
    {
        oEmail.To.Add(recipientemail);
        try
        {
            smtp.Send(oEmail);
        }
        catch (Exception)
        {
        }
        oEmail.To.Clear();
    }
}

答案 3 :(得分:0)

您的代码和配置看起来正确。

您确定已将system.net/mailSettings元素放在网站根目录中的web.config中吗?

常见的错误是将这些设置放在Views文件夹中的web.config中。

顺便说一句,MailMessage类实现IDisposable,.NET 4中的SmtpClient类也是如此。所以你应该将它们都包含在using块中。

答案 4 :(得分:0)

答案 5 :(得分:0)

我写了一篇关于这样做的博文。 http://www.bgsoftfactory.net/5-steps-to-send-email-with-mvcmailer-from-an-mvc-4-0-application/

我使用MVCMailer采用了更简单的方法。即使从MVC发送电子邮件非常简单,使它变得更加复杂也有点复杂,而MVCMailer允许使用剃刀模板来格式化电子邮件的正文。

使用MVCMailer可以节省一些时间。

答案 6 :(得分:0)

你错过了smptClient.Send(mailMessage);在代码的最后

var mailMessage = new MailMessage();
mailMessage.To.Add("yourEmail@hotmail.co.uk");
mailMessage.From = new MailAddress("myEmail@hotmail.co.uk");
mailMessage.Subject = "testing 2 ";
mailMessage.Body = "Hello Mr. Aderson";
mailMessage.IsBodyHtml = false;
//this what you miss
    smptClient.Send(mailMessage);
//