web-dev-qa-db-fra.com

Envoi de courrier depuis gmail SMTP C #

J'ai essayé d'envoyer un courrier électronique via C # à partir d'un compte gmail pour l'enregistrement du compte de mon site Web. 

J'ai essayé de plusieurs manières mais la même exception continue à apparaître: Exception System.Net.Mail.Smtp - La connexion a expiré.

Voici ce que j'ai inclus dans mon fichier Web.config:

<system.net>
    <mailSettings>
        <smtp deliveryMethod="Network" 
              from="Writely &lt;[email protected]&gt;">
            <network Host="smtp.gmail.com" 
                     port="465" 
                     enableSsl="true" 
                     defaultCredentials="false" 
                     userName="[email protected]" 
                     password="******" />
        </smtp>
    </mailSettings>
</system.net>

où Writely est le nom de mon site Web et [email protected] est le compte sur lequel je souhaite envoyer un courrier électronique. 

Ensuite, dans mon contrôleur de compte, lorsque je me connecte à ma base de données et que je sauvegarde l'utilisateur dans ma table, je crée mon objet MailMessage et tente de reproduire le même message en:

using (DBConnection conn = new DBConnection())
{
       conn.UserInfoes.Add(userInfo);
       conn.SaveChanges();

       MailMessage mail = new MailMessage();
       mail.From = new MailAddress("[email protected]");
       mail.To.Add("[email protected]");
       mail.Subject = "Welcome to Writely";
       mail.Body = "Test content";

       SmtpClient smtp = new SmtpClient();
       smtp.Send(mail);
}

Est-ce que je manque quelque chose ou fais quelque chose de mal? J'ai lu que c'était le bon moyen de faire cela dans une autre question sur le dépassement de capacité de la pile, donc je ne sais vraiment pas quel est le problème ici.

Merci de votre aide :)

10
Bernice

Vous devez indiquer au SmtpClient les paramètres à utiliser. Il ne lit pas automatiquement ces informations à partir du fichier Web.Config.

SmtpClient smtp = new SmtpClient("smtp.gmail.com", 465);
smtp.Credentials = new NetworkCredential("[email protected]", "***");
smtp.EnableSsl = true;
smtp.Send(mail);
7
Jason Watkins

gmail nécessite une authentification:

Outgoing Mail (SMTP) Server
requires TLS or SSL: smtp.gmail.com (use authentication)
Use Authentication: Yes
Port for TLS/STARTTLS: 587
Port for SSL: 465

alors ce que j'ai fait c'est

var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential("[email protected]", "mypwd"),
            EnableSsl = true
        };
        client.Send("[email protected]", "[email protected]", "Welcome to Writely", "Test content");
4
Crudler

J'ai eu exactement le même problème et il est résolu après le basculement du numéro de port de 465 à 587. 

J'ai eu le problème sur "confirmation de courrier électronique", "récupération de mot de passe" et "envoi de courrier électronique" et maintenant tous les 3 problèmes sont résolus :). 

Je sais que c'est un très vieux billet, mais j'utilise généralement les messages existants pour trouver des réponses au lieu de poser de nouvelles questions. 

Merci à tous pour toutes vos aides.

3
Auguste

Comme j'ai déjà répondu ici .

Ce problème peut aussi être causé par une configuration de sécurité dans votre compte gmail.

Le port correct est 587, mais pour vous authentifier, vous devez autoriser l'accès depuis des applications moins sécurisées de votre compte gmail. Essayez-le ici

Cela a fonctionné pour moi, espérons que cela aide ..

1
dinhokz

Exemple dans asp.net web forms/sharepoint

StringBuilder Body = new StringBuilder();
Body.Append("Your text");

String FromEmail = "you email";
String DisplayNameFromEmailMedico = "display when you receive email";
MailMessage message = new MailMessage();
message.From = new MailAddress(FromEmail, DisplayNameFromEmailMedico);
message.To.Add(new MailAddress("[email protected]"));
message.Subject = "subject that print in email";
message.IsBodyHtml = true;
message.Body = Body.ToString();
SmtpClient client = new SmtpClient();

NetworkCredential myCreds = new NetworkCredential("[email protected]", "key from email smtp", "");
client.EnableSsl = true;
client.Credentials = myCreds;
client.Send(message);
0
Rafael Estevão