お客様が記入する必要があるフォームがあります。フォームが送信されたら、フォームのインデックスビューから基本情報(名、姓、電話番号など)をメールで送信します。現在、ホスティングサイトに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; }
}
Controller:
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);
}
View
<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>
}
メールを送信するには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 = "[email protected]";
mailMessage.To.Add("[email protected]");
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>
[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("[email protected]", "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("[email protected]", "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>
Web構成:
<system.net>
<mailSettings>
<smtp from="[email protected]">
<network Host="smtp-mail.Outlook.com"
port="587"
userName="[email protected]"
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("[email protected]")); //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);
}
// 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("[email protected]", "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);
}
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);
}
}