
Comment sécuriser l'envoi d'emails via Gmail avec OAuth2 en C# .NET - le guide pas à pas
Pourquoi OAuth2 est devenu indispensable ?
Depuis septembre 2024, Google a commencé à supprimer progressivement le support des applications dites "moins sécurisées" (Less Secure Apps), qui permettaient notamment l'envoi d'e-mails via SMTP en utilisant simplement une adresse Gmail et un mot de passe. Cette méthode, bien que simple à mettre en place, présentait des vulnérabilités de sécurité et a donc été désactivée pour les nouveaux comptes.
Si cette option avait été activée avant septembre 2024, il est encore possible (à ce jour) de continuer à envoyer des mails de cette façon. Cependant, Google n'a pas communiqué de date limite pour la désactivation complète, ce qui rend cette solution instable et risquée sur le long terme.
Dans cet article, nous verrons comment créer les identifiants OAuth 2.0 nécessaires à l'envoi d'e-mails via Gmail, directement depuis la console Google Cloud, puis comment intégrer cette authentification dans une application C# .NET.
Qu'est-ce qu'OAuth2 ?
OAuth 2.0 est un protocole d'autorisation sécurisé qui permet à une application d'accéder à des ressources protégées (comme l'envoi d'e-mails via Gmail) au nom d'un utilisateur, sans avoir à connaître son mot de passe. Au lieu de transmettre les identifiants directement, OAuth2 utilise des "jetons" (tokens) pour valider les accès. Ce mécanisme est aujourd'hui largement utilisé par les grandes plateformes (Google, Microsoft, Facebook, etc.) pour offrir une meilleure sécurité tout en simplifiant l'expérience utilisateur.
Création des identifiants OAuth2 dans Google Cloud Console
Avant de pouvoir envoyer des e-mails via Gmail en utilisant OAuth2, il est nécessaire de créer des identifiants (credentials) dans la Google Cloud Console. Voici la procédure pas-à-pas :
1. Créer un projet Google Cloud
Rendez-vous sur https://console.cloud.google.com.
Cliquez sur le menu de sélection de projet en haut de la page, puis sur "NEW PROJECT".

Bouton "Select a project"

Bouton "New project"
Donnez un nom à votre projet et cliquez sur "Create". Pour cet exemple, nous appellerons le projet "Gmail OAuth tutorial". (La création peut prendre quelques minutes)

page de création du projet
Une fois le projet créé vous pouvez le sélectionner dans la liste des projets.

Sélection du projet "Gmail OAuth tutorial"
2. Configurer l'écran de consentement OAuth
Avant de créer les identifiants, vous devez configurer l'écran de consentement OAuth. Cela permet à Google de savoir quelles informations seront partagées avec l'utilisateur lors de l'authentification.
Rendez-vous sur la page "APIs & Services", accessible via la barre de recherche.
Recherche "APIs & Services"
Dans le menu de gauche, cliquez sur "OAuth consent screen".

Menu "OAuth consent screen"
Vous pouvez cliquer sur "GET STARTED" pour commencer la configuration du "OAuth consent screen".

Ecran get started
Veuillez compléter les informations demandées dans la section "App Information", puis cliquez sur "NEXT" :
- App name : Nom de l'application qui sera affiché à l'utilisateur lors de l'authentification.
- User support email : Adresse e-mail de support pour les utilisateurs.

Section "App Information"
Dans la section "Audience", sélectionnez l'option "External".

Section "Audience"
Pour la section "Contact Information", vous pouvez laisser l'adresse e-mail par défaut ou en ajouter une autre.

Section "Contact Information"
Pour finir, cliquez sur "Continue", puis sur "Create" pour finaliser la création de l'écran de consentement OAuth.

