C# 从MVC 4 ASP.NET应用程序发送电子邮件
我正在尝试设置简单但完整的ASP.NET MVC 4 web应用程序,在其中我可以向特定地址发送电子邮件,我为SMPT设置和控制器调用中的代码配置了web.config文件,但收到错误消息“未指定SMTP主机”C# 从MVC 4 ASP.NET应用程序发送电子邮件,c#,asp.net-mvc,email,C#,Asp.net Mvc,Email,我正在尝试设置简单但完整的ASP.NET MVC 4 web应用程序,在其中我可以向特定地址发送电子邮件,我为SMPT设置和控制器调用中的代码配置了web.config文件,但收到错误消息“未指定SMTP主机” 非常感谢快速查看您尚未设置“发件人”属性 var mailMessage = new MailMessage(); mailMessage.To.Add("yourEmail@hotmail.co.uk"); mailMessage.From = new MailAddress("myE
非常感谢快速查看您尚未设置“发件人”属性
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;
做这样的事
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();
}
}
您的代码和配置看起来是正确的 是否确实已将system.net/mailSettings元素放在网站根目录的web.config中 一个常见的错误是将这些设置放在Views文件夹的web.config中 顺便提一下,
MailMessage
类实现了IDisposable
,来自.NET 4的SmtpClient
类也实现了这一点。因此,您应该使用块将两者都包含在中。
- 不确定smtp.live.com是否仍然有效,但似乎没有列出它
- 我会检查端口25是否被阻止如果端口25被阻止,请尝试端口587(可能必须为587启用SSL)
我写了一篇关于这样做的博客文章。
我采用了更简单的方法,使用MVCMailer。即使从MVC发送电子邮件非常简单,但要使其变得美观也有点复杂,而MVCMailer允许使用razor模板来格式化电子邮件的正文
使用MVCMailer可以节省一些时间。在.NET+MVC/ASP中使用SMTP邮件功能的最佳方法是使用以下开源codeplex库:
尤其是由于.NET framework中默认交付的组件完全支持所有类型的SSL/TSL等(此处的关键字为隐式/显式模式)
您缺少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);
//
我在root web.config中添加了smpt配置,但没有查看一个!我必须在web.config中设置吗???
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();
}
}
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);
//