我有一个客户需要填写的表格。提交表单后,我希望将表单索引视图(名字,姓氏,电话号码等)中的基本信息发送到电子邮件。我目前正在使用GoDaddy作为我的托管网站。这有关系,还是我可以直接从我的MVC应用程序发送电子邮件?我的模型,视图,控制器有以下内容。我之前从未这样做过,我真的不确定如何去做。
型号:
public class Application
{
public int Id { get; set; }
[DisplayName("Marital Status")]
public bool? MaritalStatus { get; set; }
[Required]
[DisplayName("First Name")]
public string FirstName { get; set; }
[DisplayName("Middle Initial")]
public string MiddleInitial { get; set; }
[Required]
[DisplayName("Last Name")]
public string LastName { get; set; }
}
控制器:
public ActionResult Index()
{
return View();
}
// POST: Applications/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index([Bind(Include = "Id,FirstName,MiddleInitial,LastName")] Application application)
{
ViewBag.SubmitDate = DateTime.Now;
if (ModelState.IsValid)
{
application.GetDate = DateTime.Now;
db.Applications.Add(application);
db.SaveChanges();
return RedirectToAction("Thanks");
}
return View(application);
}
查看
<table class="table table-striped">
<tr>
<th>
@Html.ActionLink("First Name", "Index", new { sortOrder = ViewBag.NameSortParm })
</th>
<th>
@Html.ActionLink("Last Name", "Index", new { sortOrder = ViewBag.NameSortParm })
</th>
<th>
@Html.ActionLink("Date Submitted", "Index", new { sortOrder = ViewBag.NameSortParm})
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.GetDate)
</td>
</tr>
}
答案 0 :(得分:28)
您需要一台SMTP服务器才能发送电子邮件。不知道GoDaddy是如何运作的,但我确信他们会提供一些东西。
要从MVC应用发送电子邮件,您可以在代码或web.config
中指定SMTP详细信息。我建议在配置文件中,因为它意味着更容易更改。随着web.config中的所有内容:
SmtpClient client=new SmtpClient();
否则,请在代码中执行:
SmtpClient client=new SmtpClient("some.server.com");
//If you need to authenticate
client.Credentials=new NetworkCredential("username", "password");
现在您创建消息:
MailMessage mailMessage = new MailMessage();
mailMessage.From = "someone@somewhere.com";
mailMessage.To.Add("someone.else@somewhere-else.com");
mailMessage.Subject = "Hello There";
mailMessage.Body = "Hello my friend!";
最后发送:
client.Send(mailMessage);
web.config
设置的示例:
<system.net>
<mailSettings>
<smtp>
<network host="your.smtp.server.com" port="25" />
</smtp>
</mailSettings>
</system.net>
答案 1 :(得分:6)
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ContactDees(FormCollection form)
{
EmailBusiness me = new EmailBusiness();
//string message = Session["Urgent Message"].ToString();
string from = form["from"];
string subj = form["sub"];
string body = form["body"];
me.from = new MailAddress(from);
me.sub = subj;
me.body = body;
me.ToAdmin();
return RedirectToAction("Feedback", "First");}
public class EmailBusiness
{
public MailAddress to { get; set; }
public MailAddress from { get; set; }
public string sub { get; set; }
public string body { get; set; }
public string ToAdmin()
{
string feedback = "";
EmailBusiness me = new EmailBusiness();
var m = new MailMessage()
{
Subject = sub,
Body = body,
IsBodyHtml = true
};
to = new MailAddress("21241112@dut4life.ac.za", "Administrator");
m.To.Add(to);
m.From = new MailAddress(from.ToString());
m.Sender = to;
SmtpClient smtp = new SmtpClient
{
Host = "pod51014.outlook.com",
Port = 587,
Credentials = new NetworkCredential("21241112@dut4life.ac.za", "Dut930611"),
EnableSsl = true
};
try
{
smtp.Send(m);
feedback = "Message sent to insurance";
}
catch (Exception e)
{
feedback = "Message not sent retry" + e.Message;
}
return feedback;
}
}
<div class="form-horizontal">
<div class="form-group">
@Html.LabelFor(m => m.From, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.From, new { @class = "form-control MakeWidth" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Subject, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.Subject, new { @class = "form-control MakeWidth" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Body, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.TextAreaFor(m => m.Body, new { @class = "form-control MakeWidth" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-primary" value="Send Email" />
</div>
</div>
</div>
答案 2 :(得分:3)
网络配置:
<system.net>
<mailSettings>
<smtp from="you@outlook.com">
<network host="smtp-mail.outlook.com"
port="587"
userName="you@outlook.com"
password="password"
enableSsl="true" />
</smtp>
</mailSettings>
</system.net>
<强>控制器:强>
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Contact(EmailFormModel model)
{
if (ModelState.IsValid)
{
var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
var message = new MailMessage();
message.To.Add(new MailAddress("name@gmail.com")); //replace with valid value
message.Subject = "Your email subject";
message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
message.IsBodyHtml = true;
using (var smtp = new SmtpClient())
{
await smtp.SendMailAsync(message);
return RedirectToAction("Sent");
}
}
return View(model);
}
答案 3 :(得分:1)
// This example uses SendGrid SMTP via Microsoft Azure
// The SendGrid userid and password are hidden as environment variables
private async Task configSendGridasyncAsync(IdentityMessage message)
{
SmtpClient client = new SmtpClient("smtp.sendgrid.net");
var password = Environment.GetEnvironmentVariable("SendGridAzurePassword");
var user = Environment.GetEnvironmentVariable("SendGridAzureUser");
client.Credentials = new NetworkCredential(user, password);
var mailMessage = new MailMessage();
mailMessage.From = new MailAddress("itsme@domain.type", "It's Me"); ;
mailMessage.To.Add(message.Destination);
mailMessage.Subject = message.Subject;
mailMessage.Body = message.Body;
mailMessage.IsBodyHtml = true;
await client.SendMailAsync(mailMessage);
await Task.FromResult(0);
}
答案 4 :(得分:0)
public static async Task SendMail(string to, string subject, string body)
{
var message = new MailMessage();
message.To.Add(new MailAddress(to));
message.From = new MailAddress(WebConfigurationManager.AppSettings["AdminUser"]);
message.Subject = subject;
message.Body = body;
message.IsBodyHtml = true;
using (var smtp = new SmtpClient())
{
var credential = new NetworkCredential
{
UserName = WebConfigurationManager.AppSettings["AdminUser"],
Password = WebConfigurationManager.AppSettings["AdminPassWord"]
};
smtp.Credentials = credential;
smtp.Host = WebConfigurationManager.AppSettings["SMTPName"];
smtp.Port = int.Parse(WebConfigurationManager.AppSettings["SMTPPort"]);
smtp.EnableSsl = true;
await smtp.SendMailAsync(message);
}
}