webentwicklung-frage-antwort-db.com.de

Senden von E-Mails mit SmtpClient in .net

Ich kann die E-Mail nicht mit dem SMTP-Client senden. Hier ist der 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);

Das Problem ist, dass ich keine E-Mails erhalte, wenn ich diesen Code in der ASP.NET-Anwendung verwende. Wenn ich in asp.net die von NetworkCredential angegebene E-Mail-Adresse in einen Benutzernamen ändere, erhalte ich Mails.

In der C # Windows-Anwendung kann ich jedoch E-Mails erhalten, auch wenn die E-Mail-Adresse des Absenders nicht gültig ist.

17
Manish Gupta

Ich habe herausgefunden, dass das Festlegen der SmtpClient Credentials-Eigenschaft vor dem Festlegen des Werts 'UseDefaultCredentials = false' UseDefaultCredentials = false dazu führt, dass die Berechtigungsnachweise ignoriert werden. 

Schlägt fehl:

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

Werke:

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

Stelle dir das vor.

13
user3524983

Dies bedeutet, dass Ihr Mailserver kein Mail-Relay zulässt. Ihr Mailserver ermöglicht Ihnen nur das Senden von E-Mails von der authentifizierten E-Mail-ID als Benutzername. Dies geschieht im Allgemeinen, um zu verhindern, dass E-Mails mit anderen Identitäten als der authentifizierten gesendet werden.

Versuche dies :

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

Die kurze Antwort: Verwenden Sie .net nicht die interne SMTP-Clientklasse - verwenden Sie MailKit.

Die lange Antwort: 

  1. Es ist in MS docs als obsolet markiert.

[System.Obsolete ("SmtpClient und sein Typennetzwerk sind schlecht ausgelegt. Wir empfehlen dringend die Verwendung von https://github.com/jstedfast/MailKit und https://github.com/jstedfast/MimeKit stattdessen")] öffentliche Klasse SmtpClient: IDisposable

  1. Verwenden Sie das oss lib MailKit .
  2. Ausarbeitung: Weil Sie eher früher als später mit den Mängeln konfrontiert werden. Hier lesen oder im Internet lesen.
  3. Hier ist ein Beispiel für Senden von einfachen Nachrichten und mehrteiligen Nachrichten.

Ich habe die Beispiele aus den Dokumenten hier absichtlich nicht kopiert, da sich die Dokumentation mit der Zeit ändern kann und besser zu lesen ist. 

0
Ognyan Dimitrov