你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:如何将 Azure 托管域添加到电子邮件通信服务

本文介绍如何在 Azure 通信服务中为电子邮件通信服务配置 Azure 托管域。

先决条件

预配 Azure 托管域

  1. 打开在开始创建电子邮件通信资源中创建的电子邮件通信服务资源的“概述”页。

  2. 使用以下选项之一创建 Azure 托管域。

    • (选项 1)单击“添加免费 Azure 子域”下的“1 - 单击添加”按钮。 继续执行步骤 3

    屏幕截图突出显示了如何添加免费的 Azure 托管域。

    • (选项 2)单击左侧导航面板上的“预配域”。

    屏幕截图显示了“预配域”导航页。

    • 单击上部导航栏中的“添加域”。
    • 从下拉列表中选择“Azure 域”。
  3. 等待部署完成。

    屏幕截图显示了部署进度。

  4. 创建域后,你会看到包含新域的列表视图。

    屏幕截图显示了预配的电子邮件域的列表。

  5. 单击预配的域的名称以打开域资源类型的概述页。

    屏幕截图显示了 Azure 托管域概述页。

先决条件

创建域资源

若要创建域资源,请登录到 Azure CLI。 可以从终端运行 az login 命令并提供凭据进行登录。 要创建资源,请运行以下命令:

az communication email domain create --domain-name AzureManagedDomain --email-service-name "<EmailServiceName>" --location "Global" --resource-group "<resourceGroup>" --domain-management AzureManaged

如果要选择特定订阅,你还可以指定 --subscription 标志并提供订阅 ID。

az communication email domain create --domain-name AzureManagedDomain --email-service-name "<EmailServiceName>" --location "Global" --resource-group "<resourceGroup>" --domain-management AzureManaged --subscription "<subscriptionId>"

可使用以下选项来配置域资源:

  • 资源组
  • 电子邮件通信服务资源的名称
  • 将要与资源关联的地理位置
  • 域资源的名称:
    • 对于 Azure 域,名称应为 AzureManagedDomain。
  • 域管理属性的值。
    • 对于 Azure 域,值应为 AzureManaged。

在下一步中,可以为域资源分配标记。 使用标记组织域资源。 有关标记的详细信息,请参阅资源标记文档

管理域资源

若要向域资源添加标记,请运行以下命令。 你也可以指向特定的订阅。

az communication email domain update --domain-name AzureManagedDomain --email-service-name "<EmailServiceName>" --resource-group "<resourceGroup>" --tags newTag="newVal1"

az communication email domain update --domain-name AzureManagedDomain --email-service-name "<EmailServiceName>" --resource-group "<resourceGroup>" --tags newTag="newVal1" --subscription "<subscriptionId>"

若要列出给定电子邮件通信服务中的所有域资源,请使用以下命令:

az communication email domain list --email-service-name "<EmailServiceName>" --resource-group "<resourceGroup>"

若要显示给定域资源的所有相关信息,请使用以下命令:

az communication email domain show --domain-name AzureManagedDomain --email-service-name "<EmailServiceName>" --resource-group "<resourceGroup>"

清理域资源

如果要清理和删除域资源,可以通过运行以下命令进行删除。

az communication email domain delete --domain-name AzureManagedDomain --email-service-name "<EmailServiceName>" --resource-group "<resourceGroup>"

注意

资源删除是永久性的。如果删除资源,则无法恢复任何数据,包括事件网格筛选器、电话号码或与资源相关的其他数据。

有关其他命令的信息,请参阅域 CLI

先决条件

安装 SDK

首先,在 C# 项目中加入通信服务管理 SDK:

using Azure.ResourceManager.Communication;

订阅 ID

你需要知道 Azure 订阅的 ID。 可以从门户获取此内容:

  1. 登录到 Azure 帐户
  2. 选择左侧边栏中的“订阅”
  3. 选择所需的任何订阅
  4. 单击“概览”
  5. 选择订阅 ID

在本快速入门中,我们假设你已将订阅 ID 存储在名为 AZURE_SUBSCRIPTION_ID 的环境变量中。

身份验证

若要与域资源进行通信,你必须首先向 Azure 验证自己的身份。

对客户端进行身份验证

创建经过身份验证的客户端的默认选项是使用 DefaultAzureCredential。 由于所有管理 API 都经过同一终结点,因此为了与资源交互,必须仅创建一个顶级 ArmClient。

要向 Azure 进行身份验证并创建 ArmClient,请执行以下代码:

