我有一个用ASP.NET和C#制作的联系表单,我希望将NetworkCredential中的电子邮件替换为电子邮件字段中指定的电子邮件。
我将用一个例子解释这个问题。
这是我的代码:
public ActionResult Index(EmailFormModel vm)
{
if (ModelState.IsValid)
{
MailMessage msz = new MailMessage();
msz.From = new MailAddress(vm.Email); //Email which you are getting from contact us page
msz.To.Add("my-email@gmail.com"); //Where mail will be sent
msz.Subject = vm.Subject;
msz.Body = vm.Message;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Port = 587;
smtp.Credentials = new System.Net.NetworkCredential("my-email@gmail.com", "my-password");
smtp.EnableSsl = true;
smtp.Send(msz);
ModelState.Clear();
}
return View();
}
查看:
<% using (Html.BeginForm("Index", "SendMail", FormMethod.Post))
{%>
<%: Html.ValidationSummary("Please correct the errors and try again.") %>
<p>Email: </p>
<%: Html.TextBoxFor(m => m.Email)%>
<p>Subject: </p>
<%: Html.TextBoxFor(m => m.Subject)%>
<p>Message: </p>
<%: Html.TextBoxFor(m => m.Message)%>
<input type ="submit" value ="Send" />
<% } %>
实施例:
当我发送电子邮件时,我希望它从vm.Email
中指定的地址发送,而不是从my-email@gmail.com
(来自NetworkCredential的地址)发送到`my-email@gmail.com。
目前,如果我尝试从valid-email@gmail.com
向my-email@gmail.com
发送电子邮件,则发件人电子邮件仍为my-email@gmail.com
。希望我在这个问题上明确表示......如果有什么不清楚的话请问我。
答案 0 :(得分:0)
您是否尝试过设置发件人属性
msz.Sender = new MailAddress(vm.Email)
答案 1 :(得分:0)
您正在做的事情会导致电子邮件身份验证问题,并且由于您使用GMAIL这将成为一个真正的问题,他们会尊重DMARC记录。很多人填写您的联系我们表格,您将永远不会收到来自的信息。您无法再填写&#34;来自&#34;带有DMARC开始的客户电子邮件地址的字段。在过去,这是一种可接受的做法。
看一下这篇文章:Contact Form Nightmare
文章展示了如何处理更受欢迎的情况的不同方法,但我认为您也可以使用&#34;回复:&#34;客户电子邮件的字段,您绝对不想使用FROM字段。
我建议你重新考虑一下你想要完成的事情,因为它会妨碍你与观众的沟通。