web-dev-qa-db-fra.com

Envoi de courrier à l'aide de SmtpClient dans .net

Je ne peux pas envoyer le courrier en utilisant le client smtp . Voici le code:

SmtpClient client=new SmtpClient("Host");
client.Credentials=new NetworkCredential("username", "password");
MailMessage mailMessage = new MailMessage();
mailMessage.from="[email protected]";
mailMessage.To.Add("[email protected]");
mailMessage.body="body";
mailMessage.subject="subject";
client.Send(mailMessage);

Le problème est que, lorsque j'utilise ce code dans une application ASP.NET, je ne reçois aucun courrier. Quand je suis sur asp.net, je change l'adresse de courrier électronique en nom d'utilisateur indiqué dans NetworkCredential, je reçois des mails.

Mais dans l'application Windows C #, je peux recevoir des emails, même si l'adresse email de l'expéditeur n'est pas valide.

17
Manish Gupta

J'ai compris que la définition de la propriété SmtpClient Credentials avant celle de 'UseDefaultCredentials = false' UseDefaultCredentials = false entraîne l'ignorance des informations d'identification. 

Échoue:

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

Travaux:

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

Allez comprendre.

13
user3524983

Cela signifie que votre serveur de messagerie n'autorise pas Mail-Relay. Votre serveur de messagerie vous permet uniquement d'envoyer un courrier électronique à partir d'identifiant email authentifié. En règle générale, ceci est fait pour empêcher l'envoi de courriers sous différentes identités que celle authentifiée.

1

Essaye ça :

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;
0
colonel

La réponse courte: N'utilisez pas .net la classe de client SMTP interne - utilisez MailKit .

La réponse longue: 

  1. Il est marqué comme obsolète dans MS Docs _

[System.Obsolete ("SmtpClient et son réseau de types sont mal conçus, nous vous recommandons vivement d’utiliser https://github.com/jstedfast/MailKit } _ et https://github.com/ jstedfast/MimeKit à la place ")] Classe publique SmtpClient: IDisposable

  1. Utilisez l'oss lib MailKit .
  2. Élaboration: Parce que vous ferez face à ses lacunes le plus tôt possible. _ { Lire ici } ou lu sur Internet.
  3. Voici un exemple pour envoi messages en clair et en plusieurs parties messages.

Je n'ai volontairement pas copié-collé les exemples de la documentation car la documentation peut changer avec le temps et il est préférable de la lire. 

0
Ognyan Dimitrov