Отправка почты с помощью SmtpClient в .net - PullRequest
19 голосов
/ 18 марта 2010

Я не могу отправить письмо с помощью клиента SMTP. вот код:

SmtpClient client=new SmtpClient("Host");
client.Credentials=new NetworkCredential("username", "password");
MailMessage mailMessage = new MailMessage();
mailMessage.from="sender@gmail.com";
mailMessage.To.Add("recipient@gmail.com");
mailMessage.body="body";
mailMessage.subject="subject";
client.Send(mailMessage);

Проблема в том, что когда я использую этот код в приложении ASP.NET, я не получаю никаких писем. Когда в asp.net я меняю адрес электронной почты на имя пользователя, указанное в NetworkCredential, я получаю письма.

Но в приложении C # windows я могу получать электронные письма, даже если адрес электронной почты отправителя недействителен.

Ответы [ 5 ]

16 голосов
/ 28 июля 2014

Я выяснил, что установка свойства SmtpClient Credentials перед установкой 'UseDefaultCredentials = false' UseDefaultCredentials = false вызывает игнорирование учетных данных.

Сбой:

SmtpClient smtp = new SmtpClient;
smtp.Credentials = new NetworkCredential("user","pass");
smtp.UseDefaultCredentials = false;

Работает:

SmtpClient smtp = new SmtpClient;
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential("user","pass");

Иди цифра.

1 голос
/ 18 марта 2010

Это означает, что ваш почтовый сервер не разрешает пересылку почты. Ваш почтовый сервер позволяет отправлять почту только с идентифицированного адреса электронной почты в качестве имени пользователя. Как правило, это делается для предотвращения отправки писем с другими удостоверениями, отличными от аутентифицированных.

0 голосов
/ 12 февраля 2019

Краткий ответ: Не используйте .net внутренний класс клиента SMTP - используйте MailKit .

Длинный ответ:

  1. Он отмечен как устаревший в документах MS

[System.Obsolete («SmtpClient и его сеть типов плохо спроектированы, мы настоятельно рекомендуем использовать вместо него https://github.com/jstedfast/MailKit и https://github.com/jstedfast/MimeKit»)] открытый класс SmtpClient: IDisposable

  1. Используйте oss lib MailKit .
  2. Разработка: потому что вы столкнетесь с его недостатками раньше, чем позже. Читайте здесь или читайте в интернете.
  3. Вот пример отправки простых сообщений и составных сообщений.

Я намеренно не копировал и не вставлял здесь примеры из документации, потому что документация со временем может измениться, и ее лучше читать.

0 голосов
/ 17 сентября 2015
void sendEmail(string strFrom
                        , string strTo
                        , string strSubject
                        , string strBody)
   {

       MailMessage objMailMessage = new MailMessage();
       System.Net.NetworkCredential objSMTPUserInfo =
           new System.Net.NetworkCredential();
       SmtpClient objSmtpClient = new SmtpClient();

       try
       {
           objMailMessage.From = new MailAddress(strFrom);
           objMailMessage.To.Add(new MailAddress(strTo));
           objMailMessage.Subject = strSubject;
           objMailMessage.Body = strBody;

           objSmtpClient = new SmtpClient("172.0.0.1"); /// Server IP
           objSMTPUserInfo = new System.Net.NetworkCredential
           ("User name", "Password","Domain");
           objSmtpClient.Credentials = objSMTPUserInfo;
           objSmtpClient.UseDefaultCredentials = false;
           objSmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;

           objSmtpClient.Send(objMailMessage);
       }
       catch (Exception ex)
       { throw ex; }

       finally
       {
           objMailMessage = null;
           objSMTPUserInfo = null;
           objSmtpClient = null;
       }
   }
0 голосов
/ 11 августа 2010

Попробуйте это:

MailMessage mail = new MailMessage("emailfrom","emailto");

mail.From = new MailAddress("emailfrom");
mail.Subject = txtsbjct.Text;
string Body = txtmsg.Text;
mail.Body = Body;

mail.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com"; //Or Your SMTP Server Address
smtp.Credentials = new System.Net.NetworkCredential("youremail", "yourpassword");

smtp.EnableSsl = true;
smtp.Send(mail);
txtemail.Text = "";
txtmsg.Text = "";
txtsbjct.Text = "";
Label1.Text = "your email has been send";
mail = null;
smtp = null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...