Как я могу сделать аутентификацию SMTP в C#


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

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

6 65

6 ответов:

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);
        }
    }
}

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

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

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

установить полномочия свойство перед отправкой сообщения.

чтобы отправить сообщение через 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);

Как вы отправляете сообщение?

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

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