Gebruik Azure om e-mail te verzenden met SendGrid, Graph en Office 365

Microsoft Azure heeft geen e-mailservice. Of je nu applicaties test of scripts ontwikkelt in Azure om e-mails te verzenden, weet dat er geen native e-mailservice beschikbaar is.

Uitgaande SMTP-verbinding via poort 25 is volledig geblokkeerd in Azure. Als je een zakelijke klant bent, kun je een verzoek indienen om poort 25 te deblokkeren voor je Azure-tenant. Anders, hoe kun je anders e-mails vanuit Azure verzenden?

Er zijn meestal twee manieren om uitgaande e-mails via Azure te laten verlopen; gebruik van een SMTP-smart host en REST API-verzoeken. De meeste e-mailservices bieden zowel SMTP- als API-methoden voor het verzenden van e-mails. In dit artikel leer je hoe je e-mails vanuit Azure naar de rest van de wereld kunt verzenden.

Vereisten

Dit artikel is een handleiding, en als je van plan bent de voorbeelden te volgen, zijn er enkele vereisten waaraan je moet voldoen.

Weten welke e-mailservices te gebruiken met Azure om e-mails te verzenden

Er zijn verschillende cloud-e-mailservices beschikbaar om te gebruiken. Enkele bekende namen zijn SendGrid, MailJet en MailGun. Welke e-mailservice je ook kiest, het gebruik ervan om e-mails vanuit Azure te verzenden is vergelijkbaar; serveradres en poort voor SMTP en API-eindpuntadres voor REST.

SendGrid is een voorbeeld van een externe e-mailservice die in dit artikel wordt gebruikt. Extra e-mailservices die als voorbeeld worden gebruikt, zijn Office 365 SMTP-relay en Microsoft Graph API.

Gerelateerd: Welke Azure-e-mailservice te kiezen voor 2021

Gebruik van SendGrid

SendGrid is waarschijnlijk de meest populaire e-mailserviceoptie om e-mails te versturen vanuit Azure. Azure en SendGrid zijn zo populair omdat er vroeger een gratis plan was met een limiet van 25.000 e-mails per maand voor Azure-klanten.

Hoewel het gratis plan niet langer wordt aangeboden in het Azure-portal, zoals bevestigd door Microsoft, is het mogelijk om u aan te melden voor een gratis abonnement met een limiet van 100 e-mails per dag. U heeft dan toegang tot de SMTP-relayservice of de e-mail-API van SendGrid om e-mails te versturen vanuit een Azure-app of VM.

Het aanmaken van een SendGrid-account

Het gebruik van de services van SendGrid vereist dat u eerst een SendGrid-account heeft. Ga naar de Aanmelden-pagina en u zou het onderstaande formulier moeten zien. Voer uw e-mailadres en uw gekozen wachtwoord in. Accepteer vervolgens de voorwaarden en klik op de knop Account aanmaken.

Signing up for a free SendGrid account

Op de volgende pagina moet u uw naam en bedrijfsinformatie invoeren. U moet ook de juiste opties selecteren, zoals uw functie, het aantal e-mails dat u per maand wilt versturen, en het aantal werknemers. Klik vervolgens op Aan de slag.

Entering your account information

Wanneer u voor het eerst inlogt op SendGrid, kan het zijn dat u een foutmelding krijgt waarin staat: “U bent niet gemachtigd om toegang te krijgen tot SendGrid; neem contact op met Support.” Als dit gebeurt, opent u een ticket bij de SendGrid-ondersteuning. Ze moeten mogelijk enkele verificatievragen stellen voordat ze uw toegang ontgrendelen.

Tijdens uw eerste inlog wordt u gevraagd om Twee-Factor authenticatie in te schakelen. Zorg ervoor dat u de instructies nauwkeurig volgt.

Het aanmaken van een SendGrid-zenderidentiteit

Na het aanmaken van het SendGrid-account is de volgende stap het machtigen van de zenderidentiteit. Er zijn twee opties: een enkele afzender authenticeren (bijv. [email protected]) of een volledig domein authenticeren (bijv. domain.com).

In dit voorbeeld maakt u een enkele zenderidentiteit aan die zal dienen als uw afzenderadres. Alleen het geverifieerde afzenderadres mag berichten verzenden via de SendGrid-service. Volg de onderstaande instructies om de enkele zenderidentiteit aan te maken.

  1. Op de Welkom-pagina klikt u op de knop Een enkele afzender maken.