using System;
using System.Threading.Tasks;
using Azure;
using Azure.Core;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Communication;
using Azure.ResourceManager.Resources;
...
// get your azure access token, for more details of how Azure SDK get your access token, please refer to https://learn.microsoft.com/dotnet/azure/sdk/authentication?tabs=command-line
TokenCredential cred = new DefaultAzureCredential();
// authenticate your client
ArmClient client = new ArmClient(cred);

与 Azure 资源交互

现在,你已进行身份验证。

对于以下每个示例,我们将把域资源分配给现有的电子邮件通信服务。

如果需要创建电子邮件通信服务,可以使用 Azure 门户执行该操作。

创建域资源

创建域资源时,需要指定资源组名称、电子邮件通信服务名称、资源名称和 DomainManagement。

注意

Location 属性始终为 global

// this example assumes you already have this EmailServiceResource created on azure
// for more information of creating EmailServiceResource, please refer to the document of EmailServiceResource
string subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e";
string resourceGroupName = "MyResourceGroup";
string emailServiceName = "MyEmailServiceResource";
ResourceIdentifier emailServiceResourceId = EmailServiceResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, emailServiceName);
EmailServiceResource emailServiceResource = client.GetEmailServiceResource(emailServiceResourceId);

// get the collection of this CommunicationDomainResource
CommunicationDomainResourceCollection collection = emailServiceResource.GetCommunicationDomainResources();

// invoke the operation
string domainName = "AzureManagedDomain";
CommunicationDomainResourceData data = new CommunicationDomainResourceData(new AzureLocation("Global"))
{
    DomainManagement = DomainManagement.AzureManaged,
};
ArmOperation<CommunicationDomainResource> lro = await collection.CreateOrUpdateAsync(WaitUntil.Completed, domainName, data);            
CommunicationDomainResource result = lro.Value;

// the variable result is a resource, you could call other operations on this instance as well
// but just for demo, we get its data from this resource instance
CommunicationDomainResourceData resourceData = result.Data;
// for demo we just print out the id
Console.WriteLine($"Succeeded on id: {resourceData.Id}");

管理域资源

更新域资源

...
// this example assumes you already have this CommunicationDomainResource created on azure
// for more information of creating CommunicationDomainResource, please refer to the document of CommunicationDomainResource
string subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e";
string resourceGroupName = "MyResourceGroup";
string emailServiceName = "MyEmailServiceResource";
string domainName = "AzureManagedDomain";
ResourceIdentifier communicationDomainResourceId = CommunicationDomainResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, emailServiceName, domainName);
CommunicationDomainResource communicationDomainResource = client.GetCommunicationDomainResource(communicationDomainResourceId);

// invoke the operation
CommunicationDomainResourcePatch patch = new CommunicationDomainResourcePatch()
{
    Tags =
    {
    ["newTag"] = "newVal",
    },
};
ArmOperation<CommunicationDomainResource> lro = await communicationDomainResource.UpdateAsync(WaitUntil.Completed, patch);
CommunicationDomainResource result = lro.Value;

// the variable result is a resource, you could call other operations on this instance as well
// but just for demo, we get its data from this resource instance
CommunicationDomainResourceData resourceData = result.Data;
// for demo we just print out the id
Console.WriteLine($"Succeeded on id: {resourceData.Id}");

按电子邮件服务列出

// this example assumes you already have this EmailServiceResource created on azure
// for more information of creating EmailServiceResource, please refer to the document of EmailServiceResource
string subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e";
string resourceGroupName = "MyResourceGroup";
string emailServiceName = "MyEmailServiceResource";
ResourceIdentifier emailServiceResourceId = EmailServiceResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, emailServiceName);
EmailServiceResource emailServiceResource = client.GetEmailServiceResource(emailServiceResourceId);

// get the collection of this CommunicationDomainResource
CommunicationDomainResourceCollection collection = emailServiceResource.GetCommunicationDomainResources();

// invoke the operation and iterate over the result
await foreach (CommunicationDomainResource item in collection.GetAllAsync())
{
    // the variable item is a resource, you could call other operations on this instance as well
    // but just for demo, we get its data from this resource instance
    CommunicationDomainResourceData resourceData = item.Data;
    // for demo we just print out the id
    Console.WriteLine($"Succeeded on id: {resourceData.Id}");
}

Console.WriteLine($"Succeeded");

获取域资源

// this example assumes you already have this EmailServiceResource created on azure
// for more information of creating EmailServiceResource, please refer to the document of EmailServiceResource
string subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e";
string resourceGroupName = "MyResourceGroup";
string emailServiceName = "MyEmailServiceResource";
ResourceIdentifier emailServiceResourceId = EmailServiceResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, emailServiceName);
EmailServiceResource emailServiceResource = client.GetEmailServiceResource(emailServiceResourceId);

