Je veux envoyer un email à partir de mon application et j'ai écrit le code suivant pour l'envoi de courrier
MailMessage msg = new MailMessage();
msg.From = new MailAddress("mymailid");
msg.To.Add("receipientid");
msg.Subject = "test";
msg.Body = "Test Content";
msg.Priority = MailPriority.High;
SmtpClient client = new SmtpClient();
client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");
client.Host = "smtp.gmail.com";
client.Port = 587;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.EnableSsl = true;
client.UseDefaultCredentials = true;
client.Send(msg);
Je l'exécute sur localhost alors quelle erreur je fais pour l'envoyer.
Quand j’envoie un bouton cela donne une erreur comme
Le serveur SMTP nécessite une connexion sécurisée ou le client ne l'était pas authentifié. La réponse du serveur était la suivante: 5.5.1 Authentification Champs obligatoires.
Code dans le fichier Web.config
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
<add key="smtpServer" value="smtp.gmail.com" />
<add key="EnableSsl" value = "true"/>
<add key="smtpPort" value="587" />
<add key="smtpUser" value="[email protected]" />
<add key="smtpPass" value="mypassword" />
<add key="adminEmail" value="[email protected]" />
</appSettings>
<system.net>
<mailSettings>
<smtp from="[email protected]">
<network Host="smtp.gmail.com" password="mypassword" port="587" userName="[email protected]" enableSsl="true"/>
</smtp>
</mailSettings>
</system.net>
que dois-je faire pour résoudre cette erreur et envoyer un mail?
Commencez par vérifier les problèmes liés à la sécurité de Gmail. Vous avez peut-être activé la double authentification dans gmail. Vérifiez également votre boîte de réception Gmail si vous recevez des alertes de sécurité. Dans de tels cas, vérifiez l’autre réponse de @mjb comme ci-dessous
Ci-dessous, la chose très générale que je vérifie toujours d'abord pour de tels problèmes
client.UseDefaultCredentials = true;
définissez-le sur false.
Remarque @Joe King answer - vous devez définir client.UseDefaultCredentials avant vous définissez client.Credentials
J'ai le même problème.
J'ai trouvé cette solution:
Google peut bloquer les tentatives de connexion de certaines applications ou appareils n'utilisant pas les normes de sécurité modernes. Etant donné que ces applications et appareils sont plus faciles à pénétrer, leur blocage contribue à la sécurité de votre compte.
Voici quelques exemples d'applications qui ne prennent pas en charge les dernières normes de sécurité:
Par conséquent, vous devez activer Connexion moins sécurisée dans votre compte google.
Une fois connecté à votre compte Google, accédez à:
https://www.google.com/settings/security/lesssecureapps
En C #, vous pouvez utiliser le code suivant:
using (MailMessage mail = new MailMessage())
{
mail.From = new MailAddress("[email protected]");
mail.To.Add("[email protected]");
mail.Subject = "Hello World";
mail.Body = "<h1>Hello</h1>";
mail.IsBodyHtml = true;
mail.Attachments.Add(new Attachment("C:\\file.Zip"));
using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))
{
smtp.Credentials = new NetworkCredential("[email protected]", "password");
smtp.EnableSsl = true;
smtp.Send(mail);
}
}
-------------------
Informations partagées par Michael Freidgeim dans la zone des commentaires ci-dessous:
Réponse similaire avec des screenshots https://stackoverflow.com/a/32457468/52277
Assurez-vous de définir SmtpClient.Credentials
after appelez SmtpClient.UseDefaultCredentials = false
.
L'ordre est important car le réglage de SmtpClient.UseDefaultCredentials = false
réinitialisera SmtpClient.Credentials
en null.
J'ai cherché et essayé différentes choses pendant des heures. Pour résumer, je devais prendre en compte les points suivants:
smtp.gmail.com
au lieu de smtp.google.com
client.UseDefaultCredentials = false;
avant de définir les informations d'identificationclient.EnableSsl = true;
Si ces étapes ne vous ont pas aidé, cochez cette réponse .
Peut-être trouverez-vous quelque chose d’utile sur ce System.Net.Mail FAQ aussi.
Essayez de vous connecter à votre compte Gmail. il est verrouillé si vous envoyez des courriels à l’aide de gmail SMTP. Je ne connais pas la limite d'e-mails que vous pouvez envoyer avant qu'elle ne soit verrouillée, mais si vous vous connectez une fois, cela fonctionnera à nouveau à partir du code.
Essayez de cette façon, je viens de faire quelques changements de lumière:
MailMessage msg = new MailMessage();
msg.From = new MailAddress("[email protected]");
msg.To.Add("[email protected]");
msg.Subject = "test";
msg.Body = "Test Content";
//msg.Priority = MailPriority.High;
using (SmtpClient client = new SmtpClient())
{
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("[email protected]", "mypassword");
client.Host = "smtp.gmail.com";
client.Port = 587;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Send(msg);
}
Veuillez également afficher votre fichier app.config, si vous avez des paramètres de messagerie.
J'ai rencontré le même problème même si j'ai défini "UseDefaultCredentials" sur false. Plus tard, j'ai découvert que la cause principale était que j'avais activé la "vérification en deux étapes" dans mon compte. Après que je l'ai éteint, le problème est parti.
Assurez-vous que l’accès à l’application moins sécurisée est autorisé.
MailMessage mail = new MailMessage();
mail.From = new MailAddress("[email protected]");
mail.Sender = new MailAddress("[email protected]");
mail.To.Add("external@emailaddress");
mail.IsBodyHtml = true;
mail.Subject = "Email Sent";
mail.Body = "Body content from";
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
smtp.UseDefaultCredentials = false;
smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "xx");
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.EnableSsl = true;
smtp.Timeout = 30000;
try
{
smtp.Send(mail);
}
catch (SmtpException e)
{
textBox1.Text= e.Message;
}
S'il s'agit d'un nouveau compte Google, vous devez envoyer un courrier électronique (le premier) via l'interface utilisateur standard. Après cela, vous pouvez utiliser votre application/robot pour envoyer des messages.
Ci-dessous est mon code.J'ai également eu la même erreur, mais le problème était que j'ai donné mon mot de passe faux.
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
mail.From = new MailAddress("[email protected]");
mail.To.Add("[email protected]");
mail.To.Add("[email protected]");
mail.Subject = "Password Recovery ";
mail.Body += " <html>";
mail.Body += "<body>";
mail.Body += "<table>";
mail.Body += "<tr>";
mail.Body += "<td>User Name : </td><td> HAi </td>";
mail.Body += "</tr>";
mail.Body += "<tr>";
mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>";
mail.Body += "</tr>";
mail.Body += "</table>";
mail.Body += "</body>";
mail.Body += "</html>";
mail.IsBodyHtml = true;
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential("sendfrommailaddress.com", "password");
SmtpServer.EnableSsl = true;
SmtpServer.Send(mail);
Vous pouvez le signaler dans Envoi de courrier
Activez l'application moins sécurisée depuis link et boum ...
Vous devez envisager de spécifier les données de configuration SMTP dans le fichier de configuration et de ne pas les écraser dans un code - voir Données de configuration SMTP à l'adresse http://www.systemnetmail.com/faq/4.1.aspx .
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="[email protected]">
<network defaultCredentials="false" Host="smtp.example.com" port="25" userName="[email protected]" password="password"/>
</smtp>
</mailSettings>
</system.net>
certains serveurs smtp (ceux qui sont sécurisés) vous obligent à fournir le nom d'utilisateur et l'adresse e-mail. Si son adresse gmail est la plupart des chances qu'il s'agisse du problème de connexion moins sécurisée que vous devez résoudre, vous pouvez essayer:
public static void SendEmail(string address, string subject,
string message, string email, string username, string password,
string smtp, int port)
{
var loginInfo = new NetworkCredential(username, password);
var msg = new MailMessage();
var smtpClient = new SmtpClient(smtp, port);
msg.From = new MailAddress(email);
msg.To.Add(new MailAddress(address));
msg.Subject = subject;
msg.Body = message;
msg.IsBodyHtml = true;
smtpClient.EnableSsl = true;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = loginInfo;
smtpClient.Send(msg);
}
remarquez que l'email de et le nom d'utilisateur sont différents, contrairement à certaines implémentations qui les désignent comme identiques.
appeler cette méthode peut se faire comme suit:
SendEmail("[email protected]", "test", "Hi it worked!!",
"from-mail", "from-username", "from-password", "smtp", 587);
essayez d’autoriser l’accès aux applications moins sécurisées.
Ici, vous pouvez activer une application moins sécurisée après la connexion avec votre compte Gmail.
https://myaccount.google.com/lesssecureapps
Merci.
Après avoir activé l'option moins sécurisée et essayé d'autres solutions, si vous rencontrez toujours le même problème, essayez d'utiliser cette surcharge:
client.Credentials = new NetworkCredential("mymailid", "mypassword");
au lieu de:
client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com");