Creating a single sender

2. Vervolgens, op de uitklapbare Afzender aanmaken-pagina, verstrekt u alle vereiste informatie. De vereiste velden zijn gemarkeerd met een rood asterisk voor gemakkelijke referentie. Nadat u de gegevens heeft ingevoerd, klikt u op Aanmaken.

Providing the sender details

U ziet vervolgens het nieuwe afzenderadres vermeld onder de pagina Enkele afzenderverificatie. Zoals u kunt zien aan het voorbeeld hieronder, is het adres nog niet geverifieerd, zoals aangegeven door een rood X onder de kolom GEVERIFIEERD.

Viewing the sender address verification status

3. Om de afzender te verifiëren, zoekt u de e-mail op die naar het afzenderadres is gestuurd, vergelijkbaar met de schermafbeelding hieronder. Klik vervolgens op de knop Enkele afzender verifiëren.

Verifying the Single Sender address

Het afzenderadres wordt geverifieerd. U zou een vergelijkbare pagina moeten zien, zoals hieronder getoond, ter bevestiging dat de afzenderverificatie is voltooid.

Confirming that the sender address verification is complete

Het maken van een SendGrid API-sleutel

Nadat het enkele afzenderadres is gemaakt, wordt de interface voor het maken van API-sleutels beschikbaar. Denk aan de SendGrid API-sleutel als het wachtwoord. Zonder dit kan uw code niet worden geauthenticeerd met de SendGrid SMTP-relaisdienst. Volg de onderstaande stappen om een nieuwe API-sleutel te maken.

  1. In het menu aan de linkerkant klikt u op Instellingen > API-sleutels. Klik vervolgens op de knop API-sleutel maken in de rechterbovenhoek van de pagina.
Creating a new SendGrid API key

2. Het fly-outmenu API-sleutel maken verschijnt. Voer de naam in van de API-sleutel die u maakt. Gebruik een naam die logisch is, zoals “Azure Testing API Key“. Selecteer vervolgens, voor eenvoud, Volledige toegang als toestemming. Klik tot slot op de knop Maken & weergeven.

Naming the API key and choosing permissions

3. De nieuwe API-sleutel wordt vervolgens weergegeven. Kopieer en bewaar nu de sleutelwaarde, want deze wordt niet meer aan u getoond. Na het kopiëren van de sleutel klikt u op Klaar.

Saving the new SendGrid API key

Het verzenden van een e-mail vanuit Azure met behulp van SendGrid SMTP-relais

Nu heb je de vereiste componenten (account, afzender en sleutel) om SendGrid te gebruiken om Azure-e-mails te verzenden. Het is tijd om te testen of de SendGrid SMTP-relaisservice werkt. In dit gedeelte ga je PowerShell gebruiken om e-mails te verzenden vanaf een Azure VM.

Voordat je enige code uitvoert, moet je deze vereisten kennen.

  • Het SendGrid SMTP-serveradres is smtp.sendgrid.net.
  • De gebruikersnaam die wordt gebruikt voor SMTP-authenticatie is altijd apikey.
  • Het wachtwoord dat moet worden gebruikt, is de waarde van de API-sleutel die je hebt aangemaakt in SendGrid.
  • Gebruik geen poort 25. Gebruik in plaats daarvan poort 587.
  • Alleen het geverifieerde afzenderadres in SendGrid is geldig om te gebruiken als de afzender van je e-mails. In dit voorbeeld is de geautoriseerde afzender [email protected].

De onderstaande script zal een e-mail verzenden via de SendGrid SMTP-relay. Kopieer de code hieronder en wijzig de $sendGridApiKey, From, To, en Body waarden. Voer vervolgens de code uit in je PowerShell-sessie. Raadpleeg de opmerkingen om te begrijpen wat elke regel code doet.

# Stel hier je API-sleutel in
$sendGridApiKey = 'SG...........P258'

