Utilisez Azure pour envoyer des e-mails avec SendGrid, Graph et Office 365

Microsoft Azure n’a pas de service de livraison d’e-mails. Que vous testiez des applications ou développiez des scripts dans Azure pour envoyer des e-mails, sachez qu’aucun service e-mail natif n’est disponible pour vous.

La connexion SMTP sortante via le port 25 est entièrement bloquée dans Azure. Si vous êtes un client d’entreprise, vous pouvez demander le déblocage du port 25 pour votre locataire Azure. Sinon, comment pouvez-vous envoyer des e-mails depuis Azure ?

Il existe généralement deux façons de laisser passer les e-mails sortants via Azure : en utilisant un serveur de relais SMTP et des requêtes API REST. La plupart des services de livraison d’e-mails proposent à la fois des méthodes SMTP et API pour l’envoi d’e-mails. Dans cet article, vous apprendrez comment envoyer des e-mails depuis Azure vers le reste du monde.

Prérequis

Cet article est un tutoriel et si vous prévoyez de suivre les exemples au fur et à mesure, vous devez remplir certaines exigences.

Savoir quel service de messagerie électronique utiliser avec Azure pour envoyer des e-mails

Il existe plusieurs services de messagerie électronique cloud disponibles. Certains des noms les plus connus sont SendGrid, MailJet et MailGun. Quel que soit le service de messagerie électronique que vous choisissez, les utiliser pour envoyer des e-mails depuis Azure est similaire ; adresse et port du serveur pour SMTP et adresse de point de terminaison de l’API pour REST.

SendGrid est un exemple de service de messagerie électronique tiers utilisé dans cet article. D’autres services de messagerie électronique utilisés comme exemples sont Office 365 SMTP relay et Microsoft Graph API.

Connexe: Quel service de messagerie Azure choisir pour 2021

Utiliser SendGrid

SendGrid est probablement l’option de service d’email la plus populaire pour l’envoi d’emails depuis Azure. Azure et SendGrid sont si populaires car il y avait auparavant un plan gratuit avec une limite de 25 000 emails par mois pour les clients Azure.

Bien que le plan gratuit ne soit plus proposé dans le portail Azure, comme confirmé par Microsoft, il est possible de s’inscrire à un abonnement gratuit avec une limite de 100 emails par jour. Vous aurez ensuite accès au service de relais SMTP de SendGrid ou à l’API d’emails pour envoyer des emails à partir d’une application Azure ou d’une machine virtuelle.

Création d’un compte SendGrid

Pour utiliser les services de SendGrid, vous devez d’abord avoir un compte SendGrid. Rendez-vous sur la page Inscription, et vous devriez voir le formulaire comme indiqué ci-dessous. Entrez votre adresse email et le mot de passe que vous avez choisi. Ensuite, acceptez les conditions et cliquez sur le bouton Créer un compte.

Signing up for a free SendGrid account

Sur la page suivante, vous devez entrer votre nom et les informations de votre entreprise. Vous devez également sélectionner les options appropriées telles que votre rôle, le nombre d’emails à envoyer par mois et le nombre d’employés. Ensuite, cliquez sur Commencer.

Entering your account information

Lorsque vous vous connectez pour la première fois à SendGrid, vous pouvez obtenir une erreur indiquant : « Vous n’êtes pas autorisé à accéder à SendGrid ; veuillez contacter le support. » Lorsque cela se produit, ouvrez un ticket auprès du support SendGrid. Ils peuvent avoir besoin de poser quelques questions de vérification avant de débloquer votre accès.

On vous demandera d’activer l’authentification à deux facteurs lors de votre première connexion. Assurez-vous de suivre les instructions avec précision.

Création d’une identité d’expéditeur SendGrid

Après avoir créé le compte SendGrid, la prochaine étape consiste à autoriser l’identité de l’expéditeur. Il existe deux options : authentifier un seul expéditeur (par exemple, [email protected]) ou authentifier tout un domaine (par exemple, domaine.com).

