Usare Azure per Inviare Email con SendGrid, Graph e Office 365

Microsoft Azure non dispone di un servizio di consegna delle email. Che tu stia testando applicazioni o sviluppando script in Azure per inviare email, sappi che non è disponibile un servizio di posta elettronica nativo.

La connessione SMTP in uscita tramite la porta 25 è completamente bloccata in Azure. Se sei un cliente aziendale, puoi richiedere di sbloccare la porta 25 per il tuo tenant di Azure. In caso contrario, come puoi inviare email da Azure?

Di solito ci sono due modi per consentire l’invio delle email da Azure: utilizzando un SMTP smart host e richieste API REST. La maggior parte dei servizi di consegna delle email offre sia il metodo SMTP che il metodo API per l’invio delle email. In questo articolo, imparerai come inviare email da Azure al resto del mondo.

Prerequisiti

Questo articolo è una guida pratica e se intendi seguire gli esempi man mano che si procede, ci sono alcuni requisiti che devi soddisfare.

Come scegliere i servizi di posta elettronica da utilizzare con Azure per inviare email

Esistono diversi servizi di posta elettronica basati su cloud disponibili per l’uso. Alcuni dei nomi più importanti sono SendGrid, MailJet e MailGun. Qualunque servizio di posta elettronica si scelga, l’utilizzo per l’invio di email da Azure è simile; indirizzo del server e porta per SMTP e indirizzo del punto di accesso dell’API per il REST.

SendGrid è un esempio di servizio di posta elettronica di terze parti utilizzato in questo articolo. Altri servizi di posta elettronica utilizzati come esempi sono Office 365 SMTP relay e Microsoft Graph API.

Argomento correlato: Quale servizio di posta elettronica Azure scegliere per il 2021

Utilizzo di SendGrid

SendGrid è probabilmente l’opzione di servizio email più popolare per l’invio di email da Azure. Azure e SendGrid sono così popolari perché c’era un piano gratuito con un limite di 25.000 email al mese per i clienti di Azure.

Anche se il piano gratuito non è più offerto nel portale di Azure, come confermato da Microsoft, è possibile iscriversi a una sottoscrizione gratuita con un limite di 100 email al giorno. Avrai quindi accesso al servizio di invio email SMTP di SendGrid o all’API di posta elettronica per inviare email da un’app o una VM di Azure.

Creazione di un account SendGrid

Per utilizzare i servizi di SendGrid è necessario avere prima un account SendGrid. Vai alla pagina di Registrazione e dovresti vedere il modulo come mostrato di seguito. Inserisci il tuo indirizzo email e la password scelta. Poi, accetta i termini e fai clic sul pulsante Crea account.

Signing up for a free SendGrid account

Nella pagina successiva, devi inserire il tuo nome e le informazioni sulla tua azienda. Devi anche selezionare le opzioni appropriate come il tuo ruolo, il numero di email da inviare al mese e il numero di dipendenti. Poi, fai clic su Inizia.

Entering your account information

Quando accedi per la prima volta a SendGrid, potresti ricevere un errore che dice: “Non sei autorizzato a accedere a SendGrid; contatta il supporto.” Quando ciò accade, apri un ticket con il supporto di SendGrid. Potrebbero dover farti alcune domande di verifica prima di sbloccare il tuo accesso.

Ti verrà chiesto di abilitare l’autenticazione a due fattori durante il primo accesso. Assicurati di seguire attentamente le istruzioni.

Creazione di un’identità mittente SendGrid

Dopo aver creato l’account SendGrid, il passo successivo è autorizzare l’identità del mittente. Ci sono due opzioni: autenticare un singolo mittente (ad esempio, [email protected]) o autenticare un intero dominio (ad esempio, dominio.com).

In questo esempio, creerai un’identità di mittente singola che fungerà da indirizzo del mittente. Solo l’indirizzo del mittente verificato sarà autorizzato a inviare messaggi tramite il servizio di SendGrid. Segui le istruzioni di seguito per creare l’identità di mittente singola.

  1. Nella pagina di Benvenuto, fai clic sul pulsante Crea un Mittente Singolo.