$SendGridEmail = @{
	# Gebruik je geverifieerde afzenderadres.
	From = '[email protected]'
	# Specificeer de e-mailontvanger. Elk geldig e-mailadres zou moeten werken.
	To = '[email protected]'
	# Werk dit bij met het e-mailonderwerp dat je wilt gebruiken.
	Subject = 'This is a test message from Azure via SendGrid'
	# Werk dit bij met de e-mailtekst of bericht dat je wilt verzenden.
	Body = 'This is a test message from Azure via SendGrid'
	
	# WIJZIG NIETS ONDER DEZE REGEL
	SmtpServer = 'smtp.sendgrid.net'
	Port = 587
	UseSSL = $true
	Credential = New-Object PSCredential 'apikey', (ConvertTo-SecureString $sendGridApiKey -AsPlainText -Force)	
}

# Verstuur de e-mail
Send-MailMessage @SendGridEmail

De onderstaande demo laat zien hoe het uitvoeren van de bovenstaande code in PowerShell er in realtime uitziet.

Sending an Email from Azure using SendGrid SMTP Relay

Om de bezorgbaarheid van de e-mail te bevestigen, controleer de mailbox van de ontvanger om het testbericht te vinden dat je hebt verzonden. Het resultaat zou vergelijkbaar zijn met wat hieronder wordt getoond. Zoals je kunt zien, kwam het bericht van het afzenderadres via sendgrid.net.

Confirming the SMTP test message was delivered

Gerelateerd: Send-MailMessage: De PowerShell-manier om e-mails te verzenden

Het verzenden van een e-mail vanuit Azure met behulp van de SendGrid API

Een andere manier om SendGrid met Azure te gebruiken om e-mails te verzenden, is door de SendGrid Web API V3 te gebruiken. In plaats van te communiceren met SendGrid via SMTP, communiceert de API via HTTP. Het HTTP-verzoek wordt naar de API-eindpunt-URL van SendGrid verzonden.

Het voorbeeld PowerShell-script hieronder gebruikt de Invoke-RestMethod cmdlet om het e-mailverzoek van Azure naar SendGrid te verzenden. Kopieer de code en wijzig de waarden van de variabelen $sendGridApiKey, $fromAddress, $toAddress, $mailSubject en $mailMessage.

Als je klaar bent met het bijwerken van de variabelen, voer dan de code uit in 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

Na het uitvoeren van de bovenstaande PowerShell-code, controleer de mailbox van de ontvanger en bevestig dat deze het testbericht heeft ontvangen. Het onderstaande voorbeeld toont een succesvol afgeleverd testbericht van Azure via de SendGrid API.

Confirming the API test message was delivered

Als je meer wilt weten over de SendGrid Web API, bezoek dan de pagina V3 Mail Send API.

Het gebruik van Office 365 SMTP Authenticatie

Een andere optie om Azure-e-mails te verzenden is het gebruik van de Office 365 SMTP-relay. Dit geldt als jouw organisatie al een Exchange Online-abonnement heeft. Net als bij het gebruik van SendGrid als SMTP-smart host, vereist de Office 365 SMTP-relay authenticatie en het gebruik van alleen poort 587.

Voordat je Office 365 SMTP-relay gebruikt, moet je de volgende voorwaarden kennen voor het goed werkt.

  • Het afzenderadres moet een geldig Exchange Online-ontvangerobject zijn, zoals een mailbox of een mailgebruiker. Maar als niet-afleveringsontvangstbewijzen (NDR) moeten worden opgeslagen, gebruik dan een mailbox.
  • De authenticatiegebruiker moet een geldige Exchange Online-licentie hebben. Alleen gelicentieerde Exchange Online-gebruikers mogen de Office 365 SMTP-relay gebruiken.
  • Stel dat de gebruiker die zich authenticeert verschilt van de afzender. In dat geval moet de gebruiker de Send As-toestemming toegewezen krijgen voor de afzendersaccount.
  • De gebruikte authenticatiemethode is basic (legacy). Dit betekent dat als SMTP basisauthenticatie is uitgeschakeld in uw organisatie, of wanneer Microsoft uiteindelijk basisauthenticatie laat vallen, SMTP Auth niet meer zal werken.
  • Het adres van de SMTP-relayserver is smtp.office365.com, en het poortnummer is 587.

Gerelateerd: Hoe te e-mailen met Office 365 Direct Send en PowerShell

Het aanmaken van een Office 365 afzenderadres

