MailMessage From vs Credentials

时间:2015-11-19 03:58:25

标签: c# asp.net email

我试图了解如何在System.Net.Mail库中使用From地址。

为了论证,我将以谷歌为例。您将在下面找到我用来发送电子邮件的代码。

var message = new MailMessage();
message.To.Add(new MailAddress("john.doe@gmail.com"));  // replace with valid value 
message.From = new MailAddress("test@gmail.com");  // replace with valid value
message.Subject = "Testing ASP.NET Email system";
message.Body = "This is my test email";
message.IsBodyHtml = true;

using (var smtp = new SmtpClient())
{
      var credential = new NetworkCredential
      {
           UserName = "test@gmail.com",  // replace with valid value
           Password = "abc123"  // replace with valid value
      };
      smtp.Credentials = credential;
      smtp.Host = "smtp.gmail.com";
      smtp.Port = 587;
      smtp.EnableSsl = true;
      await smtp.SendMailAsync(message);
}

我想要了解的是为什么我需要设置From地址以及它的重点。发送电子邮件时,您登录的电子邮件凭据是否应该是发件人电子邮件?这是否意味着我可以登录test@gmail.com但是当收件人收到电子邮件时,如果我把john作为From部分,它会说john@gmail.com?

这是如何运作的?

1 个答案:

答案 0 :(得分:2)

来自简单地说,您的电子邮件客户端将如何显示来自电子邮件的内容。只要它与实际邮件服务器位于同一(子)域,大多数客户端都会允许它,否则您可能会收到如下警告:

enter image description here

您可以发送的原因是指定发件人地址是因为邮件服务器不一定具有“帐户”#39;与托管提供商(gmail,hotmail等)的方式相同。 @之前的说明符只是收件箱组织的一种方式。对于外发邮件,从技术角度来看,它不是必需的,因为实际的发件人是您的邮件服务器,而不是您的收件箱。

公共邮件服务器很可能会阻止您恶意欺骗地址(例如dan@gmail.com可能会在尝试从rob@gmail.com发送时拒绝其请求)但有关此问题的详细信息。我不确定。

例如,这是我收到的电子邮件的摘录:

  

收到:来自mta.email.auspost.com.au(mta.email.auspost.com.au。
  [207.67.38.247])由mx.google.com提供ESMTP标识
  qg3si8833298pbb.100.2015.11.18.19.17.54

     

...

     

收到:mta.email.auspost.com.au id h9kvm4163hs8 for

  < == snip==@gmail.com> ;; 2015年11月18日星期三21:01:47 -0600(信封 - 来自   )
  来自:"澳大利亚邮政" < noreply@email.auspost.com.au>

(gmail示例。来源: http://www.groovypost.com/wp-content/uploads/2013/05/image20.png