【问题标题】:ASP.NET Core send FormData to Controller that sends email wont post values to controllerASP.NET Core 将 FormData 发送到控制器,该控制器发送电子邮件不会将值发布到控制器
【发布时间】: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


【解决方案1】:

我的 Default.aspx 文件中有 Html.BeginForm("SendMail", "MailController") 而不是 Html.BeginForm("SendMail", "Mail")。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2022-11-05
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    相关资源
    最近更新 更多