发送电子邮件,并保存在数据库(ASP.净MVC)

本文关键字:ASP MVC 数据库 存在 电子邮件 保存 | 更新日期: 2023-09-27 17:49:23

我一直在使用ASP网站工作。在此网站中,您可以直接将电子邮件发送到指定的电子邮件地址。它工作正常,但是在电子邮件中发送的信息(如姓名,电子邮件地址等)没有数据库。所以我试着为它添加一个数据库,但不知何故它不工作,我一直有一些错误。我刚接触这种东西,所以我不确定是否有可能发送电子邮件,同时将其保存到数据库中。我知道我做的事情有问题,所以谁来帮帮我吧。谢谢你。

这是我发送电子邮件的控制器:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(TalentInfo model, IEnumerable<HttpPostedFileBase> files)
    {
        if (ModelState.IsValid)
        {
            RegisterRepository regRepo = new RegisterRepository();
            if (regRepo.Register(model))
            {
                List<string> paths = new List<string>();
                foreach (var file in files)
                {
                    if (file.ContentLength > 0)
                    {
                        var fileName = Path.GetFileName(file.FileName);
                        var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
                        file.SaveAs(path);
                        paths.Add(path);
                    }
                }
                var message = new MailMessage();
                foreach (var path in paths)
                {
                    var fileInfo = new FileInfo(path);
                    var memoryStream = new MemoryStream();
                    using (var stream = fileInfo.OpenRead())
                    {
                        stream.CopyTo(memoryStream);
                    }
                    memoryStream.Position = 0;
                    string fileName = fileInfo.Name;
                    message.Attachments.Add(new Attachment(memoryStream, fileName));
                }
                //Rest of business logic here
                string EncodedResponse = Request.Form["g-Recaptcha-Response"];
                bool IsCaptchaValid = (ReCaptcha.Validate(EncodedResponse) == "True" ? true : false);
                if (IsCaptchaValid)
                {
                    var body = "<p><b>Email From:</b> {0} ({1})</p><p><b>Message:<b></p><p>{2}</p>";
                    message.To.Add(new MailAddress("***@gmail.com"));  // replace with valid value 
                    message.From = new MailAddress("***@ymailcom");  // replace with valid value
                    message.Subject = "YesDubai.org (REGISTRATION)";
                    message.Body = string.Format(body, model.Talent_Name, model.Talent_Email, model.Talent_SelfPromotion);
                    message.IsBodyHtml = true;
                    using (var smtp = new SmtpClient())
                    {
                        var credential = new NetworkCredential
                        {
                            UserName = "***@gmail.com",  // replace with valid value
                            Password = "***"  // replace with valid value
                        };
                        smtp.Credentials = credential;
                        smtp.Host = "smtp.gmail.com";
                        smtp.Port = 587;
                        smtp.EnableSsl = true;
                        smtp.SendCompleted += (s, e) =>
                        {
                            //delete attached files
                            foreach (var path in paths)
                                System.IO.File.Delete(path);
                        };
                        await smtp.SendMailAsync(message);
                        ViewBag.Message = "Your message has been sent!";
                        ModelState.Clear();
                        return View("Register");
                    }
                }
                else
                {
                    TempData["recaptcha"] = "Please verify that you are not a robot!";
                }
            } return View(model);
        }
    }

这里是Modal类:

public partial class TalentInfo
{
    [Display(Name = "ID")]
    public int TalentID { get; set; }
    [Display(Name = "Talent's Name")]
    public string Talent_Name { get; set; }
    [Display(Name = "Email Address")]
    public string Talent_Email { get; set; }
    [Display(Name = "Self Promotion")]
    public string Talent_SelfPromotion { get; set; }
}

这里是Repository:

public class RegisterRepository
{
    //SqlTransaction transaction = null;
    private SqlConnection con;
    //To Handle connection related activities
    private void connection()
    {
        string constr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString();
        con = new SqlConnection(constr);

    }

    internal bool Register(TalentInfo model)
    {
        throw new NotImplementedException();
        connection();
        try
        {
            SqlCommand com = new SqlCommand("SP_INSERT_TALENT_INFO", con);
            com.CommandType = CommandType.StoredProcedure;
            com.Parameters.AddWithValue("@Talent_name", model.Talent_Name);
            com.Parameters.AddWithValue("@Talent_email", model.Talent_Email);
            com.Parameters.AddWithValue("@Talent_SelfPromotion", model.Talent_SelfPromotion);
            con.Open();
            int i = com.ExecuteNonQuery();
            con.Close();
            if (i >= 1)
            {
                return true;
            }
            else
            {
                return false;
            }

        }
        catch
        {
            return Register(model);
        }
        finally
        {
            con.Close();
        }
    }

}

发送电子邮件,并保存在数据库(ASP.净MVC)

这只是一个编译错误。您需要在代码的所有路径中返回一个结果。

这里缺少一个return

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(TalentInfo model, IEnumerable<HttpPostedFileBase> files)
{
    if (ModelState.IsValid)
    {
        //you have lots of code here....
    }
    else
    {
        //you need to return something here....because (ModelState.IsValid) might be false
    }
}

你的代码中有两个错误:

1) if (ModelState.IsValid)求值为false时返回一些值。

2)在register方法中,删除这一行:
throw new NotImplementedException();