79

I create new ASP.NET web application that use SMTP to send message. The problem is the smtp was not authenticated from who send the message.

How can I make SMTP authenticated in my program? does C# have a class that have attribute for enter username and password?

Kiquenet
  • 14,494
  • 35
  • 148
  • 243
ecleel
  • 11,748
  • 15
  • 48
  • 48

6 Answers6

161
using System.Net;
using System.Net.Mail;

using(SmtpClient smtpClient = new SmtpClient())
{
    var basicCredential = new NetworkCredential("username", "password"); 
    using(MailMessage message = new MailMessage())
    {
        MailAddress fromAddress = new MailAddress("from@yourdomain.com"); 

        smtpClient.Host = "mail.mydomain.com";
        smtpClient.UseDefaultCredentials = false;
        smtpClient.Credentials = basicCredential;

        message.From = fromAddress;
        message.Subject = "your subject";
        // Set IsBodyHtml to true means you can send HTML email.
        message.IsBodyHtml = true;
        message.Body = "<h1>your message body</h1>";
        message.To.Add("to@anydomain.com"); 

        try
        {
            smtpClient.Send(message);
        }
        catch(Exception ex)
        {
            //Error, could not send the message
            Response.Write(ex.Message);
        }
    }
}

You may use the above code.

Save
  • 1,376
  • 2
  • 12
  • 26
Arief
  • 6,055
  • 7
  • 37
  • 41
  • 2
    where is the username and password coming from ? and what is mail.mydomain.com ? is that he DNS name ? – Shyju Sep 04 '12 at 23:30
  • 5
    they're your email address and password, mail.mydomain.com is your SMTP server (e.g. smtp.gmail.com). – Arief Sep 05 '12 at 10:48
  • 2
    You should you wrap the MailMessage object in a using statement (or call Dispose on it after your done), right? – Ben Aug 19 '13 at 11:35
  • 1
    Usually you'll also need to configure a port. This can be done by using the [Port Property](https://learn.microsoft.com/en-us/dotnet/api/system.net.mail.smtpclient.port?view=netframework-4.8) like `smtpClient.Port(123)` – Wouter Vanherck May 23 '19 at 12:52
  • @Arief: Hi can you check my question? https://stackoverflow.com/questions/56604850/problem-in-sending-email-via-smtp-service-not-as-external-senders any suggestion about how to make our send mail function, not as external senders? – Amir Jun 14 '19 at 21:50
91

Ensure you set SmtpClient.Credentials after calling SmtpClient.UseDefaultCredentials = false.

The order is important as setting SmtpClient.UseDefaultCredentials = false will reset SmtpClient.Credentials to null.

Joseph King
  • 5,089
  • 1
  • 30
  • 37
  • When using Sendgrid and the order is wrong - it will return error: "Mailbox unavailable. The server response was: Unauthenticated senders not allowed". Setting Credentials after the UseDefaultCredentials flag fixes this problem – Marcinu May 04 '18 at 11:34
  • based on the implementation, you don't even need to set `UseDefaultCredentials` if you are already setting `Credentials` since they are both based on the same underlying value. – Dave Cousineau Mar 02 '22 at 23:57
7

Set the Credentials property before sending the message.

OJ.
  • 28,944
  • 5
  • 56
  • 71
3

To send a message through TLS/SSL, you need to set Ssl of the SmtpClient class to true.

string to = "jane@contoso.com";
string from = "ben@contoso.com";
MailMessage message = new MailMessage(from, to);
message.Subject = "Using the new SMTP client.";
message.Body = @"Using this new feature, you can send an e-mail message from an application very easily.";
SmtpClient client = new SmtpClient(server);
// Credentials are necessary if the server requires the client 
// to authenticate before it will send e-mail on the client's behalf.
client.UseDefaultCredentials = true;
client.EnableSsl = true;
client.Send(message);
Jason Dang
  • 39
  • 2
1

How do you send the message?

The classes in the System.Net.Mail namespace (which is probably what you should use) has full support for authentication, either specified in Web.config, or using the SmtpClient.Credentials property.

Michael J. Gray
  • 9,784
  • 6
  • 38
  • 67
Tor Haugen
  • 19,509
  • 9
  • 45
  • 63
0

In my case even after following all of the above. I had to upgrade my project from .net 3.5 to .net 4 to authorize against our internal exchange 2010 mail server.

YoniXw
  • 425
  • 5
  • 12