Dans cet exemple, vous allez créer une identité d’expéditeur unique qui servira d’adresse d’expéditeur. Seule l’adresse d’expéditeur vérifiée sera autorisée à envoyer des messages via le service SendGrid. Suivez les instructions ci-dessous pour créer l’identité d’expéditeur unique.

  1. Sur la page Bienvenue, cliquez sur le bouton Créer un seul expéditeur.
Creating a single sender

2. Ensuite, sur le volet latéral Créer un expéditeur, fournissez toutes les informations requises. Les champs obligatoires sont marqués d’un astérisque rouge à côté d’eux pour plus de facilité de référence. Après avoir saisi les détails, cliquez sur Créer.

Providing the sender details

Vous verrez alors la nouvelle adresse d’expéditeur répertoriée sous la page Vérification de l’expéditeur unique. Comme vous pouvez le voir dans l’exemple ci-dessous, l’adresse n’est pas encore vérifiée, comme l’indique une croix rouge dans la colonne VERIFIÉ.

Viewing the sender address verification status

3. Pour vérifier l’expéditeur, localisez l’e-mail envoyé à l’adresse de l’expéditeur, similaire à la capture d’écran ci-dessous. Ensuite, cliquez sur le bouton Vérifier l’expéditeur unique.

Verifying the Single Sender address

L’adresse de l’expéditeur sera vérifiée. Vous devriez voir une page similaire, comme indiqué ci-dessous, confirmant que la vérification de l’expéditeur est terminée.

Confirming that the sender address verification is complete

Création d’une clé d’API SendGrid

Après avoir créé l’adresse d’expéditeur unique, l’interface de création des clés d’API devient disponible. Pensez à la clé d’API SendGrid comme au mot de passe. Sans cela, votre code ne peut pas s’authentifier auprès du service de relais SMTP SendGrid. Suivez les étapes ci-dessous pour créer une nouvelle clé d’API.

  1. Dans le menu de gauche, cliquez sur Paramètres > Clés d’API. Ensuite, cliquez sur le bouton Créer une clé d’API en haut à droite de la page.
Creating a new SendGrid API key

2. Le volet Créer une clé d’API apparaît. Entrez le nom de la clé d’API que vous créez. Utilisez un nom qui a du sens, comme « Clé API de test Azure ». Ensuite, pour simplifier, sélectionnez Accès complet comme autorisation. Enfin, cliquez sur le bouton Créer et afficher.

Naming the API key and choosing permissions

3. La nouvelle clé d’API est affichée ci-dessous. Copiez et enregistrez la valeur de la clé car elle ne vous sera plus affichée. Après avoir copié la clé, cliquez sur Terminé.

Saving the new SendGrid API key

Envoyer un e-mail à partir d’Azure en utilisant le relais SMTP SendGrid.

Maintenant que vous avez les composants requis (compte, expéditeur et clé) pour utiliser SendGrid afin d’envoyer des e-mails Azure, il est temps de tester si le service de relais SMTP de SendGrid fonctionne. Dans cette section, vous allez utiliser PowerShell pour envoyer des e-mails à partir d’une machine virtuelle Azure.

Avant d’exécuter un code quelconque, vous devez connaître ces exigences.

  • L’adresse du serveur SMTP SendGrid est smtp.sendgrid.net.
  • Le nom d’utilisateur utilisé pour l’authentification SMTP est toujours apikey.
  • Le mot de passe à utiliser est la valeur de la clé API que vous avez créée dans SendGrid.
  • N’utilisez pas le port 25. Utilisez plutôt le port 587.
  • Seule l’adresse d’expéditeur vérifiée dans SendGrid est valide pour être utilisée comme l’expéditeur de vos e-mails. Dans cet exemple, l’expéditeur autorisé est [email protected].

Le script ci-dessous enverra un e-mail via le relais SMTP de SendGrid. Copiez le code ci-dessous et modifiez les valeurs $sendGridApiKey, From, To et Body. Ensuite, exécutez le code dans votre session PowerShell. Référez-vous aux commentaires pour comprendre ce que chaque ligne de code fait.

