Как я могу сделать аутентификацию SMTP в C # - PullRequest
69 голосов
/ 18 ноября 2008

Я создаю новое веб-приложение ASP.NET, которое использует SMTP для отправки сообщения. Проблема в том, что smtp не прошел проверку подлинности от того, кто отправил сообщение.

Как я могу сделать аутентификацию SMTP в моей программе? C # имеет класс, который имеет атрибут для ввода имени пользователя и пароля?

Ответы [ 6 ]

145 голосов
/ 18 ноября 2008
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);
        }
    }
}

Вы можете использовать вышеуказанный код.

83 голосов
/ 12 января 2015

Убедитесь, что вы установили SmtpClient.Credentials после вызова SmtpClient.UseDefaultCredentials = false.

Порядок важен, так как установка SmtpClient.UseDefaultCredentials = false сбросит SmtpClient.Credentials на ноль.

6 голосов
/ 18 ноября 2008

Установите свойство Credentials перед отправкой сообщения.

2 голосов
/ 01 ноября 2017

Чтобы отправить сообщение через TLS / SSL, вам нужно установить для Ssl класса SmtpClient значение 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);
1 голос
/ 18 ноября 2008

Как отправить сообщение?

Классы в пространстве имен System.Net.Mail (что, вероятно, следует использовать) полностью поддерживают аутентификацию, указанную в Web.config, или с использованием свойства SmtpClient.Credentials.

0 голосов
/ 18 июня 2018

В моем случае даже после всего вышеперечисленного. Мне пришлось обновить проект с .net 3.5 до .net 4, чтобы авторизоваться на нашем внутреннем почтовом сервере Exchange 2010.

...