Section "Finish"
3. Publier l'application en production
Une fois l'écran de consentement OAuth configuré, l'application est en mode test. Dans ce mode, les tokens d'actualisation (refresh tokens) expirent après 7 jours. Cela peut poser problème pour une utilisation à long terme.
Pour éviter cette limitation, nous allons publier l'application en production. Cela permet notamment d'obtenir des refresh tokens qui ne sont pas limités dans le temps (tant qu'ils ne sont pas révoqués manuellement).
Pour publier votre application :
Nous allons maintenant aller dans "Audience" puis cliquer sur "PUBLISH APP"

Menu "Audience" avec le bouton "publish app"
Une modal s'ouvre, vous pouvez cliquer sur "CONFIRM" pour publier l'application.
⚠️ Comme vous pouvez le voir sur la capture d'écran ci-dessous, un message d'avertissement précise les conditions qui nécessitent une vérification manuelle avant la mise en production de l'application. Cette validation manuelle pouvant prendre du temps, je vous recommande de respecter les critères permettant d'éviter cette étape, notamment en ne renseignant pas de logo.

Modal de confirmation de publication
4. Créer les identifiants OAuth 2.0
Une fois l'écran de consentement configuré et l'application publiée, vous pouvez créer les identifiants OAuth 2.0.
Retournons sur la page APIs & Services et dans le menu de gauche, cliquez sur "Credentials".

Menu "Credentials"
Une fois sur la page des credentials nous pouvons cliquer sur "CREATE CREDENTIALS" puis choisir le type "OAuth client ID".

Menu "Create credentials"
Dans la section "Application type", sélectionnez "Web application" et vous avez la possibilité de saisir un nom si vous le souhaitez.

Section "OAuth client ID"
Dans la section "Authorized redirect URIs", ajoutez l'URI de redirection suivante : https://developers.google.com/oauthplayground. Cela permet à l'application de rediriger l'utilisateur vers l'outil OAuth Playground de Google, ce qui facilitera la génération du refresh token.
Une fois que vous avez rempli toutes les informations, cliquez sur "Create".

Section "Authorized redirect URIs"
Une fois les identifiants créés, vous verrez une fenêtre avec votre Client ID et votre Client Secret. Notez ces informations, car nous en aurons besoin plus tard.

Client ID et Client Secret
5. Générer un Refresh Token
Comme indiqué précédemment, nous allons utiliser l'outil OAuth Playground mis à disposition par Google pour générer un refresh token. Cet outil permet de simuler une authentification OAuth complète sans avoir à implémenter de flux dans notre propre application.
Une fois le refresh token généré, nous pourrons directement le transmettre à notre application C# .NET. Celle-ci pourra alors utiliser ce token pour générer des access tokens à la volée, sans intervention manuelle ni ré-authentification de l'utilisateur.
Pour cela, rendez-vous sur le site : https://developers.google.com/oauthplayground/ et cliquez sur l'engrenage en haut à droite de la page.

Page d'accueil de l'OAuth Playground
Dans la section "OAuth 2.0 Configuration", cochez la case "Use your own OAuth credentials" et entrez votre Client ID et Client Secret que vous avez notés précédemment. Puis vous pouvez fermer la modal.

Modale de configuration de l'OAuth Playground
Dans la zone de saisie, entrez https://mail.google.com puis cliquez sur "Authorize APIs".

Zone de saisie de l'API
Une nouvelle fenêtre s'ouvre pour vous demander de vous connecter à votre compte Google. Connectez-vous avec le compte Gmail que vous souhaitez utiliser pour envoyer des e-mails.

Page de connexion Google
Comme l'application n'est pas encore validée par Google, un avertissement apparaît. Vous pouvez cliquer sur "Paramètres avancés" puis sur "Accéder à ...".

Page d'avertissement de sécurité
Une fois connecté, vous verrez une page vous demandant de donner des autorisations à l'application. Cliquez sur "Continuer" pour accorder les autorisations nécessaires.

Page d'autorisation de l'application
Une fois que vous avez accordé les autorisations, vous serez redirigé vers l'OAuth Playground. Vous verrez un message indiquant que l'autorisation a été accordée avec succès.
Maintenant, vous pouvez cliquer sur "Exchange authorization code for tokens" pour obtenir le refresh token.

Page d'échange du code d'autorisation
Une fois que vous avez cliqué sur "Exchange authorization code for tokens", vous verrez une nouvelle section avec l'access token et le refresh token.
Notez le refresh token, car nous en aurons besoin pour notre application C# .NET.

Page avec le refresh token
Implementation de l'envoi d'e-mails avec OAuth2 dans une application C# .NET
Nous avons maintenant le refresh token nécessaire pour envoyer des e-mails via Gmail. Nous allons maintenant voir comment l'utiliser dans une application C# .NET.
1. Installer les packages nécessaires
Pour faciliter la mise en œuvre de l'envoi d'e-mails via Gmail en utilisant OAuth2, nous allons ajouter deux packages NuGet à notre projet :
- Google.Apis.Auth : Ce package va nous permettre de générer automatiquement des access tokens à partir de notre refresh token de manière sécurisée et conforme aux standards OAuth2 de Google.
- MailKit : Une bibliothèque complète pour l'envoi d'e-mails. Elle simplifie considérablement la configuration et l'envoi de messages via SMTP, notamment lorsqu'on utilise OAuth2. MailKit fonctionne également très bien avec une configuration SMTP classique (nom d'utilisateur / mot de passe), mais dans notre cas, elle va surtout nous permettre d'envoyer des e-mails via Gmail en utilisant le jeton d'accès obtenu précédemment.
Vous pouvez donc ajouter ces deux packages à votre projet via la console NuGet :
dotnet add package Google.Apis.Auth
dotnet add package MailKit
Si vous utilisez Visual Studio, vous pouvez également ajouter les packages via l'interface graphique. Faites un clic droit sur votre projet dans l'Explorateur de solutions, puis sélectionnez "Manage NuGet Packages". Recherchez les packages Google.Apis.Auth et MailKit, puis cliquez sur "Install".
2. Générer un Access Token à partir du Refresh Token
Une fois le refresh token obtenu, il est possible de générer un access token à la volée dans votre application C# .NET.
Pour cela, nous allons créer une méthode dédiée, par exemple nommée GetGmailAccessToken
. Cette méthode se charge de rafraîchir le jeton d'accès uniquement si nécessaire, en se basant sur la propriété IsStale
du token, qui indique s'il est expiré ou proche de l'être.
Pour éviter de générer un nouveau jeton à chaque appel, nous stockons ce token dans une propriété statique privée de type TokenResponse
. Cela permet de réutiliser le même access token tant qu'il reste valide.
private static TokenResponse? _gmailAccessToken;
Voici un exemple d'implémentation de cette méthode (Remplacez YOUR_CLIENT_ID
, YOUR_CLIENT_SECRET
et YOUR_REFRESH_TOKEN
par vos propres identifiants obtenus depuis la Google Cloud Console et l'outil OAuth Playground.) :
Grâce à cette méthode, vous pouvez facilement obtenir un access token valide avant chaque envoi d'e-mail, sans avoir à demander une nouvelle authentification de l'utilisateur. C'est cette fonction que vous appellerez avant d'utiliser MailKit pour envoyer vos e-mails.
3. Envoyer un email avec MailKit
Une fois l'access token généré grâce au refresh token, il est temps d'envoyer un e-mail via Gmail en utilisant le protocole SMTP et l'authentification OAuth2.
Pour cela, nous allons créer une méthode qui prend en paramètre un objet EmailRequestBo
contenant les informations nécessaires : l'expéditeur, le ou les destinataires, le sujet et le contenu HTML du message.
Voici la structure de l'objet EmailRequestBo
que nous utiliserons dans notre exemple :
Et pour chaque contact (destinataire principal, en copie ou en copie cachée), nous avons la classe suivante :
Voici maintenant un exemple complet d'une méthode SendEmail
permettant d'envoyer un e-mail HTML via Gmail et OAuth2 :
Remplacez YOUR_SENDER_EMAIL
par l'adresse du compte que vous avez utilisé pour générer le refresh token dans l'OAuth Playground. Il s'agit du compte qui a autorisé l'accès via l'API Gmail et qui sera donc utilisé pour l'envoi des e-mails.
Cette méthode utilise la bibliothèque MailKit pour gérer l'envoi de l'e-mail. Elle établit une connexion sécurisée avec le serveur SMTP de Gmail (via STARTTLS), puis utilise le mécanisme d'authentification OAuth2 avec l'access token généré précédemment.
Avec cette approche, vous pouvez envoyer des e-mails de manière sécurisée via Gmail, sans stocker de mot de passe en clair, tout en restant conforme aux recommandations actuelles de Google.
Conclusion
Sécuriser l'envoi d'e-mails via Gmail est aujourd'hui un impératif, et OAuth2 s'impose comme la solution moderne et fiable pour y parvenir. Dans ce guide, nous avons vu comment :
- Créer des identifiants OAuth2 dans la Google Cloud Console et configurer l'écran de consentement.
- Publier l'application en production afin de bénéficier de refresh tokens valides à long terme (et ainsi éviter leur expiration après 7 jours).
- Utiliser OAuth Playground pour générer facilement un refresh token.
- Implémenter l'envoi d'e-mails avec OAuth2 dans une application C# .NET en utilisant les packages Google.Apis.Auth et MailKit.