2016-05-06 3 views
1

У меня есть контактная форма, созданная с помощью ASP.NET и C#, и я хочу заменить электронную почту от NetworkCredential на указанную в поле электронной почты.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("[email protected]"); //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("[email protected]", "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, а не из [email protected] (один из NetworkCredential), на `[email protected]

Прямо сейчас, если я попытаюсь отправить электронное письмо от [email protected] до [email protected], отправитель по-прежнему [email protected]. Надеюсь, я ясно дал понять эту проблему ... спросите меня, если что-то неясно :).

+1

Попробуйте отрегулировать строку из строки, чтобы сказать 'msz.From = new MailAddress (vm.Email, vm.Email.ToString());' – galacticfan

+0

Это работает, но полученная почта имеет следующий формат: 'valid-email @ gmail.com <[email protected]> '. Могу ли я избавиться от '<[email protected]>'? – Valip

+0

@PavelValeriu Это, вероятно, gmail, потому что вы аутентифицируетесь как 'my-email @ gmail.com', это, вероятно, хорошо для вас, потому что есть вероятность 90%, если вы пришлете мне письмо, которое утверждает, что оно me_ моя система электронной почты будет считать вас спамом. – CodingGorilla

ответ

0

Вы пробовали установки свойства отправителя

msz.Sender = new MailAddress(vm.Email) 
0

То, что вы делаете, будет вызывать проблемы с Email Authentication и так как вы используете GMAIL это собирается быть реальной проблемой, чтут DMARC отчеты. Хороший процент людей, заполняющих вашу контактную форму, вы никогда не получите информацию. Вы больше не можете заполнять поле «от» адресом электронной почты клиентов с началом DMARC. Раньше это была приемлемая практика.

Посмотрите на эту статью: Contact Form Nightmare

В статье показан другой подход, о том, как справиться с ситуацией, которая является более популярным, но я думаю, вы также можете использовать «для ответа:» поле для электронной почты клиентов, вы определенно не хотите использовать поле FROM.

Я призываю вас задуматься над тем, что вы пытаетесь выполнить, потому что это будет мешать вашим коммуникациям с вашей аудиторией.

Смежные вопросы