Sending mail using SmtpClient in .net Sending mail using SmtpClient in .net asp.net asp.net

Sending mail using SmtpClient in .net


I figured out that setting the SmtpClient Credentials property before setting the ' UseDefaultCredentials = false ' 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;  }}


The short answer : Do not use .net the internal SMTP client class - use MailKit.

The long answer :

  1. It is marked as obsolete in MS docs

[System.Obsolete("SmtpClient and its network of types are poorly designed, we strongly recommend you use https://github.com/jstedfast/MailKit and https://github.com/jstedfast/MimeKit instead")] public class SmtpClient : IDisposable

  1. Use the oss lib MailKit.
  2. Elaboration : Because you will face its deficiencies sooner rather than later. Read here or read around the internet.
  3. Here is an example for sending plain messages and multipart messages.

I intentionally did not copy-paste the examples from the docs here because the documentation may change over time and it is better to read .


It means your mail server does not allow Mail-Relay. Your mail server only allows you to send mail from authenticated email-id as username. Generally this is done to prevent mails being sent as different identities other than the authenticated one.