Microsoft Docs、Getting Startedチュートリアル、および多くのスタックオーバーフロー検索でASP.NETコアを学習するのに過去2〜3週間を費やしました。私はチュートリアルから単純なWebアプリケーションを作成することで得ることができますが、私の外にあるものは私のために機能する関数を作成することと、アプリケーションのさまざまな部分から変数にアクセスする方法です。MailKitを使用してMVCコントローラにフォームデータを送信する方法
私の問題:ASP.NETコアとMailKit(メールクライアントライブラリ)を使用して
。いくつかは知っているかもしれないが、彼らは最近ASP.NET CoreからSystem.Net.Mail
を削除したので、代わりにMailKitを使用することに決めました。
私は、それぞれの対応するコードスニペットの下で私が追い払った質問のいくつかを明確にしたいと思います。
マイセットアップ:
- wwwrootの
- コントローラ
- HomeController.cs
- モデル
- Mail.cs
- ビュー
- ホーム
- Index.cshtml
- 共有
- _Layout.cshtml
- ホーム
すべてのファイルがすべてのフォルダに含まれていませんでした。私はこの質問に関連すると思うものだけを示しました。
ビュー:Index.cshtml私は私の内SubmitInput
機能にIndex.cshtml
から作られた情報を送信するにはどうすればよい
<form asp-controller="Home" asp-action="SubmitInput" method="post">
<input asp-for="Name" required />
<input asp-for="Email" required />
<input asp-for="CompanyName" required />
<input asp-for="Website" required />
<textarea asp-for="Message"></textarea>
<button type="submit">Submit</button>
</form>
HomeController.cs
コントローラ:HomeController.cs
namespace Project.Controllers
{
public class HomeController : Controller
{
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult SubmitInput()
{
string fromEmail = Email,
fromName = Name,
toEmail = "[email protected]",
subject = "ASP.NET Core with MailKit"
content = Message
site = Website,
company = CompanyName;
// MailKit
Models.Mail.Send(fromEmail, fromName, toEmail, subject, content);
return View();
}
public IActionResult Index()
{
return View();
}
public IActionResult Error()
{
return View();
}
}
}
HomeController.cs
はIndex.cshtml
でフォームの送信から変数を取得する必要があります。なぜ私がフォームから値を取得していないのか分かりません。
モデル:Mail.cs
namespace Project.Models
{
public class Mail
{
public static string Send(
string fromEmail,
string fromName,
string toEmail,
string subject,
string content)
{
try
{
// Get, Set Variables
MimeMessage Email = new MimeMessage();
Email.From.Add(new MailboxAddress(fromName, fromEmail));
Email.To.Add(new MailboxAddress("", toEmail));
Email.Subject = subject;
Email.Body = new TextPart("Plain") { Text = content };
// SMTP Mail Client
using (var client = new SmtpClient())
{
// Accept all SSL certificates (in case the server supports STARTTLS)
client.ServerCertificateValidationCallback = (s, c, h, e) => true;
client.Connect(
"smtp.gmail.com",
587,
MailKit.Security.SecureSocketOptions.StartTlsWhenAvailable);
// Since we don't have an OAuth2 token, disable the XOAUTH2 authentication mechanism.
client.AuthenticationMechanisms.Remove("XOAUTH2");
// Only needed if the SMTP server requires authentication
client.Authenticate("[email protected]", "password");
client.Send(Email);
client.Disconnect(true);
return "Success";
}
}
catch (Exception)
{
return "Failed";
}
}
}
}
私はにMailKitコードをどこに置くかわかりません。 Model
フォルダーにMail.cs
として存在することは許可されていますか?
フォームから値を取得する方法や、システムのアーキテクチャを設計する方法を尋ねていますか? MailKitコード*がModelフォルダに存在しないようにするには? –
この質問は、メールとは関係がありません。「フォームデータをMVCコントローラに送信する方法」に関するすべてのことは、 –