67 votes

Envoi d'un e-mail via C# à partir d'un compte Google Apps

J'ai un compte Google Apps standard. J'ai configuré un domaine personnalisé via Google Apps. Je peux envoyer et recevoir des courriels avec succès via Google Apps lorsque j'utilise l'interface Gmail. Cependant, je souhaite envoyer un e-mail via un code. Pour ce faire, j'ai essayé le code suivant :

MailMessage mailMessage = new MailMessage();
mailMessage.To.Add("someone@somewhere.com");
mailMessage.Subject = "Test";
mailMessage.Body = "<html><body>This is a test</body></html>";
mailMessage.IsBodyHtml = true;

// Create the credentials to login to the gmail account associated with my custom domain
string sendEmailsFrom = "emailAddress@mydomain.com";             
string sendEmailsFromPassword = "password";
NetworkCredential cred = new NetworkCredential(sendEmailsFrom, sendEmailsFromPassword);

SmtpClient mailClient = new SmtpClient("smtp.gmail.com", 587);
mailClient.EnableSsl = true;
mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
mailClient.UseDefaultCredentials = false;
mailClient.Timeout = 20000;
mailClient.Credentials = cred;
mailClient.Send(mailMessage); 

Lorsque la méthode Send est atteinte, une exception est déclenchée, qui se présente comme suit :

"Le serveur SMTP nécessite une connexion ou le client n'était pas pas authentifié. La réponse du serveur était : 5.5.1 Authentification requise."

Comment envoyer des e-mails via mon domaine personnalisé via Google ?

Gracias.

0 votes

Le port 465 fonctionne-t-il mieux ?

0 votes

Quel est le problème avec le code ci-dessus ?

1 votes

J'obtiens un problème de dépassement de délai, mais en regardant tous les exemples de code, il semble que mon code et mes paramètres soient corrects.

93voto

Konstantin Tarkus Points 16862

Il n'est pas nécessaire de coder en dur tous les paramètres smtp dans votre code. Mettez-les plutôt dans le fichier web.config. De cette façon, vous pouvez crypter ces paramètres si nécessaire et les modifier à la volée sans recompiler votre application.

<configuration>
  <system.net>
    <mailSettings>
      <smtp from="example@domain.com" deliveryMethod="Network">
          <network host="smtp.gmail.com" port="587"
              userName="example@domain.com" password="password"/>
      </smtp>
    </mailSettings>
  </system.net>
</configuration>

Et lorsque vous envoyez du courrier électronique, il suffit d'activer SSL sur votre SmtpClient :

var message = new MailMessage("navin@php.net");
// here is an important part:
message.From = new MailAddress("example@domain.com", "Mailer");
// it's superfluous part here since from address is defined in .config file
// in my example. But since you don't use .config file, you will need it.

var client = new SmtpClient();
client.EnableSsl = true;
client.Send(message);

Assurez-vous que vous envoyez des e-mails à partir de la même adresse e-mail que celle avec laquelle vous essayez de vous authentifier sur Gmail.

Nota : À partir de .NET 4.0, vous pouvez insérer enableSsl="true" dans web.config au lieu de le définir dans le code.

1 votes

La configuration web complète se trouve sous <configuration> et devrait être <system.net> <mailSettings> <smtp from="example@domain.com" deliveryMethod="Network"> <network host="smtp.gmail.com" port="587" userName="example@domain.com" password="password"/> </smtp> </mailSettings> </system.net>

0 votes

Vous pouvez aussi mettre enableSsl dans la configuration.

1 votes

@Shay - comment activerSSL dans la configuration ?

8voto

Achilles Points 466

Voici ce que j'utilise dans WPF 4

SmtpClient client = new SmtpClient();
client.Credentials = new NetworkCredential("sender_email@domain.tld", "P@$$w0rD");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;

try 
{
    MailAddress maFrom = new MailAddress("sender_email@domain.tld", "Sender's Name", Encoding.UTF8),
    MailAddress maTo = new MailAddress("recipient_email@domain2.tld", "Recipient's Name", Encoding.UTF8);
    MailMessage mmsg = new MailMessage(maFrom, maTo);
    mmsg.Body = "<html><body><h1>Some HTML Text for Test as BODY</h1></body></html>";
    mmsg.BodyEncoding = Encoding.UTF8;
    mmsg.IsBodyHtml = true;
    mmsg.Subject = "Some Other Text as Subject";
    mmsg.SubjectEncoding = Encoding.UTF8;

    client.Send(mmsg);
    MessageBox.Show("Done");
} 
catch (Exception ex) 
{
    MessageBox.Show(ex.ToString(), ex.Message);
    //throw;
}

Attention aux pare-feu et aux antivirus. Ces trucs bizarres ont tendance à bloquer les applications qui envoient du courrier électronique. J'utilise McAfee Enterprise et je dois ajouter le nom de l'exécutable (comme Bazar.* pour Bazar.exe et Bazar.vshost.exe) pour pouvoir envoyer des courriels...

0 votes

Je souhaite créer une page "contact" pour que les utilisateurs envoient des courriels à l'administrateur du site. Existe-t-il un moyen de définir "From" comme étant leur adresse e-mail ?

0 votes

Vous pouvez usurper l'adresse de l'expéditeur, mais vous risquez fort de voir votre courriel marqué comme spam. Je vous suggère d'envoyer un courriel de info@yourhost.tld à l'administrateur et à la personne qui essaie de vous contacter. Ensuite, l'administrateur peut envoyer une réponse à tous.

0 votes

Il y a un petit bug ici, qui fait que les noms d'affichage sont jetés. La construction de MailMessage devrait ressembler à ceci : MailMessage mmsg = nouveau MailMessage(maFrom, maTo) ;

3voto

sf. Points 11

Modifier le port en 465

3voto

Jeevan Points 11

Il n'est pas nécessaire de faire quoi que ce soit. Il vous suffit de vous connecter à votre compte courant la première fois et de suivre les instructions.

Votre problème sera résolu. Il est dû au fait que vous avez créé le compte dans google apps mais que vous ne vous êtes pas connecté. Connectez-vous, suivez les instructions et essayez.

0 votes

Étant donné que le code de l'OP semble correct, il se peut que ce soit là le problème.

0voto

Mon code se connecte à smtp.google.com en utilisant TLS sur le port 587 (SSL devrait être le port 465) mais a toujours besoin de EnableSsl=true.

SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Port = 587;
smtp.EnableSsl = true;
smtp.UseDefaultCredentials = false;
NetworkCredential credentials = new NetworkCredential();
credentials.UserName = "INSERT EMAIL";
credentials.Password = "INSERT PASSWORD";
smtp.Credentials = credentials;

MailAddress addressFrom = new MailAddress(credentials.UserName);
MailAddress addressTo = new MailAddress("INSERT RECIPIENT");
MailMessage msg = new MailMessage(addressFrom, addressTo);
msg.Subject = "SUBJECT"
msg.Body = "BODY";

smtp.Send(msg);

Notez ces conditions préalables importantes sur votre compte G SUITE

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X