【发布时间】:2021-06-02 04:06:06
【问题描述】:
我是 .NET 核心的新手,我正在尝试更好地了解它,现在我正在尝试在 .NET 应用程序上创建邮件服务,但我无法让它工作。以前我做了一个硬编码的邮件功能,但我读到你应该硬编码密码等。所以我给自己一个新的挑战来试试这个。
所以我有一个表格,我希望有人填写他们发送给我的个人信息,例如工作机会,以便表格始终向我发送邮件。这是我想出的,但我无法让它发挥作用。
[项目目录][1] [1]:https://i.stack.imgur.com/1xGVK.png
HTML FORM CODE:
@using (Html.BeginForm("SendMail", "MailController")) {
<input asp-for="_email.Name" type="text" id="name" name="Name" placeholder="Namn" required /><br />
<input asp-for="_email.TheEmail" type="text" id="email" name="TheEmail" placeholder="E-Mail" required /><br />
<input asp-for="_email.Phone" type="text" id="phone" name="Phone" placeholder="Telefon" /><br required />
<textarea asp-for="_email.Message" id="message" name="Message" placeholder="Message" rows="8" cols="80" required></textarea><br />
<button class="form-button" type="submit" value="Skicka">Skicka</button>
}
MAILCONTROLLER CODE:
[Route("api/[controller]")]
[ApiController]
public class MailController : ControllerBase
{
private readonly IMailService mailService;
public MailController(IMailService mailService)
{
this.mailService = mailService;
}
[HttpPost("send")]
public async Task<IActionResult> SendMail([FromForm] Email request)
{
try
{
await mailService.SendEmailAsync(request);
return Ok();
}
catch (Exception ex)
{
throw ex;
}
}
}
IMAILSERVICE CODE:
public interface IMailService
{
Task SendEmailAsync(Email _email);
}
}
MAILSERVICE CODE:
public class MailService : IMailService
{
private readonly MailSettings _mailSettings;
public MailService(IOptions<MailSettings> mailSettings)
{
_mailSettings = mailSettings.Value;
}
public async Task SendEmailAsync(Email _email)
{
var email = new MimeMessage();
email.Sender = MailboxAddress.Parse(_mailSettings.Mail);
email.To.Add(MailboxAddress.Parse(_email.ToEmail));
email.Subject = _email.Subject;
var builder = new BodyBuilder();
builder.HtmlBody = _email.Message;
email.Body = builder.ToMessageBody();
using var smtp = new SmtpClient();
smtp.Connect(_mailSettings.Host, _mailSettings.Port, SecureSocketOptions.StartTls);
smtp.Authenticate(_mailSettings.Mail, _mailSettings.Password);
await smtp.SendAsync(email);
smtp.Disconnect(true);
}
}
MAILSETTINGS CODE:
public class MailSettings
{
public string Mail { get; set; }
public string DisplayName { get; set; }
public string Password { get; set; }
public string Host { get; set; }
public int Port { get; set; }
}
STARTUP CODE:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.Configure<MailSettings>(Configuration.GetSection("MailSettings"));
services.AddTransient<IMailService, Services.MailService>();
}
【问题讨论】:
-
请描述您出错的地方。
-
当我提交表单时,我只是被重定向到我的主页顶部。真的不知道为什么以及如何..
-
Html.BeginForm("SendMail", "Mail") -
银秋谢谢我错过了,我改变了它但它似乎永远不会到达控制器,我在控制器的 SendMail() 方法中创建了一个 WriteLine 但它永远不会被写入..
-
应该先进行断点调试,观察表单是否提交到
SendMail方法。
标签: c# html .net asp.net-core email