Creating a single sender

2. Successivamente, nella sezione Crea un Mittente, fornisci tutte le informazioni richieste. I campi obbligatori sono contrassegnati da un asterisco rosso per facilitare il riferimento. Dopo aver inserito i dettagli, fai clic su Crea.

Providing the sender details

Successivamente vedrai il nuovo indirizzo del mittente elencato nella pagina Verifica Mittente Singolo. Come puoi vedere dall’esempio qui sotto, l’indirizzo non è ancora verificato, come indicato da una X rossa nella colonna VERIFICATO.

Viewing the sender address verification status

3. Per verificare il mittente, individua l’email inviata all’indirizzo del mittente, simile allo screenshot qui sotto. Quindi, fai clic sul pulsante Verifica Mittente Singolo.

Verifying the Single Sender address

L’indirizzo del mittente diventerà verificato. Dovresti vedere una pagina simile a quella mostrata di seguito, che conferma che la verifica del mittente è completa.

Confirming that the sender address verification is complete

Creazione di una chiave API SendGrid

Dopo aver creato l’indirizzo del mittente singolo, diventa disponibile l’interfaccia per creare le chiavi API. Pensa alla chiave API SendGrid come alla password. Senza di essa, il tuo codice non può autenticarsi con il servizio di trasmissione SMTP SendGrid. Segui i passaggi di seguito per creare una nuova chiave API.

  1. Nel menu a sinistra, fai clic su Impostazioni > Chiavi API. Quindi, fai clic sul pulsante Crea Chiave API nell’angolo in alto a destra della pagina.
Creating a new SendGrid API key

2. Viene visualizzato il riquadro Crea Chiave API. Inserisci il nome della chiave API che stai creando. Usa un nome che abbia senso, come “Chiave API di Test Azure”. Successivamente, per semplicità, seleziona Accesso Completo come permesso. Infine, fai clic sul pulsante Crea e Visualizza.

Naming the API key and choosing permissions

3. Viene mostrata la nuova chiave API. Ora copia e salva il valore della chiave perché non ti verrà mostrato nuovamente. Dopo aver copiato la chiave, fai clic su Fatto.

Saving the new SendGrid API key

Invio di un’email da Azure utilizzando il servizio di trasmissione SMTP SendGrid.

Ora hai i componenti necessari (account, mittente e chiave) per utilizzare SendGrid per inviare email di Azure. È il momento di testare se il servizio di invio di posta SMTP di SendGrid funziona. In questa sezione, userai PowerShell per inviare email da una VM di Azure.

Prima di eseguire qualsiasi codice, devi conoscere questi requisiti.

  • L’indirizzo del server SMTP di SendGrid è smtp.sendgrid.net.
  • Il nome utente utilizzato per l’autenticazione SMTP è sempre apikey.
  • La password da utilizzare è il valore della chiave API che hai creato in SendGrid.
  • Non utilizzare la porta 25. Utilizza invece la porta 587.
  • Solo l’indirizzo del mittente verificato in SendGrid è valido per l’uso come mittente delle tue email. In questo esempio, il mittente autorizzato è [email protected].

Lo script sottostante invierà un’email tramite il relay SMTP di SendGrid. Copia il codice qui sotto e modifica i valori di $sendGridApiKey, From, To e Body. Quindi, esegui il codice nella tua sessione di PowerShell. Fai riferimento ai commenti per capire cosa fa ogni riga di codice.

# Imposta qui la tua chiave API
$sendGridApiKey = 'SG...........P258'

