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.
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.
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;
Die kurze Antwort: Verwenden Sie .net nicht die interne SMTP-Clientklasse - verwenden Sie MailKit.
Die lange Antwort:
[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
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.