In dit voorbeeld zijn de afzender en de gebruiker die zich authenticeert apart. Zorg ervoor dat u eerst verbindt met Exchange Online PowerShell. Eenmaal verbonden, volgt u de onderstaande stappen.

Maak een gedeelde mailbox aan met behulp van de onderstaande opdracht. Verander de -Name en de -PrimarySMTPAddress naar uw correcte waarden.

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

De gedeelde mailbox moet worden aangemaakt en zou een resultaat moeten opleveren dat lijkt op het onderstaande.

Creating a new shared mailbox as the sender

Dan, wijs de Verzenden Als toestemming toe aan de authenticatiegebruiker. In het onderstaande voorbeeld krijgt de gebruiker de Verzenden Als toestemming voor de gedeelde mailbox.

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

Zodra het bovenstaande commando is uitgevoerd, zou je een resultaat moeten krijgen dat vergelijkbaar is met het onderstaande.

Assigning Send As permission

Een e-mail verzenden vanuit Azure met behulp van Office 365 SMTP Relay

Nadat het afzenderadres is aangemaakt en de Verzenden Als toestemming is toegewezen, is de volgende stap het testen van de e-mailaflevering met PowerShell en Office 365 SMTP-relay.

De code hieronder authenticatie met [email protected]. Het adres [email protected] verschijnt als de afzender. Zorg ervoor dat je de juiste waarden toewijst voordat je de code uitvoert.

# Geef je SMTP-inloggegevens op
$username = '[email protected]'
$password = '*************'

# Geef het afzender- en ontvanger-e-mailadres op
$fromAddress = '[email protected]'
$toAddress = '[email protected]'

# Specificeer het e-mailonderwerp en het bericht
$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'

# WIJZIG NIETS ONDER DEZE REGEL
$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)	
}

# Verzend de e-mail
Send-MailMessage @Office365RelayEmail

Het is niet aanbevolen om inloggegevens in scripts die in platte tekst staan te gebruiken. Productiescripts moeten inloggegevens versleutelen of geheimen beheren om gebruikersnamen en wachtwoorden te beveiligen.

Het is nu tijd om de mailbox van de ontvanger te controleren. Bevestig dat het testbericht is ontvangen.

Confirming the Office 365 SMTP relay test message was delivered

Het gebruik van Microsoft Graph API om Azure E-mail te verzenden

In plaats van het gebruik van de Office 365 SMTP-relay, is de veiligere en aanbevolen manier om Microsoft Graph API te gebruiken. Met Microsoft Graph API kun je e-mails versturen vanuit elke mailbox in jouw organisatie via REST API-oproepen.

Om Microsoft Graph API te gebruiken voor het verzenden van e-mails is een geregistreerde Azure AD-applicatie vereist. De geregistreerde app moet zijn toegewezen met de Mail.Send API-toestemming. De volgende secties laten zien hoe je Microsoft Graph API kunt configureren en gebruiken om e-mails te verzenden.

Gerelateerd: Het gebruik van de Microsoft Graph API met PowerShell

Het registreren van een nieuwe app in Azure Active Directory

In dit gedeelte registreer je een nieuwe webapplicatie in de Azure Active Directory. De nieuwe app fungeert als de authenticatie-identiteit voor Microsoft Graph. Log in op het Azure-portal als je nog niet bent ingelogd.

  1. Navigeer naar Azure Active Directory —> App-registratie. Klik vervolgens op de knop Nieuwe registratie.
Creating a new app registration

2. Op de pagina Een applicatie registreren voer je de naam van de app in.

3. Onder de Ondersteunde accounttypen, kies Alleen accounts in deze organisatiedirectory. Typ HTTP://localhost als de Omleidings-URI. Klik ten slotte op de Registreren-knop.

Registering an application

4. Wacht tot de registratie is voltooid. Het proces duurt slechts enkele seconden. Vergeet niet om de resulterende Toepassings (client) ID en de Map (tenant) ID waarden te noteren. Je hebt ze later nodig.

Saving the Application ID and Directory values

Creëren van een Geheime Clientcode

Bedenk de toepassings-ID die je hebt aangemaakt in de vorige sectie als de gebruikersnaam. En die toepassings-ID heeft een wachtwoord nodig – dat is de geheime code.

