Aracılığıyla paylaş


.NET kullanarak SMTP ve XOAuth2 ile e-posta gönderme

Bu makalede, Basit Posta Aktarım Protokolü (SMTP) ve Azure İletişim Hizmetleri kullanılarak e-posta gönderilirken kimlik doğrulaması için XOAuth2'nin nasıl kullanılacağı açıklanmaktadır.

Önkoşullar

Bu örneği tamamlamak, Azure hesabınızda birkaç ABD senti veya daha az bir maliyete neden olur.

Uyarı

Kendi doğrulanmış etki alanınızdan da e-posta gönderebilirsiniz. Bkz. E-posta İletişim Hizmeti'ne özel olarak doğrulanmış alan adları ekleme.

Bu makalede SMTP kullanarak Azure İletişim Hizmetleri ile e-posta gönderme açıklanmaktadır.

Ön koşul kontrolü

  • Bir terminal veya komut penceresinde, .NET istemci kütüphanesinin yüklü olduğunu kontrol etmek için dotnet komutunu çalıştırın.
  • Azure İletişim E-posta Kaynağınızla ilişkili alt etki alanlarını görüntülemek için Azure portalında oturum açın, Azure İletişim E-posta Kaynağınızı bulun ve sol gezinti bölmesinden Etki alanları sağla sekmesini açın.

Yeni bir C# uygulaması oluşturun.

Bir konsol penceresinde (cmd, PowerShell veya Bash gibi), dotnet new komutunu kullanarak EmailQuickstart adında yeni bir konsol uygulaması oluşturun. Bu komut, tek bir kaynak dosyasıyla basit bir "Merhaba Dünya" C# projesi oluşturur: Program.cs.

dotnet new console -o EmailSmtpQuickstart

Dizininizi yeni oluşturulan uygulama klasörüne değiştirin ve uygulamanızı derlemek için dotnet build komutunu kullanın.

cd EmailSmtpQuickstart
dotnet build

MailKit paketini ekleyin.

dotnet add package MailKit

SMTP OAuth kimlik doğrulaması için Entra belirteci alma

Microsoft Entra Id belirtecini almak için aşağıdaki adımları tamamlayın. Microsoft Entra ID uygulama ayrıntılarını SMTP Kullanıcı Adını oluşturmak için kullanılan Entra uygulamasındaki değerlerle değiştirin.

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;

E-posta iletinizi oluşturma

E-posta iletisi oluşturmak için şunları yapmanız gerekir:

  • E-posta Konusunu ve Gövdesini tanımlayın.
  • Gönderen Adresinizi tanımlayın. MailFrom Adresinizi Doğrulanmış Etki Alanınızdan alırsınız.
  • Alıcı Adresini tanımlayın.

Alan adı ayrıntılarınızla değiştirin ve içeriği, alıcı ayrıntılarını gerektiğinde düzenleyin.

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.";

MailKit kullanarak e-posta gönderin.

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);
}