# Définissez votre clé API ici
$sendGridApiKey = 'SG...........P258'

$SendGridEmail = @{
	# Utilisez votre adresse d'expéditeur vérifiée.
	From = '[email protected]'
	# Spécifiez le destinataire du courrier électronique. Toute adresse e-mail valide devrait fonctionner.
	To = '[email protected]'
	# Mettez à jour ceci avec l'objet du courrier électronique que vous souhaitez utiliser.
	Subject = 'This is a test message from Azure via SendGrid'
	# Mettez à jour ceci avec le corps du courrier électronique ou le message que vous souhaitez envoyer.
	Body = 'This is a test message from Azure via SendGrid'
	
	# NE CHANGEZ RIEN EN DESSOUS DE CETTE LIGNE
	SmtpServer = 'smtp.sendgrid.net'
	Port = 587
	UseSSL = $true
	Credential = New-Object PSCredential 'apikey', (ConvertTo-SecureString $sendGridApiKey -AsPlainText -Force)	
}

# Envoyer le courrier électronique
Send-MailMessage @SendGridEmail

La démonstration ci-dessous montre à quoi ressemble l’exécution du code ci-dessus en PowerShell en temps réel.

Sending an Email from Azure using SendGrid SMTP Relay

Pour confirmer la délivrabilité du courrier électronique, vérifiez la boîte aux lettres du destinataire pour trouver le message de test que vous avez envoyé. Le résultat serait similaire à celui indiqué ci-dessous. Comme vous pouvez le voir, le message est envoyé depuis l’adresse de l’expéditeur via sendgrid.net.

Confirming the SMTP test message was delivered

Relatif : Send-MailMessage : La façon d’envoyer un courrier électronique en PowerShell

Envoi d’un courrier électronique depuis Azure en utilisant l’API SendGrid

Une autre façon d’utiliser SendGrid avec Azure pour envoyer des courriers électroniques consiste à utiliser la SendGrid Web API V3. Au lieu de communiquer avec SendGrid via SMTP, l’utilisation de l’API se fait via HTTP. La requête HTTP est envoyée à l’URL de point de terminaison de l’API SendGrid.

Le script PowerShell d’exemple ci-dessous utilise la cmdlet Invoke-RestMethod pour soumettre la demande d’email d’Azure à SendGrid. Copiez le code et modifiez les valeurs des variables $sendGridApiKey, $fromAddress, $toAddress, $mailSubject et $mailMessage.

Une fois les variables mises à jour, exécutez le code dans PowerShell.

Set your API Key here
 $sendGridApiKey = 'SG………..P258'
 Set the sender and recipient addresses
 $fromAddress = "[email protected]"
 $toAddress = "[email protected]"
 Set the mail subject
 $mailSubject = "This is a test message from Azure via SendGrid API"
 Set the mail message
 $mailMessage = "This is a test message from Azure via SendGrid API"
 DO NOT CHANGE ANYTHING BELOW THIS LINE
 Compose the Mail Body
 $mailbody = @{
   personalizations = @(
     @{
       to      = @(
         @{
           email = $toAddress
         }
       )
       subject = $mailSubject
     }
   )
   from             = @{
     email = $fromAddress
   }
   content          = @(
     @{
       type  = "text/plain"
       value = $mailMessage
     }
   )
 } | ConvertTo-Json -Depth 10
 $headers = @{'Authorization' = "Bearer $($sendGridApiKey)" }
 $mailApiUri = 'https://api.sendgrid.com/v3/mail/send'
 Send the email
 Invoke-RestMethod -Method Post -Uri $mailApiUri -Body $mailbody -Headers $headers -ContentType application/json

Après avoir exécuté le code PowerShell ci-dessus, vérifiez la boîte de réception du destinataire et confirmez qu’il a reçu le message de test. L’exemple ci-dessous montre un message de test envoyé avec succès depuis Azure via l’API SendGrid.

Confirming the API test message was delivered

Si vous souhaitez en savoir plus sur l’API Web SendGrid, visitez la page API d’envoi de courrier V3.

Utilisation de l’authentification SMTP Office 365

