Sending mail using SmtpClient in .net

.net, asp.net, c#, smtpclient

Solution

I figured out that setting the SmtpClient Credentials property before setting the `<html><span class="diff-delete">UseDefaultCredentials = false</span></html>`. `UseDefaultCredentials = false` causes the credentials to be ignored.

Fails:

SmtpClient smtp = new SmtpClient;
smtp.Credentials = new NetworkCredential("user","pass");
smtp.UseDefaultCredentials = false;

Works:

SmtpClient smtp = new SmtpClient;
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential("user","pass");

Go figure.

** UPDATE **

The reason the order is important here is that the setter on the `UseDefaultCredentials` property actually sets the `Credentials` to `null` via the decompiled code:

/// <summary>Gets or sets a <see cref="T:System.Boolean" /> value that controls whether the <see cref="P:System.Net.CredentialCache.DefaultCredentials" /> are sent with requests.</summary>
/// <returns>
/// <see langword="true" /> if the default credentials are used; otherwise <see langword="false" />. The default value is <see langword="false" />.</returns>
/// <exception cref="T:System.InvalidOperationException">You cannot change the value of this property when an e-mail is being sent.</exception>
public bool UseDefaultCredentials
{
  get
  {
    return this.transport.Credentials is SystemNetworkCredential;
  }
  set
  {
    if (this.InCall)
      throw new InvalidOperationException(SR.GetString("SmtpInvalidOperationDuringSend"));
    this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null;
  }
}

Problem

I am unable to send the mail using smtp client. here is the code: ``` SmtpClient client=new SmtpClient("Host"); client.Credentials=new NetworkCredential("username", "password"); MailMessage mailMessage = new MailMessage(); mailMessage.from="sender@gmail.com"; mailMessage.To.Add("recipient@gmail.com"); mailMessage.body="body"; mailMessage.subject="subject"; client.Send(mailMessage); ``` The problem is that when I use this code in ASP.NET application, I do not receive any mails. When in asp.net I change the from mail address to username given in NetworkCredential, I receive mails. But in C# windows application, I can get emails, even if sender's email address is not valid.

Original source

Related problems