Volg de onderstaande stappen om een nieuwe geheime clientcode toe te voegen.

  1. Ga naar Certificaten en geheimen, klik vervolgens op Nieuwe clientgeheim.
  2. Voer de beschrijving in voor het clientgeheim, zoals sleutel1.
  3. Selecteer wanneer het geheim verloopt en klik op Toevoegen. In het onderstaande voorbeeld verloopt de geheime code na 1 jaar.
Adding a new client secret key

Je ziet de nieuwe sleutel vermeld onder de Clientgeheimen sectie. Dit is het enige moment waarop je de sleutelwaarde zult zien, dus bewaar een kopie.

Viewing the client secret key value

Nu je de toepassings-ID en het geheime code hebt aangemaakt, rest nog het toewijzen van de vereiste Microsoft Graph API-toestemming. Zonder toestemming toe te wijzen, kan de toepassing wel authenticeren maar heeft ze geen autoriteit om iets te doen, zoals e-mails verzenden.

Volg de onderstaande stappen om met het toewijzen van toestemming te beginnen.

  1. Klik op API-machtigingen in het menu aan de linkerkant.

2. Klik vervolgens op de pagina Geconfigureerde machtigingen op de knop Een machtiging toevoegen.

Adding API permission

3. In het fly-outmenu API-machtigingen aanvragen, klik om Microsoft Graph API te selecteren.

Selecting Microsoft Graph API

4. Wanneer gevraagd wordt om het type machtiging dat vereist is voor de toepassing te kiezen, klik op Toepassingsmachtigingen.

5. In het zoekvak, typ Mail.Send om ernaar te zoeken. In het resultaat, klik om de Mail.Send machtiging te selecteren. Klik tot slot op Machtigingen toevoegen.

Assigning mail.send permission

6. Je zult merken dat de machtigingsstatus “Niet toegekend voor <organisatienaam>” is. Op dit punt moet jij of een Globale beheerder eerst toestemming geven voor de toepassing. Om toestemming te verlenen, klik op de knop Beheerdersconsent voor <organisatie> geven.

Granting Admin consent

De API-machtigingsstatus verandert dan naar “Toegekend voor <organisatienaam>”.

Confirming the API permission status

Verkrijgen van een toegangstoken

Aanvragen die naar de Microsoft Graph API worden gestuurd, vereisen een toegangstoken. Op dit punt heb je al je toepassings-ID, geheime sleutel en tenant-ID. Die drie stukjes informatie zijn nodig om een toegangstoken te verkrijgen.

De PowerShell-script hieronder stuurt het verzoek om een toegangstoken naar het eindpunt van de Microsoft Graph API. Je moet eerst de $client_id, $client_secret en $tenant_id bijwerken naar je juiste waarden. Kopieer en plak dan de code in PowerShell om het toegangstoken aan te vragen.

# vervangen door uw toepassings-ID
$client_id = 'APPLICATION ID'
# vervangen door uw geheime sleutel
$client_secret = 'SECRET KEY'
# vervangen door uw huurders-ID
$tenant_id = 'TENANT ID'

# WIJZIG NIETS ONDER DEZE LIJN
$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
        }
    }
# Ontvang de toegangstoken
$token = (Invoke-RestMethod @request).access_token
# bekijk de tokenwaarde
$token

De demonstratie hieronder laat de PowerShell-script hierboven in actie zien. Merk op dat het aangevraagde toegangstoken wordt opgeslagen in de variabele $token.

Requesting access token

Toegangstokens zijn slechts één (1) uur geldig vanaf het moment van verkrijgen. U moet een ander toegangstoken aanvragen nadat het vorige token is verlopen.

Het verzenden van een e-mail vanuit Azure met behulp van de Microsoft Graph API

U bent nu klaar om de Microsoft Graph API met Azure te gebruiken om

# Geef het e-mailadres van de afzender en ontvanger op
$fromAddress = 'SENDER ADDRESS HERE'
$toAddress = 'RECIPIENT ADDRESS HERE'

# Specificeer het e-mailonderwerp en het bericht
$mailSubject = 'This is a test message from Azure via Microsoft Graph API'
$mailMessage = 'This is a test message from Azure via Microsoft Graph API'

# WIJZIG NIETS ONDER DEZE REGEL
# Bouw het Microsoft Graph API-verzoek
$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
}

# Verstuur het bericht
Invoke-RestMethod @params -Verbose


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