Une autre option pour envoyer des e-mails Azure est d’utiliser le relais SMTP Office 365. Cela est possible si votre organisation dispose déjà d’un abonnement Exchange Online. Tout comme l’utilisation de SendGrid en tant qu’hôte intelligent SMTP, le relais SMTP Office 365 nécessite une authentification et l’utilisation uniquement du port 587.

Avant d’utiliser le relais SMTP Office 365, vous devez connaître les conditions suivantes pour que cela fonctionne.

  • L’adresse de l’expéditeur doit être un objet destinataire Exchange Online valide, tel qu’une boîte aux lettres ou un utilisateur de messagerie. Cependant, si des avis de non-distribution (NDR) doivent être stockés, utilisez une boîte aux lettres.
  • L’utilisateur d’authentification doit disposer d’une licence Exchange Online valide. Seuls les utilisateurs d’Exchange Online disposant d’une licence sont autorisés à utiliser le relais SMTP Office 365.
  • Suppose que l’utilisateur d’authentification est différent de l’expéditeur. Dans ce cas, l’utilisateur doit être assigné la permission Envoyer en tant que pour le compte de l’expéditeur.
  • La méthode d’authentification utilisée est basique (héritage). Cela signifie que si l’authentification de base SMTP est désactivée dans votre organisation ou lorsque Microsoft abandonne enfin l’authentification de base, l’authentification SMTP ne fonctionnera plus.
  • L’adresse du serveur relais SMTP est smtp.office365.com, et le numéro de port est 587.

Lié : Comment envoyer un e-mail avec Office 365 Direct Send et PowerShell

Création d’une adresse d’expéditeur Office 365

Dans cet exemple, l’expéditeur et l’utilisateur d’authentification sont séparés. Assurez-vous de vous connecter à Exchange Online PowerShell d’abord. Une fois connecté, suivez les étapes ci-dessous.

Créez une boîte aux lettres partagée en utilisant la commande ci-dessous. Modifiez les valeurs -Name et -PrimarySMTPAddress par vos valeurs correctes.

New-Mailbox -Shared -Name 'SMTP Mailer 365' -PrimarySMTPAddress '[email protected]'

La boîte aux lettres partagée devrait être créée et renvoyer un résultat similaire à celui ci-dessous.

Creating a new shared mailbox as the sender

Ensuite, attribuez les autorisations Envoyer en tant que à l’utilisateur d’authentification. Dans l’exemple ci-dessous, l’utilisateur se voit attribuer les autorisations Envoyer en tant que pour la boîte aux lettres partagée.

Add-RecipientPermission -Identity '[email protected]' -Trustee '[email protected]' -AccessRights SendAs -Confirm:$false

Une fois la commande ci-dessus exécutée, vous devriez obtenir un résultat similaire à celui ci-dessous.

Assigning Send As permission

Envoi d’un courrier électronique depuis Azure en utilisant le relais SMTP Office 365

Après la création de l’adresse de l’expéditeur et l’attribution des autorisations d’envoi en tant que, l’étape suivante consiste à tester la livraison des courriers électroniques à l’aide de PowerShell et du relais SMTP Office 365.

Le code ci-dessous s’authentifie en utilisant [email protected]. L’adresse [email protected] apparaît comme expéditeur. Assurez-vous de remplacer les valeurs correctes avant d’exécuter le code.

# Fournissez vos informations d'identification SMTP
$username = '[email protected]'
$password = '*************'

# Fournissez l'adresse e-mail de l'expéditeur et du destinataire
$fromAddress = '[email protected]'
$toAddress = '[email protected]'

# Spécifiez le sujet de l'e-mail et le message
$mailSubject = 'This is a test message from Azure via Office 365 SMTP Relay'
$mailMessage = 'This is a test message from Azure via Office 365 SMTP Relay'

# NE MODIFIEZ RIEN EN DESSOUS DE CETTE LIGNE
$Office365RelayEmail = @{
	From = $fromAddress
	To = $toAddress
	Subject = $mailSubject
	Body = $mailMessage	
	SmtpServer = 'smtp.office365.com'
	Port = 587
	UseSSL = $true
	Credential = New-Object PSCredential $username, (ConvertTo-SecureString $password -AsPlainText -Force)	
}

