C#替换来自NetworkCredential的邮件

时间:2016-05-06 12:07:24

标签: c# asp.net email smtp

我有一个用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.commy-email@gmail.com发送电子邮件,则发件人电子邮件仍为my-email@gmail.com。希望我在这个问题上明确表示......如果有什么不清楚的话请问我。

2 个答案:

答案 0 :(得分:0)

您是否尝试过设置发件人属性

   msz.Sender = new MailAddress(vm.Email)

答案 1 :(得分:0)

您正在做的事情会导致电子邮件身份验证问题,并且由于您使用GMAIL这将成为一个真正的问题,他们会尊重DMARC记录。很多人填写您的联系我们表格,您将永远不会收到来自的信息。您无法再填写&#34;来自&#34;带有DMARC开始的客户电子邮件地址的字段。在过去,这是一种可接受的做法。

看一下这篇文章:Contact Form Nightmare

文章展示了如何处理更受欢迎的情况的不同方法,但我认为您也可以使用&#34;回复:&#34;客户电子邮件的字段,您绝对不想使用FROM字段。

我建议你重新考虑一下你想要完成的事情,因为它会妨碍你与观众的沟通。