$SendGridEmail = @{
	# Utilizza il tuo indirizzo mittente verificato.
	From = '[email protected]'
	# Specifica il destinatario dell'email. Dovrebbe funzionare qualsiasi indirizzo email valido.
	To = '[email protected]'
	# Aggiorna con l'oggetto dell'email che desideri utilizzare.
	Subject = 'This is a test message from Azure via SendGrid'
	# Aggiorna con il corpo del messaggio o il testo che desideri inviare.
	Body = 'This is a test message from Azure via SendGrid'
	
	# NON CAMBIARE NULLA AL DI SOTTO DI QUESTA LINEA
	SmtpServer = 'smtp.sendgrid.net'
	Port = 587
	UseSSL = $true
	Credential = New-Object PSCredential 'apikey', (ConvertTo-SecureString $sendGridApiKey -AsPlainText -Force)	
}

# Invia l'email
Send-MailMessage @SendGridEmail

La demo qui sotto mostra in tempo reale come appare l’esecuzione del codice sopra in PowerShell.

Sending an Email from Azure using SendGrid SMTP Relay

Per confermare la consegna dell’email, controlla la casella di posta del destinatario per trovare il messaggio di prova che hai inviato. Il risultato sarebbe simile a quello mostrato di seguito. Come puoi vedere, il messaggio è arrivato dall’indirizzo del mittente tramite sendgrid.net.

Confirming the SMTP test message was delivered

Correlato: Send-MailMessage: Il modo PowerShell per inviare email

Invio di un’email da Azure utilizzando l’API di SendGrid

Un altro modo per utilizzare SendGrid con Azure per inviare email è utilizzare SendGrid Web API V3. Invece di comunicare con SendGrid tramite SMTP, l’utilizzo dell’API avviene tramite HTTP. La richiesta HTTP viene inviata all’URL del punto di accesso dell’API di SendGrid.

Lo script di esempio PowerShell di seguito utilizza il cmdlet Invoke-RestMethod per inviare la richiesta di posta elettronica da Azure a SendGrid. Copia il codice e modifica i valori delle variabili $sendGridApiKey, $fromAddress, $toAddress, $mailSubject e $mailMessage.

Quando hai finito di aggiornare le variabili, esegui il codice 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

Dopo aver eseguito il codice PowerShell sopra, controlla la casella di posta del destinatario e conferma di aver ricevuto il messaggio di prova. L’esempio qui sotto mostra un messaggio di prova inviato con successo da Azure tramite l’API di SendGrid.

Confirming the API test message was delivered

Se vuoi saperne di più sull’API Web di SendGrid, visita la pagina V3 Mail Send API.

Utilizzo dell’autenticazione SMTP di Office 365

Un’altra opzione per inviare e-mail da Azure è utilizzare il relay SMTP di Office 365. Questo è possibile solo se la tua organizzazione ha già una sottoscrizione a Exchange Online. Proprio come l’utilizzo di SendGrid come host SMTP intelligente, il relay SMTP di Office 365 richiede l’autenticazione e l’utilizzo solo della porta 587.

Prima di utilizzare il relay SMTP di Office 365, devi conoscere le seguenti condizioni perché funzioni.

  • L’indirizzo del mittente deve essere un oggetto destinatario di Exchange Online valido, come una casella di posta o un utente di posta. Tuttavia, se si desidera archiviare i rapporti di non recapito (NDR), utilizzare una casella di posta.
  • L’utente di autenticazione deve avere una licenza Exchange Online valida. Solo gli utenti con licenza Exchange Online possono utilizzare il relay SMTP di Office 365.
  • Supponiamo che l’utente di autenticazione sia diverso dal mittente. In tal caso, all’utente deve essere assegnato il permesso di invio come per l’account mittente.
  • Il metodo di autenticazione utilizzato è base (legacy). Ciò significa che se l’autenticazione di base SMTP è disabilitata nella tua organizzazione o quando Microsoft elimina definitivamente l’autenticazione di base, l’autenticazione SMTP non funzionerà più.
  • L’indirizzo del server di relay SMTP è smtp.office365.com, e il numero di porta è 587.

Correlato: Come inviare email con Office 365 Direct Send e PowerShell

Creazione di un indirizzo mittente Office 365

In questo esempio, il mittente e l’utente di autenticazione sono separati. Assicurati di connetterti a Exchange Online PowerShell prima. Una volta connesso, segui i passaggi seguenti.