# Envoyez l'e-mail
Send-MailMessage @Office365RelayEmail

L’utilisation d’informations d’identification en texte clair dans des scripts n’est pas recommandée. Les scripts de production doivent utiliser le chiffrement des informations d’identification ou la gestion des secrets pour sécuriser les noms d’utilisateur et les mots de passe.

Maintenant, il est temps de vérifier la boîte aux lettres du destinataire. Confirmez que le message de test a été reçu.

Confirming the Office 365 SMTP relay test message was delivered

Utilisation de l’API Microsoft Graph pour envoyer un e-mail Azure.

Au lieu d’utiliser le relais SMTP d’Office 365, le moyen le plus sécurisé et recommandé est d’utiliser Microsoft Graph API. Avec Microsoft Graph API, vous pouvez envoyer des e-mails à partir de n’importe quelle boîte aux lettres de votre organisation en utilisant des appels d’API REST.

Pour utiliser Microsoft Graph API pour envoyer des e-mails, vous avez besoin d’une application Azure AD enregistrée. L’application enregistrée doit être attribuée avec l’autorisation d’API Mail.Send. Les sections suivantes vous montreront comment configurer Microsoft Graph API et l’utiliser pour envoyer des e-mails.

Connexe : Utilisation de Microsoft Graph API avec PowerShell

Inscription d’une nouvelle application dans Azure Active Directory

Dans cette section, vous allez enregistrer une nouvelle application web dans l’annuaire actif Azure. La nouvelle application agit en tant qu’identité d’authentification pour Microsoft Graph. Connectez-vous au Portail Azure si vous n’êtes pas encore connecté.

  1. Accédez à Azure Active Directory —> Inscription de l’application. Ensuite, cliquez sur le bouton Nouvelle inscription.
Creating a new app registration

2. Sur la page Inscrire une application, saisissez le nom de l’application.

3. Sous la rubrique Types de compte pris en charge, choisissez Comptes de ce répertoire organisationnel uniquement. Tapez HTTP://localhost comme URI de redirection. Enfin, cliquez sur le bouton Enregistrer.

Registering an application

4. Attendez que l’enregistrement soit terminé. Le processus ne prend que quelques secondes. N’oubliez pas de noter les valeurs du ID d’application (client) et du ID de répertoire (locataire). Vous en aurez besoin plus tard.

Saving the Application ID and Directory values

Création d’une clé secrète client

Pensez à l’ID d’application que vous avez créé dans la section précédente comme un nom d’utilisateur. Et cet ID d’application a besoin d’un mot de passe – qui est la clé secrète.

Pour ajouter une nouvelle clé secrète client, suivez les étapes ci-dessous.

  1. Accédez à Certificats et secrets, puis cliquez sur Nouvelle clé secrète client.
  2. Entrez la description de la clé secrète client, comme clé1.
  3. Sélectionnez quand la clé secrète expire et cliquez sur Ajouter. Dans l’exemple ci-dessous, la clé secrète expire dans 1 an.
Adding a new client secret key

Vous verrez la nouvelle clé répertoriée sous la section Secrets clients. C’est le seul moment où vous verrez la valeur de la clé, alors enregistrez une copie.

Viewing the client secret key value

Maintenant que vous avez créé l’ID d’application et la clé secrète, il ne reste plus qu’à attribuer les autorisations requises de l’API Microsoft Graph. Sans attribution d’autorisation, l’application peut s’authentifier mais n’aura aucune autorité pour faire quoi que ce soit, comme envoyer des e-mails.

Pour commencer à attribuer des autorisations, suivez les étapes ci-dessous.

  1. Cliquez sur Permissions de l’API dans le menu de gauche.

2. Ensuite, sous la page des Permissions configurées, cliquez sur le bouton Ajouter une permission.

Adding API permission

3. Dans le volet Demande de permissions de l’API, cliquez pour sélectionner Microsoft Graph API.

