Partilhar via


Enviar e-mail com SMTP e XOAuth2 usando .NET

Este artigo descreve como usar XOAuth2 para autenticação ao enviar emails usando o protocolo SMTP e os Serviços de Comunicação do Azure.

Pré-requisitos

Concluir este exemplo incorre em um pequeno custo de alguns centavos de dólar ou menos em sua conta do Azure.

Observação

Você também pode enviar um e-mail do seu próprio domínio verificado. Consulte Adicionar domínios verificados personalizados ao Serviço de Comunicação por Email.

Este artigo descreve como enviar email com os Serviços de Comunicação do Azure usando SMTP.

Verificação de pré-requisitos

  • Numa janela de terminal ou de comandos, execute o comando dotnet para verificar se a biblioteca de cliente .NET está instalada.
  • Para exibir os subdomínios associados ao seu Recurso de Email de Comunicação do Azure, entre no portal do Azure, localize seu Recurso de Email de Comunicação do Azure e abra a guia Provisionar domínios no painel de navegação esquerdo.

Crie uma nova aplicação C#

Numa janela de consola (como cmd, PowerShell ou Bash), utilize o comando dotnet new para criar uma nova aplicação de consola com o nome EmailQuickstart. Este comando cria um projeto C# simples "Hello World" com um único ficheiro de origem: Program.cs.

dotnet new console -o EmailSmtpQuickstart

Altere o seu diretório para a pasta da aplicação recém-criada e use o comando dotnet build para compilar a sua aplicação.

cd EmailSmtpQuickstart
dotnet build

Adicione o pacote MailKit.

dotnet add package MailKit

Recuperar um token Entra para autenticação SMTP OAuth

Conclua as etapas a seguir para recuperar um token de ID do Microsoft Entra. Substitua os detalhes do aplicativo Microsoft Entra ID pelos valores do aplicativo Entra usados para criar o nome de usuário SMTP.

using MailKit.Net.Smtp;
using MailKit.Security;
using Microsoft.Identity.Client;
using MimeKit;
using System.Net;

// Microsoft Entra ID (Azure AD) credentials
string smtpUsername = "<SMTP Username of the ACS Resource>";
string entraAppId = "<Entra Application ID>";
string entraAppClientSecret = "<Entra Application Client Secret>";
string tenantId = "<Entra Tenant ID>";
string entraAuthority = "https://login.microsoftonline.com/common/";

// Build the MSAL confidential client application
IConfidentialClientApplication app = ConfidentialClientApplicationBuilder
    .Create(entraAppId)
    .WithClientSecret(entraAppClientSecret)
    .WithAuthority(new Uri(entraAuthority))
    .WithTenantId(tenantId)
    .Build();

// Define the resource scope
string[] scopes = new string[] { "https://communication.azure.com/.default" };

// Acquire token for the client
AuthenticationResult result = await app.AcquireTokenForClient(scopes)
    .ExecuteAsync();

string token = result.AccessToken;

Construa a sua mensagem de e-mail

Para construir uma mensagem de e-mail, você precisa:

  • Defina o assunto e o corpo do e-mail.
  • Defina o seu endereço de remetente. Você recebe o seu endereço MailFrom do seu domínio verificado.
  • Defina o endereço do destinatário.

Substitua pelos detalhes do seu domínio e modifique o conteúdo e os detalhes do destinatário conforme necessário

string smtpHostUrl = "smtp.azurecomm.net";
string senderAddress = "<Mailfrom Address>";
string recipientAddress = "<Recipient Email Address>";

string subject = "Welcome to Azure Communication Service Email SMTP";
string body = "This email message is sent from Azure Communication Service Email using SMTP.";

Envie um e-mail usando o MailKit.

var message = new MimeMessage();
message.From.Add(new MailboxAddress("Sender Name", senderAddress));
message.To.Add(new MailboxAddress("Recipient Name", recipientAddress));
message.Subject = subject;
message.Body = new TextPart("plain")
{
    Text = body
};

using (var client = new SmtpClient())
{
    client.Connect(smtpHostUrl, 587, SecureSocketOptions.StartTls);

    // Use the access token to authenticate
    var oauth2 = new SaslMechanismOAuth2(smtpUsername, token);
    client.Authenticate(oauth2);

    client.Send(message);
    client.Disconnect(true);
}