Crea una casella di posta condivisa utilizzando il comando seguente. Modifica i valori -Name e -PrimarySMTPAddress con i valori corretti.

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

La casella di posta condivisa dovrebbe essere creata e restituirebbe un risultato simile al seguente.

Creating a new shared mailbox as the sender

Quindi, assegna il permesso Invia come all’utente di autenticazione. Nell’esempio di seguito, all’utente viene assegnato il permesso Invia come alla mailbox condivisa.

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

Dopo l’esecuzione del comando sopra, dovresti ottenere un risultato simile a quello di seguito.

Assigning Send As permission

Invio di un’email da Azure utilizzando l’invio SMTP di Office 365

Dopo la creazione dell’indirizzo mittente e l’assegnazione del permesso “Invia come”, il passo successivo è testare la consegna dell’email utilizzando PowerShell e l’invio SMTP di Office 365.

Il codice di seguito si autentica utilizzando [email protected]. L’indirizzo [email protected] appare come mittente. Assicurati di assegnare i valori corretti prima di eseguire il codice.

# Fornisci le tue credenziali SMTP
$username = '[email protected]'
$password = '*************'

# Fornisci l'indirizzo email del mittente e del destinatario
$fromAddress = '[email protected]'
$toAddress = '[email protected]'

# Specifica l'oggetto dell'email e il messaggio
$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'

# NON MODIFICARE NULLA SOTTO QUESTA LINEA
$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)	
}

# Invia l'email
Send-MailMessage @Office365RelayEmail

Utilizzare credenziali in script in testo normale non è consigliato. Gli script di produzione devono utilizzare la crittografia delle credenziali o la gestione dei segreti per proteggere nomi utente e password.

Ora è il momento di controllare la mailbox del destinatario. Conferma che il messaggio di test è stato ricevuto.

Confirming the Office 365 SMTP relay test message was delivered

Utilizzo dell’API Microsoft Graph per inviare email da Azure.

Invece di utilizzare il relay SMTP di Office 365, il modo più sicuro e consigliato è utilizzare Microsoft Graph API. Con Microsoft Graph API, è possibile inviare email da qualsiasi casella di posta nell’organizzazione utilizzando chiamate REST API.

Per utilizzare Microsoft Graph API per inviare email è necessario un app Azure AD registrata. L’app registrata deve essere assegnata con l’autorizzazione API Mail.Send. Le sezioni seguenti mostreranno come configurare Microsoft Graph API e come utilizzarlo per inviare email.

Correlato: Utilizzare Microsoft Graph API con PowerShell

Registrazione di una nuova app in Azure Active Directory

In questa sezione, verrà registrata una nuova app Web nell’Azure Active Directory. La nuova app funge da identità di autenticazione per Microsoft Graph. Accedi al Portale di Azure se non hai effettuato l’accesso.

  1. Vai su Azure Active Directory —> Registrazione app. Quindi, fai clic sul pulsante Nuova registrazione.
Creating a new app registration

2. Nella pagina Registra un’applicazione, inserisci il nome dell’app.

3. Sotto Tipo di account supportati, scegli Solo account in questa directory organizzativa. Digita HTTP://localhost come URI di reindirizzamento. Infine, clicca sul pulsante Registra.

Registering an application

4. Attendi che la registrazione venga completata. Il processo richiede solo pochi secondi. Non dimenticare di annotare il ID applicazione (client) e il ID directory (tenant) risultanti. Saranno necessari in seguito.

Saving the Application ID and Directory values

Creazione di una chiave segreta del client

Pensa all’ID dell’applicazione che hai creato nella sezione precedente come l’username. E quell’ID dell’applicazione ha bisogno di una password, che è la chiave segreta.

Per aggiungere una nuova chiave segreta del client, segui i passaggi di seguito.

  1. Vai a Certificati e segreti, quindi clicca su Nuova chiave segreta del client.
  2. Inserisci la descrizione per la chiave segreta del client, come chiave1.
  3. Seleziona quando scade la chiave segreta e clicca su Aggiungi. Nell’esempio seguente, la chiave segreta scade in 1 anno.