Selecting Microsoft Graph API

4. Lorsqu’on vous demande de choisir le type de permission requise par l’application, cliquez sur Permissions de l’application.

5. Dans la zone de recherche, tapez Mail.Send pour le rechercher. Dans le résultat, cliquez pour cocher la permission Mail.Send. Enfin, cliquez sur Ajouter des permissions.

Assigning mail.send permission

6. Vous remarquerez que le statut de la permission est « Non accordée pour <nom de l’organisation>« . À ce stade, vous ou un administrateur global devez d’abord donner votre consentement pour l’application. Pour accorder la permission, cliquez sur le bouton Accorder le consentement administrateur pour <organisation>.

Granting Admin consent

Le statut de la permission de l’API passe ensuite à « Accordée pour <nom de l’organisation>« .

Confirming the API permission status

Obtention d’un jeton d’accès

Les requêtes envoyées à l’API Microsoft Graph requièrent un jeton d’accès. À ce stade, vous avez déjà votre ID d’application, votre clé secrète et votre ID de locataire. Ces trois informations sont nécessaires pour obtenir un jeton d’accès.

Le script PowerShell ci-dessous envoie la demande de jeton d’accès à l’endpoint de l’API Microsoft Graph. Vous devez mettre à jour les variables $client_id, $client_secret et $tenant_id avec vos valeurs correctes. Ensuite, copiez et collez le code dans PowerShell pour demander le jeton d’accès.

# remplacez par votre ID d'application
$client_id = 'APPLICATION ID'
# remplacez par votre clé secrète
$client_secret = 'SECRET KEY'
# remplacez par votre ID de locataire
$tenant_id = 'TENANT ID'

# NE MODIFIEZ RIEN EN DESSOUS DE CETTE LIGNE
$request = @{
        Method = 'POST'
        URI    = "https://login.microsoftonline.com/$tenant_id/oauth2/v2.0/token"
        body   = @{
            grant_type    = "client_credentials"
            scope         = "https://graph.microsoft.com/.default"
            client_id     = $client_id
            client_secret = $client_secret
        }
    }
# Obtenez le jeton d'accès
$token = (Invoke-RestMethod @request).access_token
# affichez la valeur du jeton
$token

La démonstration ci-dessous montre le script PowerShell ci-dessus en action. Remarquez que le jeton d’accès demandé est stocké dans la variable $token.

Requesting access token

Les jetons d’accès sont valides pendant une (1) heure à partir du moment où ils ont été acquis. Vous devrez demander un autre jeton d’accès après l’expiration du jeton précédent.

Envoyer un e-mail depuis Azure en utilisant l’API Microsoft Graph

Vous êtes maintenant prêt à utiliser l’API Microsoft Graph avec Azure pour

# Fournir l'adresse e-mail de l'expéditeur et du destinataire
$fromAddress = 'SENDER ADDRESS HERE'
$toAddress = 'RECIPIENT ADDRESS HERE'

# Spécifier le sujet de l'e-mail et le message
$mailSubject = 'This is a test message from Azure via Microsoft Graph API'
$mailMessage = 'This is a test message from Azure via Microsoft Graph API'

# NE MODIFIEZ RIEN CI-DESSOUS
# Construire la requête de l'API Microsoft Graph
$params = @{
  "URI"         = "https://graph.microsoft.com/v1.0/users/$fromAddress/sendMail"
  "Headers"     = @{
    "Authorization" = ("Bearer {0}" -F $token)
  }
  "Method"      = "POST"
  "ContentType" = 'application/json'
  "Body" = (@{
    "message" = @{
      "subject" = $mailSubject
      "body"    = @{
        "contentType" = 'Text'
        "content"     = $mailMessage
      }
      "toRecipients" = @(
        @{
          "emailAddress" = @{
            "address" = $toAddress
          }
        }
      )
    }
  }) | ConvertTo-JSON -Depth 10
}

# Envoyer le message
Invoke-RestMethod @params -Verbose


Source:
https://adamtheautomator.com/azure-send-email/