Как сделать SMTP-аутентификацию на C #

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

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


person ecleel    schedule 18.11.2008    source источник


Ответы (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("[email protected]"); 

        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("[email protected]"); 

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

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

person Arief    schedule 18.11.2008
comment
откуда берется логин и пароль? а что такое mail.mydomain.com? это его DNS-имя? - person Shyju; 05.09.2012
comment
это ваш адрес электронной почты и пароль, mail.mydomain.com - ваш SMTP-сервер (например, smtp.gmail.com). - person Arief; 05.09.2012
comment
Вам следует заключить объект MailMessage в оператор using (или вызвать для него Dispose после того, как закончите), верно? - person Ben; 19.08.2013
comment
Обычно вам также необходимо настроить порт. Это можно сделать с помощью Свойство порта, например smtpClient.Port(123) - person Wouter Vanherck; 23.05.2019
comment
@Arief: Привет, ты можешь проверить мой вопрос? stackoverflow.com/questions/56604850/ какие-либо предложения о том, как сделать нашу функцию отправки почты, а не как внешние отправители? - person Amir; 15.06.2019

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

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

person Joe King    schedule 12.01.2015
comment
При использовании Sendgrid и неправильном порядке будет возвращена ошибка: Почтовый ящик недоступен. Ответ сервера: отправители, не прошедшие проверку подлинности, не допускаются. Установка учетных данных после флага UseDefaultCredentials устраняет эту проблему - person Marcinu; 04.05.2018

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

person OJ.    schedule 18.11.2008

Чтобы отправить сообщение через TLS / SSL, вам необходимо установить для Ssl класса SmtpClient значение true.

string to = "[email protected]";
string from = "[email protected]";
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);
person Jason Dang    schedule 01.11.2017
comment
напишите пример кода о SSL и SMTP-клиенте, чтобы лучше ответить - person Nikola Lukic; 01.11.2017

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

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

person Tor Haugen    schedule 18.11.2008

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

person YoniXw    schedule 18.06.2018