Adding a new client secret key

Vedrai la nuova chiave elencata nella sezione Chiavi segrete del client. Ora è l’unico momento in cui vedrai il valore della chiave, quindi salva una copia.

Viewing the client secret key value

Ora che hai creato l’ID dell’applicazione e la chiave segreta, l’unico passaggio rimasto è assegnare le autorizzazioni richieste dell’API di Microsoft Graph. Senza assegnare le autorizzazioni, l’applicazione può autenticarsi ma non avrà l’autorità per fare nulla, come inviare email.

Per iniziare ad assegnare le autorizzazioni, segui i passaggi di seguito.

  1. Fare clic su Permessi API nel menu a sinistra.

2. Quindi, nella pagina Permessi configurati, fare clic sul pulsante Aggiungi un permesso.

Adding API permission

3. Nella sezione Richiesta di permessi API, fare clic per selezionare API di Microsoft Graph.

Selecting Microsoft Graph API

4. Quando viene richiesto di scegliere il tipo di permesso richiesto dall’applicazione, fare clic su Permessi dell’applicazione.

5. Nella casella di ricerca, digitare Mail.Send per cercarlo. Nei risultati, fare clic per selezionare il permesso Mail.Send. Infine, fare clic su Aggiungi permessi.

Assigning mail.send permission

6. Noterai che lo stato del permesso è “Non concesso per <nome organizzazione>”. A questo punto, tu o un amministratore globale dovete prima concedere il consenso all’applicazione. Per concedere il permesso, fare clic sul pulsante Concedi consenso amministratore per <organizzazione>.

Granting Admin consent

Lo stato del permesso API cambierà quindi in “Concesso per <nome organizzazione>”..

Confirming the API permission status

Acquisizione di un token di accesso

Le richieste inviate all’API di Microsoft Graph richiedono un token di accesso. A questo punto, hai già l’ID dell’applicazione, la chiave segreta e l’ID del tenant. Queste tre informazioni sono necessarie per acquisire un token di accesso.

Lo script PowerShell riportato di seguito invia la richiesta di token di accesso al punto di endpoint dell’API di Microsoft Graph. È necessario aggiornare le variabili $client_id, $client_secret e $tenant_id con i valori corretti. Quindi, copiare e incollare il codice in PowerShell per richiedere il token di accesso.

# sostituisci con il tuo ID applicazione
$client_id = 'APPLICATION ID'
# sostituisci con la tua chiave segreta
$client_secret = 'SECRET KEY'
# sostituisci con il tuo ID tenant
$tenant_id = 'TENANT ID'

# NON CAMBIARE NULLA SOTTO QUESTA RIGA
$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
        }
    }
# Ottieni il token di accesso
$token = (Invoke-RestMethod @request).access_token
# visualizza il valore del token
$token

La dimostrazione qui sotto mostra lo script PowerShell sopra in azione. Nota che il token di accesso richiesto viene memorizzato nella variabile $token.

Requesting access token

I token di accesso sono validi solo per un’ora dalla data di acquisizione. Dovrai richiedere un altro token di accesso dopo la scadenza del token precedente.

Invio di un’email da Azure utilizzando l’API di Microsoft Graph

Ora sei pronto per utilizzare l’API di Microsoft Graph con Azure per

# Fornire l'indirizzo email del mittente e del destinatario
$fromAddress = 'SENDER ADDRESS HERE'
$toAddress = 'RECIPIENT ADDRESS HERE'

# Specificare l'oggetto e il messaggio dell'email
$mailSubject = 'This is a test message from Azure via Microsoft Graph API'
$mailMessage = 'This is a test message from Azure via Microsoft Graph API'

# NON MODIFICARE NULLA SOTTO QUESTA LINEA
# Costruisci la richiesta dell'API di 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
}

# Invia il messaggio
Invoke-RestMethod @params -Verbose


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