// get the collection of this CommunicationDomainResource
CommunicationDomainResourceCollection collection = emailServiceResource.GetCommunicationDomainResources();

// invoke the operation
string domainName = "AzureManagedDomain";
bool result = await collection.ExistsAsync(domainName);

Console.WriteLine($"Succeeded: {result}");

清理域资源

// this example assumes you already have this CommunicationDomainResource created on azure
// for more information of creating CommunicationDomainResource, please refer to the document of CommunicationDomainResource
string subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e";
string resourceGroupName = "MyResourceGroup";
string emailServiceName = "MyEmailServiceResource";
string domainName = "AzureManagedDomain";
ResourceIdentifier communicationDomainResourceId = CommunicationDomainResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, emailServiceName, domainName);
CommunicationDomainResource communicationDomainResource = client.GetCommunicationDomainResource(communicationDomainResourceId);

// invoke the operation
await communicationDomainResource.DeleteAsync(WaitUntil.Completed);

Console.WriteLine($"Succeeded");

注意

资源删除是永久性的。如果删除资源,则无法恢复任何数据,包括事件网格筛选器、电话号码或与资源相关的其他数据。

先决条件

创建域资源

若要创建域资源,请通过以下命令使用 Connect-AzAccount 登录到 Azure 帐户并提供凭据。

PS C:\> Connect-AzAccount

首先,请确保使用以下命令安装 Azure 通信服务模块 Az.Communication

PS C:\> Install-Module Az.Communication

运行以下命令以创建 Azure 托管域资源:

PS C:\> New-AzEmailServiceDomain -ResourceGroupName ContosoResourceProvider1 -EmailServiceName ContosoEmailServiceResource1 -Name AzureManagedDomain -DomainManagement AzureManaged

可使用以下选项来配置域资源:

  • 资源组
  • 电子邮件通信服务资源的名称。
  • 域资源的名称:
    • 对于 Azure 域,名称应为 AzureManagedDomain。
  • 域管理属性的值。
    • 对于 Azure 域,值应为 AzureManaged。

在下一步中,可以为域资源分配标记。 使用标记组织域资源。 有关标记的详细信息,请参阅资源标记文档

管理域资源

若要向域资源添加标记,请运行以下命令。 你也可以指向特定的订阅。

PS C:\> Update-AzEmailServiceDomain -Name AzureManagedDomain -EmailServiceName ContosoEmailServiceResource1 -ResourceGroupName ContosoResourceProvider1 -Tag @{ExampleKey1="ExampleValue1"}

PS C:\> Update-AzEmailServiceDomain -Name AzureManagedDomain -EmailServiceName ContosoEmailServiceResource1 -ResourceGroupName ContosoResourceProvider1 -Tag @{ExampleKey1="ExampleValue1"} -SubscriptionId SubscriptionID

若要列出给定电子邮件通信服务中的所有域资源,请使用以下命令:

PS C:\> Get-AzEmailServiceDomain -EmailServiceName ContosoEmailServiceResource1 -ResourceGroupName ContosoResourceProvider1

若要列出给定域资源的所有相关信息,请使用以下命令:

PS C:\> Get-AzEmailServiceDomain -Name AzureManagedDomain -EmailServiceName ContosoEmailServiceResource1 -ResourceGroupName ContosoResourceProvider1

清理域资源

如果要清理和删除域资源,可以通过运行以下命令来删除域资源:

PS C:\> Remove-AzEmailServiceDomain -Name AzureManagedDomain -EmailServiceName ContosoEmailServiceResource1 -ResourceGroupName ContosoResourceProvider1

注意

资源删除是永久性的。如果删除资源,则无法恢复任何数据,包括事件网格筛选器、电话号码或与资源相关的其他数据。

Azure 托管域与自定义域的比较

在预配 Azure 托管域之前,请查看下表以确定哪种域类型最能满足你的需求。

Azure 托管域 自定义域
优点 - 设置快速且简单
- 无需验证域
- 电子邮件将从你自己的域发送
缺点 - 发件人域不是个性化域,无法进行更改
- 无法个性化发送方用户名
- 发送量非常有限
- 无法启用用户参与跟踪
- 需要验证域记录
- 验证设置时间更长

服务限制

Azure 托管域和自定义域都受服务限制的约束。 服务限制包括故障、速率和大小限制。 有关详细信息,请参阅 Azure 通信服务的服务限制 > 电子邮件

Azure 托管域的发件人身份验证

Azure 通信服务会自动配置电子邮件所需的电子邮件身份验证协议,如电子邮件身份验证最佳做法中所述。

电子邮件域现已准备好发送电子邮件。

后续步骤