ASP.NET/C#联系页面邮件配置问题:需将用户咨询发送至指定邮箱
搞定ASP.NET MVC联系页邮件发送目标错误的问题
嘿,我一眼就瞅出你代码里的问题啦!现在邮件会发给用户填的邮箱,是因为你把用户输入的EmailId设成了收件人,咱们把这个改了就行,同时还能顺便优化一下回复体验~
第一步:修正收件人设置
你当前代码里的mail.To.Add(EmailId);是把用户填的邮箱加到收件人列表里,所以邮件才会发给用户。咱们直接把这行改成你自己的邮箱,比如mail.To.Add("xoinas23@gmail.com");,另外再加一行mail.ReplyToList.Add(EmailId);,这样你回复邮件的时候,直接就能回复到用户填的邮箱,不用手动输入啦。
修改后的核心控制器代码如下:
try { MailMessage mail = new MailMessage(); // 把收件人改成你自己的邮箱 mail.To.Add("xoinas23@gmail.com"); mail.From = new MailAddress("xoinas23@gmail.com"); // 设置回复地址为用户填写的邮箱,方便你直接回复 mail.ReplyToList.Add(EmailId); mail.Subject = Subject; // 组装邮件内容部分不变 string userMessage = ""; userMessage = "<br/>Name :" + Name; userMessage += "<br/>Email Id: " + EmailId; userMessage += "<br/>Phone No: " + PhoneNo; userMessage += "<br/>Message: " + Message; string Body = "Hi, <br/><br/> A new enquiry by user. Detail is as follows:<br/><br/> " + userMessage + "<br/><br/>Thanks"; mail.Body = Body; mail.IsBodyHtml = true; SmtpClient smtp = new SmtpClient(); smtp.Host = "smtp.gmail.com"; smtp.Port = 587; // 重点提醒:如果你的Gmail开了两步验证,这里要用「应用专用密码」,不是原密码! smtp.Credentials = new System.Net.NetworkCredential("xoinas23@gmail.com", "你的应用密码/原密码"); smtp.EnableSsl = true; smtp.Send(mail); ViewBag.Message = "Thank you for contacting us."; } catch { ViewBag.Message = "Error............"; }
第二步:Gmail账号的关键设置(必看)
现在Gmail对SMTP登录管得比较严,别忘做这个设置:
- 要是你开了两步验证:得去Google账号的「安全性」页面生成一个「应用专用密码」,用这个密码替代代码里的原密码,不然会登录失败。
- 没开两步验证的话:可能需要开启「不太安全的应用访问」,不过这个选项现在基本被Google淘汰了,还是建议开两步验证用应用密码更安全。
额外小提示:处理附件(可选)
我看到你HTML表单里做了附件上传,但控制器代码没处理这块。要是需要支持用户上传附件,加这段代码就行(放在mail.IsBodyHtml = true;后面):
// 检查是否有上传的文件 if (Request.Files.Count > 0) { foreach (string fileName in Request.Files) { HttpPostedFileBase file = Request.Files[fileName]; // 确保文件存在且有内容 if (file != null && file.ContentLength > 0) { var attachment = new Attachment(file.InputStream, file.FileName); mail.Attachments.Add(attachment); } } }
这样改完之后,用户提交表单时,邮件就会乖乖发到你的邮箱里,而且你回复的时候直接点回复就能到用户的邮箱,完美解决你的需求~
内容的提问来源于stack exchange,提问作者miguel carreira
相关产品推荐
相关产品推荐

